গোলম্বের স্ব-বর্ণনার ক্রমটির নবম পদটি গণনা করুন


11

পূর্ববর্তী প্রশ্ন দ্বারা অনুপ্রাণিত ।

গোলম্বের স্ব-বর্ণনার ক্রম g (n) এমন একটি অনুক্রম যেখানে কোনও প্রাকৃতিক সংখ্যাকে nসিক্যুয়েন্স g (n) বারের মধ্যে পুনরাবৃত্তি করা হয়।

ক্রমের প্রথম কয়েকটি সংখ্যা হ'ল:

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

আপনি দেখতে পাচ্ছেন যে জি (4) = 3, এবং "4" ক্রমানুসারে 3 বার পুনরাবৃত্তি হয়েছে।

nআউটপুট একটি ইনপুট দেওয়া g(n)

সীমাবদ্ধতা: এন <100000।

ক্ষুদ্রতম কোড জিতেছে।


নির্বোধ পন্থাগুলির জন্য এটি পূর্ববর্তী প্রশ্নের মতোই এটির nপরিবর্তে ব্যবহার করে 2 - n % 1। উত্তরগুলি উল্লেখযোগ্যভাবে আলাদা হওয়ার আশা করার কোনও কারণ আছে কি?
পিটার টেলর

2
golomb=1:2:2:concat(zipWith replicate(drop 2 golomb)[3..])
হাসকেলে

@ পিটারটেলর: আমি এটি জানতাম না।
beary605

উত্তর:


5

গল্ফস্ক্রিপ্ট (৩১ টি অক্ষর)

~([1 2.]2{.2$=[1$)]*@\+\)}3$*;=

ডেমো


