লিনাস সিকোয়েন্স তৈরি করুন


14

সংজ্ঞা

OEIS A006345 এর বর্ণনা থেকে :

এটির জন্য a(n), একটি 1বা একটি বিবেচনা করুন 2। প্রত্যেকের জন্য, দীর্ঘতম পুনরাবৃত্তি প্রত্যয়টি সন্ধান করুন, অর্থাৎ প্রত্যেকটির জন্য a(n)=1,2, sক্রমটি a(1),...,a(n)শেষ হওয়া সম্পত্তিটির সাথে দীর্ঘতম ক্রম সন্ধান করুন ss। সংখ্যার সংক্ষিপ্ত প্রত্যয়টির ফলাফল হিসাবে এমন অঙ্কটি ব্যবহার করুন। a(1) = 1

পরিশ্রমী উদাহরণ

a(1)=1

যদি a(2)=1, আমাদের ক্রমটি থাকবে 1 1যেখানে শেষ থেকে দীর্ঘতম দ্বিগুণ সাবস্ট্রিং হয় 1a(2)=2পরিবর্তে যদি হয়, তবে এটি খালি সাবস্ট্রিং হবে। অতএব a(2)=2

কখন n=6, আমরা 1 2 1 1 2 1এবং এর মধ্যে নির্বাচন করি 1 2 1 1 2 2। প্রথম পছন্দটিতে, 1 2 1শেষ থেকে একটানা দ্বিগুণ হয়। দ্বিতীয় পছন্দ, এটি 2পরিবর্তে হয়। অতএব a(6)=2,।

কখন n=9, আমরা 1 2 1 1 2 2 1 2 1 এবং এর মধ্যে নির্বাচন করি 1 2 1 1 2 2 1 2 2। প্রথম পছন্দটিতে, দীর্ঘতম টানা দ্বিগুণ সাবস্ট্রিং হয় 2 1, এবং দ্বিতীয় 1 2 2পছন্দটিতে পরপর ডাবল করা হয়। অতএব a(9)=1

কার্য

দেওয়া হয়েছে n, ফিরে a(n)

চশমা

  • n ইতিবাচক হবে।
  • আপনি 1-সূচকের পরিবর্তে 0-সূচক ব্যবহার করতে পারেন। সেক্ষেত্রে আপনার উত্তরে দয়া করে বলুন। এছাড়াও, nসেক্ষেত্রেও হতে 0পারে।

Testcases

টেস্টকেসগুলি 1-সূচকযুক্ত। তবে আপনি 0-ইনডেক্সড ব্যবহার করতে পারেন।

n  a(n)
1  1
2  2
3  1
4  1
5  2
6  2
7  1
8  2
9  1
10 1
11 2
12 1
13 2
14 2
15 1
16 1
17 2
18 1
19 1
20 1

তথ্যসূত্র


1
এর পরীক্ষার ক্ষেত্রে n=9, প্রথম পছন্দটি শেষে 1 2 1 1 2 2 1 2 1ডাবল সাবস্ট্রিং 2 1থাকে।
শার্লক 9

1
নোট করুন যে লিঙ্কযুক্ত ওইআইএস পৃষ্ঠাতে ~ 43 বাইটের গল্ফড পার্ল দ্রবণ রয়েছে।
লাইওরি 1

উত্তর:


7

হাস্কেল, 146 140 137 133 118 বাইট

s!l|take l s==take l(drop l s)=l|1<2=s!(l-1)
g[w,x]|w<x=1|1<2=2
a 1=1
a n=g$(\s x->(x:s)!n)(a<$>[n-1,n-2..1])<$>[1,2]

