ভ্যান এক সিকোয়েন্সের নবম পদ


41

ভ্যান এক সিকোয়েন্সের নবম পদটি আউটপুট করুন।

ভ্যান এক সিকোয়েন্সটি হিসাবে সংজ্ঞায়িত করা হয়:

  • 0 দিয়ে শুরু হয়।
  • শেষ শব্দটি যদি সেই পদটির প্রথম সংঘটন হয় তবে পরবর্তী শব্দটি 0 হয়।
  • শেষ শব্দটি যদি এর আগে ঘটে থাকে তবে পরবর্তী পদটি হ'ল কত পদক্ষেপের পিছনে সবচেয়ে সাম্প্রতিক ঘটনা।

https://oeis.org/A181391

https://www.youtube.com/watch?v=etMJxB-igrc

https://www.youtube.com/watch?v=8VrnqRU7BVU

সিকোয়েন্স: 0,0,1,0,2,0,2,2,1,6,0,5,0,2, ...

পরীক্ষা:

ইনপুট | আউটপুট

  • 1 | 0
  • 8 | 2
  • 19 | 5
  • 27 | 9
  • 52 | 42
  • 64 | 0

সম্পাদনা

1 সূচকে অগ্রাধিকার দেওয়া হয়, 0 টি সূচক গ্রহণযোগ্য; এটি ইতিমধ্যে জমা দেওয়া কিছু সমাধান পরিবর্তন করতে পারে।

দয়া করে শুধু নবম মেয়াদ করুন।

একই (ইতিমধ্যে এটি পোস্ট করা অংশটি বাদে) দেখে মনে হচ্ছে কোড গল্ফার এবং নম্বরফিলের পর্যবেক্ষকদের একটি শালীন ওভারল্যাপ রয়েছে।


9
কর্মক্ষেত্রে নমফারফিলি ভিডিওটি দেখেছি এবং আমি বাড়ি ফিরে এ পোস্ট করব। প্রথমে সেখানে যাওয়ার জন্য আপনাকে অভিশাপ দিন। : পি
Draco18s

17
এটি কি 1-সূচকযুক্ত হতে হবে, বা আমরা 0-সূচক ব্যবহার করতে পারি?
রবিন রাইডার

6
আমরা কি তার পরিবর্তে অসীম ক্রমটি ফিরতে বা আউটপুট দিতে পারি?
জো কিং

2
... নাকি প্রথম nপদ?
শেগি

@ ড্রাকো 18 এস একই, আমি যখন এটি দেখলাম তখন নাম্বার ফাইলটি দেখার পরে এটি পোস্ট করতে এখানে এসেছি।
গেজা কেরেসসেনি

উত্তর:


25

জাভাস্ক্রিপ্ট (ES6),  46 41  37 বাইট

n=>(g=p=>--n?g(g[p]-n|0,g[p]=n):p)(0)

এটি অনলাইন চেষ্টা করুন!

কিভাবে?

আমাদের পুরো ক্রমটি সংরক্ষণ করার দরকার নেই। আমাদের কেবল প্রতিটি সংখ্যার ক্রমটিতে প্রদর্শিত শেষের অবস্থানের উপর নজর রাখা দরকার। আমরা সেই উদ্দেশ্যে পুনরাবৃত্তি ফাংশন অন্তর্নিহিত অবজেক্টটি ব্যবহার করি।g

প্রদত্ত মেয়াদ জন্য আমাদের এর ক্রমানুসারে এর আসল নিখুঁত অবস্থানে সেট করার দরকার নেই কারণ আমরা কেবল বর্তমান অবস্থানের সাথে দূরত্ব নিয়ে আগ্রহী। এজন্য আমরা কেবল ইনপুট এর বর্তমান মান সংরক্ষণ করতে পারি , যা কোডটিতে একটি হ্রাসকারী কাউন্টার হিসাবে ব্যবহৃত হয়।pg[p]n

সুতরাং, দূরত্বটি দ্বারা দেওয়া হয়েছে । সুবিধার্থে, এটি NaN এর মূল্যায়ন করে যদি এটি এর প্রথম ঘটনা , যা সহজেই প্রত্যাশিত রূপান্তরিত হতে পারে ।g[p]nপি 0p0

