গোলম্বের দোলাচলে ক্রম


21

OEIS একটি পরিবর্তন হয়েছে উপর (A111439) Golomb এর ক্রম । গোলম্বের ক্রম হিসাবে, ক্রমটিতে A(n)কতবার nউপস্থিত হয় তা বর্ণনা করে। তবে তদ্ব্যতীত, পর পর দুটি কোনও সংখ্যা অভিন্ন হতে পারে না। ক্রমটি তৈরি করার সময় A(n)সর্বদা ক্ষুদ্রতম ধনাত্মক পূর্ণসংখ্যার হিসাবে নির্বাচিত হয় যা এই দুটি বৈশিষ্ট্য লঙ্ঘন করে না। একটানা অভিন্ন সংখ্যা বর্জন করার কারণে, সিরিজটি বড় হওয়ার সাথে সাথে কিছুটা উপরে ও নিচে কাঁপছে। এখানে প্রথম 100 টি শর্ত রয়েছে:

1, 2, 3, 2, 3, 4, 3, 4, 5, 6, 5, 6, 5, 6, 7, 6, 7, 8, 7, 8, 9, 8, 9, 8, 9, 
10, 9, 10, 9, 10, 11, 10, 11, 10, 11, 10, 11, 12, 11, 12, 13, 12, 13, 12, 
13, 12, 13, 12, 13, 14, 15, 14, 15, 14, 15, 14, 15, 14, 15, 14, 15, 16, 15, 
16, 17, 16, 17, 16, 17, 16, 17, 16, 17, 18, 17, 18, 17, 18, 19, 18, 19, 18, 
19, 18, 19, 18, 19, 18, 19, 20, 19, 20, 21, 20, 21, 20, 21, 20, 21, 20

প্রথম 10,000 নম্বরগুলির সম্পূর্ণ তালিকা ওআইআইএস-এ পাওয়া যাবে

চ্যালেঞ্জ একটি প্রোগ্রাম বা ফাংশন যা নির্ণয় লিখতে হয় A(n), দেওয়া nnহয় 1তা নিশ্চিত করার জন্য স্ব-বর্ণনা সম্পত্তি কাজ করে ভিত্তি করে।

বিধি

আপনি কোনও প্রোগ্রাম বা একটি ফাংশন লিখতে পারেন এবং ইনপুট গ্রহণ এবং আউটপুট সরবরাহের আমাদের মানক পদ্ধতির কোনওটি ব্যবহার করতে পারেন ।

আপনি যে কোনও প্রোগ্রামিং ভাষা ব্যবহার করতে পারেন তবে নোট করুন যে এই ফাঁকগুলি ডিফল্টরূপে নিষিদ্ধ করা হয়েছে।

এটি , তাই সংক্ষিপ্ততম বৈধ উত্তর - বাইটগুলিতে মাপা - জয়।

পরীক্ষার মামলা

n     A(n)
1     1
4     2
10    6
26    10
100   20
1000  86
1257  100
10000 358


3
আমি কৌতূহলী ছিলাম তাই আমি এটি আঁকলাম । Neato।
ইঞ্জিনিয়ার টোস্ট

4
@ ইঞ্জিনিয়ারটোস্ট গ্রাফটিও ওআইআইএসে রয়েছে। আমি আপনার গ্রাফটিতে "রান" কতক্ষণ দেখছি এবং তা সত্যিই অদ্ভুত হয়ে উঠেছে তা আমি খতিয়ে দেখছিলাম । (এই গ্রাফটি দেখায় Nযে শেষের ঘটনার পরে কত ঘন ঘন N-1ডুবিয়ে দেওয়া সংখ্যাটি কমিয়ে দেয় N))
মার্টিন ইন্ডার

উত্তর:


5

হাস্কেল , 67 বাইট

f k|k<4=k|p<-k-1=[n|n<-[1..],n/=f p,sum[1|a<-[1..p],f a==n]<f n]!!0

একটি ফাংশন সংজ্ঞা দেয় fএটি অনলাইন চেষ্টা করুন! এটি f 15টিআইওতে খুব ধীর, গণনার সময় শেষ।

ব্যাখ্যা

কেবল সংজ্ঞাটির সাথে যাচ্ছি: প্রতিটি পর্যায়ে ন্যূনতম ধনাত্মক সংখ্যাটি বেছে নিন nযা সীমাবদ্ধতাগুলি পূরণ করে (পূর্ববর্তী প্রবেশের সমান নয়, এবং f nএখনও বার হয়নি)।