আপনার কি সত্যিই দরকার (\x->(\s->...? অন্যথায় আপনি লিখতে পারে (\x s->...
flawr

এটি কয়েকটি সঞ্চয় করতে সহায়তা করে
প্রোগ্রাম ম্যান

পিপিসিজিতে আপনাকে স্বাগতম!
betseg

বুদ্ধিমান উপরের সীমাটি ব্যবহার করার পরিবর্তে div ...আপনি খাটো ব্যবহার করতে পারেন n। অতিরিক্ত তুলনা সমস্ত মিথ্যা ফিরিয়ে দেবে এবং ফলাফল পরিবর্তন করবে না।
খ্রিস্টান সিভর্স

খুব সুন্দর, আমার ধারণা, খুব বেশি মূল্য দেওয়া হলে আমি ধরেছিলাম যে ক্রাশ হবে
প্রোগ্রাম মানুষ

6

পাইথন, 137 বাইট

def a(n,s=[0],r=lambda l:max([0]+filter(lambda i:l[-i:]==l[-i*2:-i],range(len(l))))):
 for _ in[0]*n:s+=[r(s+[0])>r(s+[1])]
 return-~s[n]

এই সমাধানটি 0-ভিত্তিক সূচক ব্যবহার করছে।


6

জেলি , 25 24 22 20 বাইট

ডেনিসকে 2 বাইট ধন্যবাদ

2;€µḣJf;`€$ṪLµÞḢ
Ç¡Ḣ

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

পাইথের আমার উত্তরের একটি বন্দর ।

Ç¡Ḣ   Main chain

 ¡    Repeat for (input) times:
Ç         the helper chain
  Ḣ   Then take the first element



2;€µḣJf;`€$ṪLµÞḢ  Helper chain, argument: z

2;€               append z to 1 and 2, creating two possibilities
   µ         µÞ   sort the possibilities by the following:
    ḣJ                generate all prefixes from shortest to longest
       ;`€            append the prefixes to themselves
      f   $           intersect with the original set of prefixes
           Ṫ          take the last prefix in the intersection
            L         find its length
                 Ḣ   take the first (minimum)

4

গণিত, 84 বাইট

a@n_:=a@n=First@MinimalBy[{1,2},Array[a,n-1]~Append~#/.{___,b___,b___}:>Length@{b}&]


2

এমএটিএল , 34 বাইট

vXKi:"2:"K@h'(.+)\1$'XXgn]>QhXK]0)

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা

v             % Concatenate stack vertically: produces empty array
XK            % Copy to clipboard K. This clipboard holds the current sequence
i:            % Take input n. Generate vector [1 2 ... n]
"             % For each k in [1 2 ... n]
  2:          %   Push [1 2]. These are the possible digits for extending the sequence
  "           %     For each j in [1 2]
    K         %       Push contents of clipboard K (current sequence)
    @         %       Push j (1 or 2)
    h         %       Concatenate horizontally: gives a possible extension of sequence
    '(.+)\1$' %       String to be used as regex pattern: maximal-length repeated suffix
    XX        %       Regex match
    gn        %       Convert to vector and push its length: gives length of match
  ]           %    End. We now have the suffix lengths of the two possible extensions
  >           %    Push 1 if extension with "1" has longer suffix than with "2"; else 0 
  Q           %    Add 1: gives 2 if extension with "1" produced a longer suffix, or 1
              %    otherwise. This is the digit to be appended to the sequence
  h           %    Concatenate horizontally
  XK          %    Update clipboard with extended sequence, for the next iteration
]             % End
0)            % Get last entry (1-based modular indexing). Implicitly display

2

পাইথন 2, 94 বাইট

import re
s='1'
exec"s+=`3-int(re.search(r'(.*)(.)\\1$',s).groups()[1])`;"*input()
print s[-1]

0-ভিত্তিক সূচক ব্যবহার করে। আইডিয়নে এটি পরীক্ষা করুন ।


2

পাইথ , 26 বাইট

huh.mleq#.<T/lT2._b+RGS2QY

পরীক্ষা স্যুট.

ব্যাখ্যা

কখন n = 6, আমরা 1 2 1 1 2 1এবং এর মধ্যে নির্বাচন করি 1 2 1 1 2 2

আমরা এই দুটি সম্ভাবনা তৈরি করি এবং তারপরে তাদের প্রত্যয়টি দেখুন।

প্রথম এক জন্য, প্রত্যয় আছেন: 1, 2 1, 1 2 1, 1 1 2 1, 2 1 1 2 1, 1 2 1 1 2 1

2 দ্বারা বিভক্ত দৈর্ঘ্যের জন্য তাদের ঘোরানোর পরে যদি তারা একই হয় কিনা তা পরীক্ষা করে আমরা দ্বিগুণ প্রত্যয়গুলির জন্য ফিল্টার করি (এটি প্রমাণিত হয় যে এই চেকটি নিখুঁত নয়, কারণ এটি নিশ্চিত করে 1এবং 2এটিও)।

আমরা সর্বশেষ দ্বিগুণ প্রত্যয় নিয়ে তার দৈর্ঘ্যটি নিই।

তারপরে আমরা সেই সম্ভাবনাটি বেছে নিই যা উপরে উত্পন্ন নূন্যতম দৈর্ঘ্যের সাথে মিলে যায়।

তারপরে আমরা পরবর্তী মূল্যতে এগিয়ে যাই n

এই প্রোগ্রামের উদ্দেশ্যে, পরিবর্তে বিপরীত অ্যারে তৈরি করা গল্ফিয়ের ছিল।

huh.mleq#.<T/lT2._b+RGS2QY
 u                      QY   repeat Q (input) times,
                             start with Y (empty array),
                             storing the temporary result in G:
                   +RGS2         prepend 1 and 2 to G,
                                 creating two possibilities
   .m             b              find the one that
                                 makes the following minimal:
                ._                   generate all prefixes
       q#                            filter for prefixes as T
                                     that equals:
         .<T/lT2                         T left-rotated
                                         by its length halved
      e                              take the last one
     l                               generate its length
  h                              take the first minimal one
h                                take the first one from the generated
                                 array and implicitly print it out

2

পাইথ, 46 29 বাইট

@ লিকি নুনের চমৎকার পাইথ উত্তর থেকে কিছুটা অনুপ্রেরণা নিয়েছেন। স্ট্রিংগুলি ব্যবহার করে আরও ছোট উপায় আছে কিনা তা দেখার চেষ্টা করেছি। এখনও 3 বাইট শর্ট!

huh.melM+kf!x>blTT._bm+dGS2Qk

আপনি এটা চেষ্টা করে দেখতে পারেন এখানে


uলুপের জন্য সুস্পষ্ট পরিবর্তে লাল সিই ব্যবহার করা আপনাকে 4 বাইট সাশ্রয় করে
Leaky Nun


2

পার্ল, 40 বাইট

$a.=/(.*)(.)\1$/^$2for($a)x$_;$_=$a%5+1

কোডটি 39 বাইট দীর্ঘ এবং এতে -pস্যুইচ ( +1 বাইট) প্রয়োজন।

লুপটি প্রাসঙ্গিক OEIS পৃষ্ঠায় সমাধানের দ্বারা অনুপ্রাণিত হয় , যদিও আমি নিয়মিত প্রকাশের সাথে স্বাধীনভাবে উপস্থিত হয়েছি।

আইডিয়নে এটি পরীক্ষা করুন ।


আপনি OEIS কে, বিশেষত টন হসপেল / ফিল কারমোডিকে ছাড়িয়ে গেছেন ...
লিকি নুন

OEIS স্ক্রিপ্ট কোনও ইনপুট নেয় না এবং পুরো ক্রমটি মুদ্রণ করে আসলেই তুলনামূলক নয়।
ডেনিস

1

জাভাস্ক্রিপ্ট (ES6), 84

সূচক বেস 0

n=>eval("s='1';for(r=d=>(s+d).match(/(.*)\\1$/)[0].length;n--;s+=c)c=r(1)>r(2)?2:1")

কম গল্ফড

n=>{
  r = d => (s+d).match(/(.*)\1$/)[0].length;
  c = '1';
  for(s = c; n--; s += c)
    c = r(1) > r(2) ? 2 : 1;
  return c;
}

পরীক্ষা

F=
n=>eval("s='1';for(r=d=>(s+d).match(/(.*)\\1$/)[0].length;n--;s+=c)c=r(1)>r(2)?2:1")

for(n=0;n<20;n++)console.log(n,F(n))

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