মন্তব্য

n => (             // n = input
  g = p =>         // g = recursive function taking p = previous term of the sequence
                   //     g is also used as an object to store the last position of
                   //     each integer found in the sequence
    --n ?          // decrement n; if it's not equal to 0:
      g(           //   do a recursive call:
        g[p] - n   //     subtract n from the last position of p
                   //     if g[p] is undefined, the above expression evaluates to NaN
        | 0,       //     in which case we coerce it to 0 instead
        g[p] = n   //     update g[p] to n
      )            //   end of recursive call
    :              // else:
      p            //   we've reached the requested term: stop recursion and return it
)(0)               // initial call to g with p = 0

18

পাইথন 3 , 69 63 62 বাইট

f=lambda n,l=0,*s:f(n-1,l in s and~s.index(l),l,*s)if n else-l

এটি অনলাইন চেষ্টা করুন!

দ্রষ্টব্য: এরিক আউটগল্ফার হিসাবে উল্লেখ করা হয়েছে, এই কোডটি পাইথন 2 তেও কাজ করে।

0-ইন্ডেক্স (যদিও শুধু একদম বিপথগামী হতে, আপনি এটা করতে পারেন পরিবর্তন করে -1-ইন্ডেক্স if nকরতে if~n: পি)

nশূন্যের না হওয়া অবধি ধারাবাহিকভাবে পুনর্গঠন করতে পাইথনের গৌরবহীন আনপ্যাকিং "স্টার অপারেটর" ব্যবহার করে ।

ফাংশনটি অনুসন্ধানের বিপরীতে এড়াতে, বিপরীত ক্রমে সিরিজটি তৈরি করে। অতিরিক্তভাবে, এটি প্রকৃতপক্ষে সমস্ত উপাদানগুলির উপেক্ষাগুলি সঞ্চয় করে, কারণ এগুলি শেষে ফিরে রূপান্তর বিনামূল্যে ছিল (অন্যথায় এটি -একটি স্থান হতে হবে) এবং এটি আমাদের ~s.index(l)পরিবর্তে ব্যবহার করে একটি বাইট সংরক্ষণ করে -~s.index(l)

পাইথন টিপলসের একই findফাংশনগুলির স্ট্রিং থাকলে 51 বাইট হতে পারে (ত্রুটি বাড়ানোর পরিবর্তে 1-ফেরত পাওয়া না গেলে), তবে এরকম ভাগ্য ...


3
আসলে, আপনি যে "স্টার অপারেটর" ব্যবহার করছেন তা পাইথন 3 এর আনপ্যাকিং অপারেটর নয়, বরং ভারাগ অপারেটর যা পাইথন ২
এরিক দ্য আউটগল্ফার

3
প্রথমটি হ'ল, কিন্তু দ্বিতীয়টি কি sপুনরাবৃত্তির কলটির জন্য প্যাক ছাড়ছে না ?
আরবো

1
আমি এটি পাইথন 2 এ পরীক্ষা করেছি এবং এটি কাজ করে।
এরিক আউটগল্ফার

@ এরিকথ আউটগল্ফার হুম, তবে দ্বিতীয় বার আনপ্যাকিংয়ের পরে নেই? ফাংশনটিতে এ জাতীয় সিনট্যাক্স ব্যবহার করতে ভ্যারাগস সমর্থন করতে হয় না।
আরবো

@ আরবো: এটি এর চেয়ে আলাদা নয় def func(f, *args): f(*args); ফাংশন কলগুলির মধ্যে আনপ্যাক করা বৈধ পাই 2 হয়। পিআই 3-কেবল যা রয়েছে তা তালিকা / ডিক্স বোধগম্যতা (যেমন [1, 2, *s]) বা প্যাকগুলি ভেরিয়েবলগুলি আনপ্যাক করছে a, *b = [1,2,3,4]
এহসান কিয়া

9

আর , 62 বাইট

function(n){while(sum(F|1)<n)F=c(match(F[1],F[-1],0),F)
+F[1]}

এটি অনলাইন চেষ্টা করুন!