চমৎকার, তবে আপনি কি সত্যিই n = 99999 দিয়ে চেষ্টা করেছেন, এবং যদি তাই হয় তবে এটি কতক্ষণ সময় নিয়েছে? (আমি এটি চেষ্টা করার পরে, এটির জন্য আমি নির্ধারিত 100 এমআইবি মেমরির সীমাটি আঘাত করার আগে এবং এটি ক্র্যাশ করার আগে এটি এক ঘন্টার জন্য
চালিয়েছিল

@ ইলমারি কারোনেন, না প্রশ্ন মেমরি বা সময়ের দক্ষতার কোনও সীমা নির্ধারণ করে না, সুতরাং আমি ধরে নিয়েছি যে ইনপুট আকারের উপর আবদ্ধ সেই ভাষাগুলির জন্য যা নির্দিষ্ট-প্রস্থের ইনটগুলি ধারণ করে।
পিটার টেলর

6

জেলি , অ-প্রতিযোগিতামূলক

10 বাইট এই উত্তরটি প্রতিদ্বন্দ্বিতামূলক নয়, যেহেতু চ্যালেঞ্জটি জেলি তৈরির পূর্বে রয়েছে।

’ßßạ¹ß‘µṖ¡

এটি OEIS পৃষ্ঠা থেকে একটি (1) = 1, a (n + 1) = 1 + a (n + 1 - a (a (n))) পুনরাবৃত্ত সূত্র ব্যবহার করে ।

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

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

’ßßạ¹ß‘µṖ¡ Main link. Input: n

’          Decrement; yield n - 1.
 ßß        Recursively call the main link twice, with argument n - 1.
   ạ¹      Take the absolute difference of a(a(n - 1)) and n.
     ß     Recursively call the main link, with argument n - a(a(n - 1)).
      ‘    Increment the result, yielding 1 + a(n - a(a(n - 1))).
       µ   Combine the chain to the left into a single link.
        Ṗ  Pop [1, ..., n]. This yields [] iff n == 1.
         ¡ Execute the chain iff Ṗ returned a non-empty array.

4

পিএইচপি - 63 অক্ষর rs

function g($n){for(;++$i<=$n;){for(;++$j<=$i;){echo $i;}$j=0;}}

দ্রুত এবং সংক্ষিপ্ত।

মনে হচ্ছে ভুল ক্রমটি মনে আছে। Derp।

এটি সঠিক, দ্রুত এবং সংক্ষিপ্ত।

function g($n){for(;++$i<$n;){echo round(1.201*pow($i,.618));}}

নির্ভুলতা প্রয়োজনীয় 100,000 চিহ্নের অতীতে ভুগতে পারে, তবে আমি আসলে এই চিহ্নটি পূরণ করেছি।


3

পিএইচপি

এই পুনরাবৃত্ত সংস্করণটি সংক্ষিপ্ত (60) তবে গণনামূলকভাবে অক্ষম:

function g($n){return$n==1?1:1+g($n-g(g($n-1)));}echo g($n);

এটি অনেক দ্রুত তবে দীর্ঘ (78):

$a=[1,2,2];for($i=3;$i<$n;$i++)for($j=0;$j<$a[$i-1];$j++)$a[]=$i;echo$a[$n-1];

অনেক দ্রুত, তবে 89 টি অক্ষরটি হ'ল:

$a=[1,2,2];for($i=3;!isset($a[$n-1]);$i++)for($j=0;$j<$a[$i-1];$j++)$a[]=$i;echo$a[$n-1];

ও (এন) কোনটি



3

ওসিস , 7 বাইট (প্রতিযোগী নয়)

কোড:

n<aae>T

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

ওসিস আদনান দ্বারা নির্মিত একটি ভাষা যা অনুক্রমগুলিতে বিশেষীকরণ করা হয়।

বর্তমানে, এই ভাষাটি পুনরাবৃত্তি এবং বদ্ধ ফর্ম করতে পারে।

Tশেষে জন্য সাধারণভাবে সংক্ষেপে হয় 10, যা নির্দেশ করে a(0) = 0এবং a(1) = 1। আরও পরীক্ষামূলক কেস যুক্ত করতে শেষে কেবল তালিকায় যুক্ত করুন।

n<aae>T
n<aae>10  expanded

       0  a(0) = 0
      1   a(1) = 1

n         push n (input)
 <        -1
  a       a(above)  [a is the sequence]
   a      a(above)
    e     a(n-above)
     >    +1

এখন আমরা মূলত গণনা করি a(n-a(a(n-1))+1


2

পার্ল, 48 টি অক্ষর

(@a=(@a,($,)x($a[$,++]||$,)))<$_?redo:say$,for<>

স্টিডিনে ইনপুট, স্টাডআউট থেকে আউটপুট। পার্লের প্রয়োজন 5.10+ এবং বৈশিষ্ট্যটি -M5.010সক্ষম করতে say। অযোগ্য অ্যারে ম্যানিপুলেশনের কারণে ও ( এন 2 ) সময় নেয় , তবে এখনও 100,000 ম মেয়াদ পর্যন্ত সহজেই গণনা করার জন্য যথেষ্ট দ্রুত।



2

পাইথন - 64 টি অক্ষর

n=input()
g=[1,2,2]
for i in range(3,n):g+=[i]*g[i-1]
print g[n]

1
ওটা সুন্দর. আমি ভাবিনি [i]*g[i-1]যে এটি করা হবে তাই আমি এটি অন্য উপায়ে পেছনের দিকে ঝুঁকেছি; আমি ভেবেছিলাম যে এটি কোনও কারণে কোনও স্ক্যালারের মাধ্যমে ম্যাট্রিক্সকে গুণ করার মতো আচরণ করবে ...
chksmash


1

জে, 43 টি অক্ষর

f=:3 :'<.@:+&0.5(p^2-p)*y^p-1[p=:(+%)/20$1'

উইকিপিডিয়া পৃষ্ঠায় প্রদত্ত অ্যাসিপটোটিক এক্সপ্রেশন ব্যবহার করে একটি ফাংশন সংজ্ঞায়িত করে।

   f 5
3
   f 20
8
   f 100000
1479

বিরক্তিকরভাবে 9 টি অক্ষর কেবল নিকটতম পূর্ণসংখ্যার জন্য গোলাকার ব্যবহৃত হয়।


1

উপস্থাপন করুন , 69 55 54 বাইট

?1-(v  #1)-
1   0v ^(#    0 (1+0)#)!
    (#)  ^#1-(0)#

যদি কোনও স্ট্যান্ডার্ড কমপ্লায়েন্ট ইন্টারলিটার ব্যবহার করা হয় তবে এটি ইনপুট এবং আউটপুট বাইট মান হিসাবে নেয় । আসলে stdin / stdout- এ তে দশমিক সংখ্যার ব্যবহার করতে, আপনাকে প্রয়োজন চাই পাইথন ইন্টারপ্রেটার সঙ্গে NUMERIC_OUTPUT = Trueএবং অতিরিক্ত বিকল্প NUMERIC_INPUT = True

ব্যাখ্যা

প্রোগ্রামটির কঙ্কালটি হ'ল

?1-(    1 -
1                     )!

আমরা Nপ্রথম ভয়েসের উপর ইনপুটটি পড়ি এবং এটি পেতে হ্রাস পেয়েছি N-1। আমরা দ্বিতীয় ভয়েসকে আরম্ভ করি 1। তারপরে আমরা একবার লুপ করব N-1, যার প্রতিটি পুনরাবৃত্তি দ্বিতীয় স্ট্যাকের ক্রমের পরবর্তী মান পায় gets শেষে আমরা Nতম সংখ্যাটি মুদ্রণ করি ।

প্রোগ্রামটির ধারণাটি হ'ল ক্রমের প্রতিটি উপাদানকে তৃতীয় ভয়েসের একটি সারিতে স্থাপন করা এবং প্রতিটি পুনরাবৃত্তিতে সেই সারির মাথা হ্রাস করা। যখন মাথা পৌঁছে যায় 0, আমরা ক্রমটির মান বৃদ্ধি করি এবং এটি সরিয়ে ফেলি 0

এখন বিষয়টি হ'ল প্রিলিউড সারি ব্যবহার না করে স্ট্যাক ব্যবহার করে। সুতরাং এটি একটি সারির মতো ব্যবহার করতে আমাদের কিছুটা স্ট্যাকের চারপাশে স্থানান্তর করতে হবে।

v  #
0v ^
(#)

এটি অনুক্রমের বর্তমান মানটিকে প্রথম ভয়েস (অস্থায়ী অনুলিপি হিসাবে) অনুলিপি করে, একটি 0দ্বিতীয় ভয়েসে (সারির শেষ চিহ্ন চিহ্নিত করতে ) এক ধাক্কা দেয় । এবং তারপরে দ্বিতীয়টিতে তৃতীয় স্ট্যাকটি স্থানান্তর করতে (এবং এর মাধ্যমে বিপরীত) একটি লুপ সঞ্চালন করে। লুপের পরে, আমরা বর্তমান সিকোয়েন্স মানটির অনুলিপিটি দ্বিতীয় স্ট্যাকের উপরে রাখি (যা আমাদের সারিটির লেজ)।

 )
(#
 ^#1-

এটি দেখতে কিছুটা কুৎসিত লাগে তবে মূলত এটি এমন একটি লুপ যা স্ট্যাকটিকে তৃতীয় ভয়েসের দিকে ফিরিয়ে দেয়। যেহেতু )স্থানান্তর নির্দেশাবলীর একই কলামে রয়েছে তাই 0আমরা দ্বিতীয় ভয়েসটি আগে রেখেছিলাম তৃতীয় ভয়েসও শেষ হবে, সুতরাং আমাদের এটি অন্যটির সাথে সরিয়ে ফেলতে হবে #। তারপরে তৃতীয় কণ্ঠের শীর্ষকে হ্রাস করুন, অর্থাৎ সারির শিরোনাম।

এখন এটি কিছুটা বিরক্তিকর হয়ে 0ওঠে - যখন মানটি হয় তখন আমরা কিছু কোড চালাতে চাই , তবে প্রিলিডের একমাত্র নিয়ন্ত্রণ কাঠামো (লুপ) কেবলমাত্র শূন্য-অবধি মানগুলিতে সাড়া দেয়।

 0 (1+0)#
(0)#

নোট করুন যে দ্বিতীয় ভয়েসের শীর্ষটি সত্যবাদী (যেহেতু গোলম্ব ক্রমটি কোনও সকে ধারণ করে না 0)। সুতরাং কাজের চাপ সেই কণ্ঠে চলে যায় (প্রথম বন্ধনীর জোড়)। আমাদের যদি কেবল সারির মাথাটি না থেকে থাকে তবে তা ঘটতে আমাদের কেবল রোধ করা উচিত 0। সুতরাং প্রথমে আমাদের তৃতীয় কণ্ঠে একটি "লুপ" রয়েছে যা 0যদি দ্বিতীয় কণ্ঠের উপরে চাপ দেয় তবে যদি সারির মাথাটি এখনও শূন্য থাকে না। আমরা 0এখনই লুপ থেকে প্রস্থান করার জন্য তৃতীয় ভয়েসটিতে একটি টিপলাম। #তৃতীয় ভয়েস তারপর পারেন যে সরিয়ে ফেলা হবে 0, অথবা কিউ প্রধান সরিয়ে ফেলা হবে যদি যে ইতিমধ্যে শূন্য ছিল। এখন যে দ্বিতীয় লুপটি কেবলমাত্র প্রবেশ করানো হবে যদি সারিটির শূন্যটি শূন্য ছিল (এবং এটি)0দ্বিতীয় কণ্ঠে কখনও ধাক্কা দেওয়া হয়নি)। সেক্ষেত্রে আমরা সিকোয়েন্সের বর্তমান মান বাড়িয়েছি এবং 0লুপ থেকে বেরিয়ে আসার জন্য একটি চাপ দিই । শেষ অবধি, সর্বদা 0স্ট্যাকের উপরে থাকবে, যা আমাদের বাতিল করতে হবে।

আমি আপনাকে বলেছি যে প্রিলেডে যৌক্তিক অবহেলা বিরক্তিকর ...



1

সিজেম, 14 বাইট

সিজেএম এই চ্যালেঞ্জের চেয়ে অনেক কম বয়সী, সুতরাং এই উত্তরটি সবুজ চেকমার্কের জন্য উপযুক্ত নয়। যাইহোক, এটি খুব বিরল যে আপনি jএটি সুন্দরভাবে ব্যবহার করতে পারেন , তাই আমি যাইহোক এটি পোস্ট করতে চেয়েছিলাম।

l~2,{_(jj-j)}j

এটি এখানে পরীক্ষা করুন।

ব্যাখ্যা

jমূলত "স্মৃতিযুক্ত রিকার্সন অপারেটর"। এটি একটি পূর্ণসংখ্যা N, একটি অ্যারে এবং একটি ব্লক লাগে F। স্মৃতিচারণ শুরু করতে অ্যারে ব্যবহার করা হয়: সূচকের উপাদানটির iজন্য ফিরে আসবে F(i)jতারপরে গণনা করুন F(N), হয় এটি সন্ধান করে বা nমানটি এখনও মেমোসাইজ না করা থাকলে ( স্ট্যাকের সাহায্যে) ব্লকটি চালিয়ে। সত্যিকারের নিফটির বৈশিষ্ট্যটি হ'ল ব্লকের মধ্যেj কেবল একটি পূর্ণসংখ্যা লাগে iএবং F(i)পুনরাবৃত্তভাবে কল করে । সুতরাং এখানে কোড:

l~             "Read and eval input.";
  2,           "Push a 2-range onto the stack, i.e. [0 1]. The first value is irrelevant
                but the second value is the base case of the recursion.";
    {       }j "Compute F(N).";
     _(        "Duplicate i and decrement to i-1.";
       jj      "Compute F(F(i-1)).";
         -     "Subtract from i.";
          j    "Compute F(n-F(F(i-1))).";
           )   "Increment the result.";

1

জে, 16 বাইট

    <:{1($1+I.)^:[~]

    (<:{1($1+I.)^:[~]) every 1+i.20  NB. results for inputs 1..20
1 2 2 3 3 4 4 4 5 5 5 6 6 6 6 7 7 7 7 8

এই সমাধানটি ভারীভাবে অ্যালগোরিদমশর্ক এর অনুরূপ সমস্যার সমাধানের উপর ভিত্তি করে । আপনি এই পদ্ধতি সম্পর্কে কিছু ব্যাখ্যা খুঁজে পেতে পারেন।

জে, 33 বাইট

এই পদ্ধতির মধ্যে আমি h(k)প্রথম সূচকের মানগুলির সাথে একটি ক্রম তৈরি করি iযেখানে g(i)=kতাই h = 1 2 4 6 9 12 16...। ইনপুটটি যেখানে রয়েছে সেই অভিব্যক্তিটি h(k)থেকে আমরা মোটামুটিভাবে পেতে পারি ।h(1..k-1)({:+1+[:+/#<:])h(1..k-1)

থেকে আউটপুট গণনা hকরা সহজ।h ([:+/]>:[) input

[:+/]>:1 2(,{:+1+[:+/#<:])@]^:[~]


0

পাইথন - 76 টি অক্ষর

n=20;g=[1,2,2];[[g.append(i)for j in range(g[i-1])]for i in range(3,n)];g[n]

এটি আসলে গুলিগুলির একটি গুচ্ছ দিয়ে তালিকাটি পূরণ করে None। মনে হচ্ছে "সঠিক" পরিমাণ None
হ'ল

1
@ ড্যানিরো হ্যাঁ এটি এক ধরণের অদ্ভুত কোড। এটি আসলে কাজ করে নিজেকে বোঝাতে আমাকে কয়েকবার চালাতে হয়েছিল। List.append () রিটার্নের Noneধরণ থেকে এটি একগুচ্ছ ননের সাথে তালিকার উপলব্ধি পূরণ করে । আমি নেস্টেড লুপটি অর্জনের জন্য নেস্টেড তালিকার উপলব্ধিগুলি ব্যবহার করেছি। এখানে তালিকা বোঝার একমাত্র উদ্দেশ্য কোডটি সঠিক সময়ে লুপ করা - কারণ সেগুলি মান ফেলে দেয়
চকসমাশ

আমি যদি চিরাচরিত নেস্টেড লুপগুলি করে থাকি তবে এটি দুটি চরিত্রকে বাঁচায় :)
চকসমাশ

দুর্ভাগ্যক্রমে মনে হচ্ছে আপনি ইনপুটটিকে হার্ড-কোডিং করছেন, যা আমরা অনুমতি দিই না, এবং একটি REPL পরিবেশ ধরে নিচ্ছি, যা এটি একটি স্নিপেট তৈরি করবে। ডিফল্টরূপে , সমস্ত জমাটি অবশ্যই সম্পূর্ণ প্রোগ্রাম বা ফাংশন হতে হবে যা স্নিপেটের পরিবর্তে আমাদের ডিফল্ট I / O পদ্ধতিগুলির একটি ব্যবহার করে। যদি আপনার কোন প্রশ্ন থাকে তাহলে আমার জানতে দিন।
অ্যালেক্স এ।

@AlexA। কিছুটা প্রত্নতত্ত্ব করছেন?
চকসম্যাশ

0

জাভাস্ক্রিপ্ট - 48 টি অক্ষর

for(g=[,i=j=k=1,2];i<1e5;k=--k?k:g[++j])g[i++]=j

gক্রম মানগুলি সহ 1-সূচিযুক্ত অ্যারে তৈরি করে ।

সম্পাদনা করুন - জাভাস্ক্রিপ্ট - 46 টি অক্ষর

v=[,1];for(x=2;x<1e5;)v[x]=1+v[x-v[v[x++-1]]]

vক্রম মানগুলি সহ 1-সূচিযুক্ত অ্যারে তৈরি করে ।

2 সম্পাদনা করুন - ECMAScript 6 - 27 অক্ষর

g=x=>x-1?1+g(x-g(g(x-1))):1

প্রথম দুটি যথাযথভাবে দ্রুত - তৃতীয়টি খুব ধীর


0

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

f n|n<3=n|n<4=2|1>0=foldr1(++)[replicate(f m)m|m<-[1..]]!!(n-1)

এটি নিরীহ পদ্ধতির, আমি এটি লেখার সময় খুব সংক্ষিপ্ত পুনরুদ্ধার সম্পর্কে অবগত ছিলাম না, তবে আমি ভেবেছিলাম এটি যেভাবেই পোস্ট করব, এমনকি অন্য সমস্ত হাস্কেল বাস্তবায়নের চেয়েও দীর্ঘতর, উদাহরণস্বরূপ

গোলম্বের স্ব-বর্ণনার ক্রমটির নবম পদটি গণনা করুন

এবং

https://codegolf.stackexchange.com/a/23979/24877

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