f k             -- Define f k:
 |k<4=k         -- If k < 4, it's k.
 |p<-k-1=       -- Otherwise, bind k-1 to p,
  [n|           -- compute the list of numbers n where
   n<-[1..],    -- n is drawn from [1,2,3,...],
   n/=f p,      -- n is not equal to f p, and
   sum[1|       -- the number of
    a<-[1..p],  -- those elements of [1,2,3,...,p]
    f a==n]     -- whose f-image equals n
   <f n]        -- is less than f n,
  !!0           -- and take the first element of that list.

5

গণিত, 69 68 বাইট

আমার জন্য অতিরিক্ত –1 বাইট খুঁজে পাওয়ার জন্য মার্টিন ইন্ডারকে ধন্যবাদ!

Last@Nest[{##&@@#,1//.x_/;x==Last@#||#~Count~x==#[[x]]->x+1}&,{},#]&

নামহীন ফাংশন nইনপুট হিসাবে ইতিবাচক পূর্ণসংখ্যার গ্রহণ এবং ইতিবাচক পূর্ণসংখ্যা ফেরত। আমরা nএই ক্রমের প্রথম উপাদানগুলির সম্পূর্ণ তালিকাটি তৈরি করি , তারপরে Lastউপাদানটি নিই। খালি তালিকা দিয়ে শুরু {}করে এটি একটি ফাংশন দিয়ে অপারেটিং করে তালিকাটি তৈরি করা হয়n মাধ্যমে ক্রমান্বয়ে (সার্বক্ষণিকভাবে Nest) সময় ব্যবহার করে তৈরি করা হয়।

প্রশ্নে ফাংশনটি হ'ল {##&@@#,1//.x_/;x==Last@#||#~Count~x==#[[x]]->x+1}&যা ক্রম মানগুলির (আংশিকভাবে ##&@@#) আংশিক তালিকা গ্রহণ করে এবং এর পরবর্তী মানটি সংযোজন করে। পরবর্তী মানটি শুরু করে গণনা করা হয় x=1, তবে যতক্ষণ শর্তটি পূরণ হয় ততক্ষণ পুনরায় প্রতিস্থাপন xকরে other অন্য কথায়, যদি হয় পূর্ববর্তী উপাদান হয়, বা অন্যথায় ইতিমধ্যে তালিকার সঠিক সংখ্যাটি রয়েছে। এই ফাংশনটি কিছু ত্রুটি ছুঁড়েছে, যেহেতু (উদাহরণস্বরূপ) আমাদের প্রাথমিক তালিকার তম উপাদানটি কল করা উচিত নয় ; তবে মানগুলি সমস্ত সঠিক correctx+1x==Last@#||#~Count~x==#[[x]]xxx{}


4

পাইথন 2, 99 86 বাইট

মোট 13 বাইটের উন্নতি করার জন্য @ ডেনিসকে ধন্যবাদ!

s=0,1,2,3
exec't=1\nwhile t==s[-1]or s.count(t)/s[t]:t+=1\ns+=t,;'*input()
print s[-4]

প্রোগ্রামটি বেশ নির্লজ্জভাবে এগিয়ে চলেছে: এটি এখনও পর্যন্ত নির্ধারিত মানগুলির তালিকাকে ট্র্যাক করে এবং পরবর্তী মানটি সংযোজন করে দেখায়। এটি 1তালিকার শেষে একটি যুক্ত করার চেষ্টা করে যদি এটি পারে; যদি তা না হয় তবে কোনও কিছুর 2অনুমতি না পাওয়া পর্যন্ত এটি চেষ্টা করে and

এখন, আমরা ফলাফল 1,2,3হতে বীজ দ্বারা শুরু 1,2,3। ইতিমধ্যে গণনা করা মানগুলির তালিকা খুব ছোট হওয়া নিয়ে কোনও সমস্যা এড়াতে এটি করা হয়: আমি অনুমান করি যে যদি nকমপক্ষে হয় 4তবে এর a(n)চেয়ে কম কঠোর হয় n। (এই প্রোগ্রামে,s[n] সমান a(n)। আমাদের তালিকাটি আসলে সূচনা করা হয়েছিল [0,1,2,3]কারণ 0পাইথনে তালিকাগুলি তালিকাভুক্ত করা হয় So সুতরাং উদাহরণস্বরূপ a(1)=s[1]=1, এবং a(2)=s[2]=2))

সুতরাং, যাক আমরা নির্ধারণের চেষ্টা করছি s[m], এর অর্থ আমাদের তালিকায় ইতিমধ্যে অন্তর্ভুক্ত রয়েছে s[0], s[1], ..., s[m-1]। আমরা শুরু করব t=1এবং সেট করার চেষ্টা করব s[m]=1। যখন এটি কাজ করে না, আমরা গিয়ে t=2সেট করার চেষ্টা করিs[m]=2 । প্রতিবার যখন আমরা বৃদ্ধি tকরি তখন আমরা যাচাই করি কিনা s.count(t)==s[t]... তবে ডান হাতটি এতক্ষণ ত্রুটি তৈরি করে না যেহেতু আমাদের কখনই উঁচুতে যেতে হবে না t=m। অনুমানটি বলে যে আমাদের কখনই করতে হবে না, যেহেতু আমরা প্রথম মান গণনা করি তা আসলে s[4]

এই প্রয়োগটি ক্রমের আরও তিনটি মানের প্রয়োজনের তুলনায় গণনা করে। উদাহরণস্বরূপ যদিn হয় 8, এটির s[11]মান ফেরত দেওয়ার আগে এটি গণনা করবে s[8]

অনুমানের একটি প্রমাণ দেখে আমি খুশি হব। আমি বিশ্বাস করি এটি (শক্তিশালী?) প্রবর্তন দ্বারা প্রমাণিত হতে পারে।

সম্পাদনা: এখানে একটি অনুমানের প্রমাণ রয়েছে । আমরা আসলে বিবৃতিটির কিছুটা শক্তিশালী রূপটি প্রমাণ করি, কারণ এতে কোনও অতিরিক্ত কাজ জড়িত না।

উপপাদ্য: শব্দটি nবৃহত্তর বা সমান সকলের জন্য4a(n) কম বা সমান (n-2)

প্রমাণ (স্ট্রং আনয়ন দ্বারা): (বেজ n=4): বিবৃতি জন্য সত্য n=4, যেহেতু a(4) = 2 = 4-2

এখন ধরে a(k)নেওয়া k-2সমস্ত kথেকে কম বা সমান4 মাধ্যমে n, সমেত (এবং অনুমান nঅন্তত হয় 4)। বিশেষত, এর অর্থ এই যে ক্রমের সমস্ত পূর্ববর্তী শর্তাদি সর্বাধিক ছিল (n-2)। আমাদের দেখাতে a(n+1)হবে যে সর্বাধিক হবে (n-1)। এখন, সংজ্ঞা অনুসারে, a(n)ক্ষুদ্রতম ধনাত্মক পূর্ণসংখ্যা যা কোনও শর্ত লঙ্ঘন করে না, তাই আমাদের কেবল এটি দেখানো দরকার যে মানটি (n-1)কোনও শর্তের লঙ্ঘন করবে না।

মানটি (n-1)"ক্রমাগত পুনরাবৃত্তি হবে না" শর্তটি লঙ্ঘন করবে না, কারণ অনুমিতি অনুমানের দ্বারা পূর্বের প্রবেশটি সর্বাধিক ছিল (n-2)। এবং এটি শর্ত লঙ্ঘন করবে না যতক্ষণ না "প্রদর্শিত হবে a(m)তার সংখ্যা m" unless(n-1) ইতিমধ্যে সময়ে পৌঁছে দেওয়া হত a(n-1)। তবে দৃ ind় আবেগ অনুমান দ্বারা, (n-1)পূর্বে 0বারে পৌঁছেছিল , এবং এর থেকে a(n-1)সমান নয়0a(m) জন্য ইতিবাচক হয় তার নয় m

অতএব a(n+1)n-1 = (n+1)-2 পছন্দসই হিসাবে কম বা সমান । Qed।


3

জেলি , 17 বাইট

Ṭ€S<;1Tḟ®Ḣ©ṭ
⁸Ç¡Ṫ

টিআইওর জন্য শেষ তিনটি পরীক্ষার মামলা খুব বেশি। আমি স্থানীয়ভাবে 1000 এবং 1257 যাচাই করেছি ।

এটি অনলাইন চেষ্টা করুন! বা প্রথম 100 টি শর্তাদি যাচাই করুন

কিভাবে এটা কাজ করে

⁸Ç¡Ṫ          Main link. No arguments.

⁸             Yield [].
 Ç¡           Execute the helper link n times (where n is an integer read from
              STDIN), initially with argument [], then with the previous return
              value as argument. Yield the last return value.
              Tail; yield the last element of the result.


Ṭ€S<;1Tḟ®Ḣ©ṭ  Helper link. Argument: A (array)

Ṭ€            Untruth each convert each k into an array of k-1 zeroes and one 1.
  S           Sum; column-wise reduce by +, counting the occurrences of all
              between 1 and max(A).
   <          Compare the count of k with A[k] (1-indexed), yielding 1 for all
              integers that still have to appear once or more times.
    ;1        Append a 1 (needed in case the previous result is all zeroes).
      T       Truth; find all indices of ones.
       ḟ®     Filter-false register; remove the value of the register (initially 0)
              from the previous result.
         Ḣ©   Head copy; yield the first (smallest) value of the result and save
              it in the register.
           ṭ  Tack; append the result to A.

3

পাইথন 2 , 77 74 বাইট

f=lambda n,k=1:n*(n<4)or map(f,range(n)+k*[n-1]).count(k)<f(k)or-~f(n,k+1)

এটি @ ম্যাথম্যান্ডানের অ্যালগরিদমের পুনরাবৃত্তিমূলক বাস্তবায়ন ।

বাস্তবায়নটি হ'ল (উন্মাদ) : ইনপুট 9 স্থানীয়ভাবে 2 সেকেন্ড নেয়, ইনপুট 10 52 সেকেন্ড এবং ইনপুট 11 লাগে 17 মিনিট 28 সেকেন্ড নেয়। তবে ল্যাম্বদার পরিবর্তে যদি নিয়মিত ফাংশন হিসাবে ঘোষণা করা হয় তবে পরীক্ষার কেসগুলি যাচাই করতে মেমোয়েজেশন ব্যবহার করা যেতে পারে।

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

মনে রাখবেন যে স্মৃতিচারণের পরেও, টিআইও f (1257) বা f (10000) (স্থানীয়ভাবে উভয় যাচাই করা ) গণনা করতে পারে না ।


2

05AB1E , 32 31 বাইট

XˆXˆG[N¯2(è<›¯¤NÊsN¢¯Nè‹&&#]N.ˆ

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

ব্যাখ্যা

XˆXˆ                             # initialize global list as [1,1]
    G                            # input-1 times do:
     [                    #]     # loop until expression is true     
      N¯2(è<›                    # n > list[-2]-1
             ¯¤NÊ                # list[-1] != N
                 sN¢¯Nè‹         # count(list, N) < list[N]
                        &&       # logical AND of the 3 expressions
                            N.ˆ  # add N to global list 
                                   and output last value in list and end of program

আমরা লুপ টেকনিক্যালি হয় Gযখন আমরা যোগ এন বিশ্বব্যাপী লিস্টে কিন্তু 05AB1E সমস্ত লুপ একই ভেরিয়েবল ব্যবহার এন সূচক তাই ভেতরের লুপ [...]ওভাররাইট হয়েছে এন এর Gঅর্থের আমরা এটি লুপের বাইরে যুক্ত করতে পারি।

নেস্টেড লুপ এবং শর্তসাপেক্ষিত সমস্যাগুলি লুপের ভিতরে এটি করা থেকে আমাদের বাধা দেয়।


2

বেফুঞ্জ, 141 136 বাইট

<v9\0:p8\2:*2:-1<9
v>p1+:3\8p0\9p:#^_&
>1-:#v_1.@>$8g.@
*+2%\>1-:!|>$!:::9g!\!9g!*\:8g\!8g`
9\+1g9::< \|`g9\g8+2::p
g2+\8p2+^:<>:0\9p::8

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

বেফুঞ্জের মেমরির সীমাবদ্ধতার কারণে, পূর্ববর্তী সমস্ত এন্ট্রিগুলিকে ধারাবাহিকভাবে অনুসরণ করা যথাযথ ব্যবহারিক নয়, সুতরাং এই সমাধানটি কম মেমরির পদক্ষেপ সহ একটি অ্যালগরিদম ব্যবহার করে যা মানগুলি আরও সরাসরি গণনা করে।

এটি বলেছিল, আমরা এখনও ঘরের আকারের দ্বারা সীমাবদ্ধ, যা বেফঞ্জ -৩৩ রেফারেন্স ইন্টারপ্রেটারে একটি স্বাক্ষরিত 8-বিট মান, তাই সিকোয়েন্সে সর্বাধিক সমর্থিত এমনকি সংখ্যার সংখ্যা A(1876) = 126এবং সর্বাধিক সমর্থিত বিজোড় সংখ্যা A(1915) = 127

আপনি যদি বৃহত্তর মানগুলি পরীক্ষা করতে চান তবে আপনাকে একটি বৃহত ঘরের আকারের একটি দোভাষী ব্যবহার করতে হবে। এর মধ্যে বেশিরভাগ বেফঞ্জ -৮৮ বাস্তবায়ন অন্তর্ভুক্ত হওয়া উচিত ( এটি অনলাইনে চেষ্টা করুন! )


0

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

সাধরণ। যে সংক্ষিপ্ত না। সহজ পুনরাবৃত্তি সমাধান।

L=[1,2,3]
n=input()
while len(L)<n:
 for i in range(2,n):
    if L.count(i)<L[i-1]and L[-1]!=i:L+=[i];break
print L[n-1]

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

একটি পুনরাবৃত্ত সমাধান (129 বাইট) এর এখানে একটি খুব খারাপ প্রচেষ্টা:

def f(n,L=[1,2,3]):
 if len(L)>=n:print L[n-1];exit(0)
 for i in range(2,n):
    if L.count(i)<L[i-1]and L[-1]!=i:f(n,L+[i])
 f(n,L)

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