বিপরীতে তালিকা তৈরি করে; matchফেরৎ প্রথম সূচী F[1](পূর্ববর্তী মান) মধ্যে F[-1](তালিকা বাকি), ফিরে 0যদি কোনো মিল পাওয়া যায়।

Fএটিকে আরম্ভ করা হয় FALSEএবং লুপের 0প্রথম পাসে জোর করা হয় while


2
আমি matchযখন এইভাবে এটি নির্মাণ করি তখন এই সমস্যার জন্য কতটা ভাল তা আমি ভয়ের प्रकार । সত্যিই পরিষ্কার।
ক্রিমিনালিভালগার

দ্বিতীয় লাইনের প্লাসটি এখানে কি কিছু করে? আমি ধরে নিয়েছি এটি একটি কিনারার কেস ঠিক করেছে, তবে আমি এটির জন্য একটিও পাই না।
ক্রিমিনালিভালগার

1
@CriminallyVulgar এটা নিগৃহীত উচিত Fকাছে 0যখন n==1অন্যথায় এটা ফিরে আসবে FALSE
জিউসেপ

ওহহ আচ্ছা. বোধগম্য হয়, আমি প্রচুর পরিসীমা চেষ্টা করছিলাম তবে একক মান নয়।
অপরাধী

9

পার্ল 6 , 47 42 বাইট

-৫ বাইট নোহেলহোফকে ধন্যবাদ

{({+grep(@_[*-1],:k,[R,] @_)[1]}...*)[$_]}

এটি অনলাইন চেষ্টা করুন!

বেনামি কোডব্লক যা অনুক্রমের 0-সূচিযুক্ত উপাদানকে ছাড়িয়ে যায়।

ব্যাখ্যা:

{                                            } # Anonymous codeblock
 (                                      )[$_]  # Return the nth element
                                    ...*       # Of the infinite sequence
  {                            }  # Where each element is
    grep(        :k        )[1]   # The key of the second occurrence
         @_[*-1],                 # Of the most recent element
                   ,[R,] @_       # In the reversed sequence so far
   +     # And numify the Nil to 0 if the element is not found



6

জে , 29 23 বাইট

1{(,~#|1+}.i.{.)@]^:[&0

এটি অনলাইন চেষ্টা করুন!

আসল কাজটি পাওয়ার ক্রিয়াটির পুনরাবৃত্তি ক্রিয়াতে সম্পন্ন হয় ^:যা আর্গুমেন্ট হিসাবে বহুগুণ পুনরুক্ত হয় [, ধ্রুবক মান 0 দিয়ে পুনরাবৃত্তি শুরু করে &0...

  • (#|1+}.i.{.)এটিই পুনরাবৃত্তি করে। এটিকে ভেঙে দিচ্ছি ...
  • }.i.{.i.তালিকার {.লেজের মধ্যে তালিকার শীর্ষের সূচীটি সন্ধান করুন }.। এটি 0-ভিত্তিক সূচকটি ফিরিয়ে দেবে, সুতরাং বর্তমান আইটেমটি 1 টি আগের পাওয়া গেলে এটি 0 ফিরে আসবে যদি এটি খুঁজে পাওয়া যায় না তবে এটি তালিকার দৈর্ঘ্য, অর্থাৎ লেজের দৈর্ঘ্য ফিরিয়ে দেবে।
  • 1+ভেন একের "কত পিছনে" 1-ভিত্তিক, 0-ভিত্তিক সূচকের জন্য সংশোধন করতে মানটিতে একটি যুক্ত করুন। মনে রাখবেন যে এটি খুঁজে পাওয়া না গেলে, মানটি এখন পুরো তালিকার দৈর্ঘ্য হবে।
  • #|পুরো তালিকার দৈর্ঘ্য দ্বারা বিভক্ত হয়ে পূর্ববর্তী পদক্ষেপে গণনা করা মানের বাকী অংশটি ফিরিয়ে দিন। মনে রাখবেন যে এটি "পাওয়া যায় না" 0 তে পরিণত হয়, তবে অন্যান্য সমস্ত মান অপরিবর্তিত রাখে।
  • ,~তালিকার সামনের অংশে নতুন মান যুক্ত করুন। আমরা কেবল সুবিধার্থে শেষের চেয়ে সামনেরটি ব্যবহার করি।
  • 1{ তালিকার ২ য় আইটেমটি ফিরিয়ে দিন, যেহেতু আমরা একটি বহুবার গণনা করেছি কারণ এটি সেভাবে খাটো।

6

পাইথন , 51 বাইট

f=lambda n,i=1:n>i and[f(n,i+1),i][f(n-1)==f(n+~i)]

এটি অনলাইন চেষ্টা করুন!

আউটপুট Falseজন্য 0। নিম্নতম ধনাত্মক পূর্ণসংখ্যার সন্ধান করে, বেশ আক্ষরিক অর্থে স্পাকে কার্যকর iকরে f(n-1)==f(n-i-1)। যদি এই ধরনের অনুসন্ধানের দিকে পরিচালিত করে i>=n, পূর্ববর্তী উপাদানটি আগে উপস্থিত হয়নি এবং আমরা উত্পাদন করি 0

তালিকায় পূর্বের মানগুলি সংরক্ষণ করার মতো যুক্তিসঙ্গত কিছু করার পরিবর্তে ফাংশনটি যখনই যখন প্রয়োজন হয় তাদের স্ক্র্যাচ থেকে পুনরাবৃত্তভাবে পুনরুদ্ধার করে এবং কখনও কখনও যখন তাদের প্রয়োজন হয় না। এটি 10 ​​বা তার বেশি সংখ্যক ইনপুটগুলির জন্য ফাংশনটি খুব ধীরে চালিত করে।


5

এপিএল (ডায়ালগ ইউনিকোড) , 19 17 বাইট এসবিসিএস

এপিএল শেখার জন্য এবং এপিএল সহায়তা পাওয়ার জন্য দুর্দান্ত জায়গা, এপিএল অর্চার্ডে এই উত্তরটি লেখার এবং গল্ফ করাতে তাদের সহায়তার জন্য এনএনজি, অ্যাডাম, রিচার্ড পার্ক এবং এইচপিউইজকে অনেক ধন্যবাদ ।

সম্পাদনা করুন: অ্যাডাম থেকে -2 বাইট।

⊃(⊢,⍨≢|1∘↓⍳⊃)⍣⎕-1

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

⊃(⊢,⍨≢|1∘↓⍳⊃)⍣⎕-1

                 -1  We initialize our array of results with -1.
 (           )⍣⎕     repeats the train (in parentheses) our input, ⎕, times.
        1∘↓⍳⊃        We take the index of the head (our last element in the sequence).
                     To signify "element not found", this returns the length of the array.
      ≢|             We take our index modulo the length of the array.
                     This turns our "element not found" from the length of the array to 0.
  ⊢,⍨                And we prepend to our array.
                    Finally, we return the first element of the array,
                     which is the most recently-generated.
                     This is the ⍵-th element of the Van Eck sequence.


4

05 এ বি 1 ই , 8 বাইট

F¯Rćk>Dˆ

n

ব্যাখ্যা:

F         # Loop the (implicit) input amount of times:
 ¯        #  Push the global array
  R       #  Reverse it
   ć      #  Extract the head; push the remainder and the head to the stack
    k     #  Get the 0-based index of the head in the remainder (-1 if not found)
     >    #  Increase it by 1 to make it 1-indexed (or 0 if not found)
      Dˆ  #  Add a copy to the global array
          # (after the loop, output the top of the stack implicitly as result,
          #  which is why we need the `D`/duplicate)

1
এটি অবজ্ঞার সেন্সর করার এক অদ্ভুত উপায়!
নেতিবাচক সাত

1
@ নেগেটিভসিভেন লল, আপনার অর্থটি বোঝার জন্য আমাকে কয়েক মিনিট সময় নিয়েছিল, তবে আমার ধারণা আপনি কী উল্লেখ করছেন F¯Rćk? ;)
কেভিন ক্রুইজসেন

4

জাভা, 96 80 76 বাইট

n->{int i,v=0,m[]=new int[n];for(;--n>0;m[v]=n,v=i<1?0:i-n)i=m[v];return v;}

অবরুদ্ধ নয়:

Function<Integer, Integer> vanEck =
n -> {

    int i;                  // i is the value of n when v was previously encountered
    int v = 0;              // v is the current element of vanEck sequence
    int[] m = new int[n];   // m[v] is the value of n when v was previously encountered

    while (--n > 0) {       // n is used as a decrementing counter

        i = m[v];
        m[v] = n;
        v = i == 0 ? 0 : i - n;
    }

    return v;
};

2
লুপের জন্য যখন লুপটি পরিবর্তন করে আপনার কয়েকটি বাইট সরিয়ে ফেলতে সক্ষম হবেন।
মেগাটম

1
হ্যালো, আপনি গলফ ঘোষণা ইনলাইনিং করে আরও পারা int[]মধ্যে intঘোষণা, এবং ব্যবহার <1পরিবর্তে ==0। উদাহরণ:int f(int n){int l[]=new int[n],i=0,j,v=0;while(++i<n){j=l[v];l[v]=i;v=j<1?0:i-j;}return v;}
অলিভিয়ার গ্রাগোয়ার

2
এবং এখন একটি ল্যাম্বডা, পাশাপাশি গেমটি @ মেগা টম দ্বারা মোট 80 বাইটের জন্য উল্লেখ করেছে:n->{int l[]=new int[n],i=0,j,v=0;for(;++i<n;l[v]=i,v=j<1?0:i-j)j=l[v];return v;}
অলিভিয়ার

1
অবশেষে, আপনি জাভাতে গল্ফ করার জন্য টিপস পরীক্ষা করতে পারেন ।
অলিভিয়ার গ্রাগোয়ার

3

কাঠকয়লা , 23 বাইট

≔⁰θF⊖N«≔⊕⌕⮌υθη⊞υθ≔ηθ»Iθ

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। ব্যাখ্যা:

≔⁰θ

প্রথম পদটি 0 এ সেট করুন।

F⊖N«

লুপ n-1বার। (যদি 0-সূচি গ্রহণযোগ্য হয় তবে 1 বাইট সংরক্ষণের জন্য অপসারণ করা যেতে পারে))

≔⊕⌕⮌υθη

পরবর্তী শব্দটি হ'ল পূর্ববর্তী শর্তগুলির বিপরীত তালিকায় বর্তমান পদটির বর্ধিত সূচক।

⊞υθ

পূর্ববর্তী শর্তগুলির তালিকায় বর্তমান শব্দটি যুক্ত করুন।

≔ηθ

বর্তমান শব্দটিকে পরবর্তী পদে সেট করুন।

»Iθ

লুপের শেষে বর্তমান শব্দটি মুদ্রণ করুন।



2

জেলি , 8 বাইট

ẎiḢ$;µ¡Ḣ

nnth

এটি অনলাইন চেষ্টা করুন!

কিভাবে?

ẎiḢ$;µ¡Ḣ - Link: n
     µ¡  - repeat this monadic link n times - i.e. f(f(...f(n)...)):
         - (call the current argument L)
Ẏ        -   tighten (ensures we have a copy of L, so that Ḣ doesn't alter it)
   $     -   last two links as a monad:
  Ḣ      -     head (pop off & yield leftmost of the copy)
 i       -     first index (of that in the rest) or 0 if not found
    ;    -   concatenate with L
       Ḣ - head

নোট করুন যে চূড়ান্ত ছাড়াই আমরা আসলে সংগ্রহ করেছি[a(n), a(n-1), ..., a(2), a(1), n]







2

পাইথন 3 , 128 114 111 102 99 বাইট

102 -> 99 বাইট, জোনাথন ফ্রেচের জন্য ধন্যবাদ

f=lambda n,i=1,l=[0]:f(n,i+1,l+[l[i-2::-1].index(l[-1])+1if l[-1]in l[:-1]else 0])if n>i else l[-1]

এটি অনলাইন চেষ্টা করুন!


আপনি নিজের অবস্থার অবহেলা করতে পারেন এবং বাইট সংরক্ষণ করার -পরিবর্তে ব্যবহার করতে পারেন !=
জোনাথন ফ্রেচ

এছাড়াও, যেহেতু আপনার গল্ফটি পার্শ্ব-প্রভাব-কম বলে মনে হচ্ছে, আপনি টিপলগুলির পরিবর্তে তালিকাগুলি ব্যবহার করতে পারেন।
জোনাথন ফ্রেচ

@ জোনাথানফ্রেচ তবে যদি আমার ডিফল্ট যুক্তি হিসাবে একটি তালিকা থাকে তবে এটি ক্রমাগত কলগুলির জন্য সঠিকভাবে কাজ করবে না?
রুহোলা

কেন হবে না?
জোনাথন ফ্রেচ

1
সম্ভবত আপনার আগের স্ক্রিপ্টটি তালিকাটি পরিবর্তন করেছে, কারণ এটি কোনও পার্শ্ব-প্রতিক্রিয়া-কম ছিল না: উদাহরণ
জোনাথন ফ্রেচ


1

পাইথন 3 , 112 বাইট

a=[0]
for _ in a*int(input()):k=a[-1];a+=k in a[:-1]and[a[::-1].index(k)+~a[-2::-1].index(k)]or[0]
print(-a[-2])

এটি অনলাইন চেষ্টা করুন!

-3 বাইট মাইপেলিয়নকে ধন্যবাদ


দ্বিতীয় লাইন for _ in a*int(input()):k=a[-1];a+=k in a[:-1]and[a[::-1].index(k)+~a[-2::-1].index(k)]or[0]3 বাইট সংরক্ষণ করতে পারে ।
মাইপেটলিয়ন

@ মাইপিটলিয়ন ধন্যবাদ
হাইপারনিউটারিনো


1

সিজেএম (15 বাইট)

0a{_(#)\+}qi*0=

অনলাইন ডেমো । এটি একটি সম্পূর্ণ প্রোগ্রাম এবং 0-সূচকযুক্ত।

ব্যবচ্ছেদ

0a      e# Push the array [0]
{       e# Loop...
  _(#   e#   Copy the array, pop the first element, and find its index in the array
  )\+   e#   Increment and prepend
}qi*    e# ... n times, where n is read from stdin
0=      e# Take the first element of the array

0

ক্লোজার, 69 বাইট

#((fn f[i c t](if(= i 1)t(f(dec i)(assoc c t i)(-(or(c t)i)i))))%{}0)

দু: খজনকভাবে আরও কার্যকরী পদ্ধতি দীর্ঘ বলে মনে হচ্ছে।


0

ডিসি, 94 91 90 বাইট

প্রোগ্রামের সময় ইনপুট নেওয়া হয়। এটি একটি ফাইলে সংরক্ষণ করুন এবং তারপরে চালানোর জন্য "ডিসি" করুন। অবশ্যই সংক্ষিপ্ততম নয়, তবে ডিসি-র মতো চ্যালেঞ্জ নিয়ে আমি মজা করি। পছন্দ হিসাবে ইনপুটটি 1-ভিত্তিক সূচক।

[st1si0swlbxltlwlu1-sulu0!=m]sm[dlt=qSsli1+siz0!=b0siLs]sb[0pq]sf[lisw2Q]sq?2-dsu1>f0dlmxp

Main control macro
[st                         ]sm   save top value as target
[  1si0sw                   ]sm   reset i to 1 and w to 0
[        lbx                ]sm   execute macro b to get next value in w
[           ltlw            ]sm   restore target to the stack and add w to the stack
[               lu1-su      ]sm   decrement the user inputted variable
[                     lu0!=m]sm   if the user inputted variable is not 0 recurse

Next value finder macro
[dlt=q                  ]sb     if the value on the stack is the target, quit
[     Ss                ]sb     save top value to s register
[       li1+si          ]sb     increment i register
[             z0!=b     ]sb     recurse if still more values            
[                  0si  ]sb     set i to 0 (will be saved to w if relevant)
[                     Ls]sb     move top value of s register to stack

[lisw2Q]sq   Load i, save it to w, and then quit this macro and the one that called it

[0pq]sf print 0 and quit the program
```


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.