লাইফটাইম অফ অ্যা ওয়ার্ম


28

শর্তাবলী

একটি কীট নন-নেগেটিভ পূর্ণসংখ্যার কোনো তালিকা, এবং তার ডানদিকের (অর্থাত, গত ) উপাদান বলা হয় মাথা । মাথা 0 না হয়, কীট একটি হয়েছে সক্রিয় সেগমেন্ট গঠিত উপাদানের দীর্ঘতম সংলগ্ন ব্লক যে মাথা অন্তর্ভুক্ত এবং মাথা মত বৃহৎ অন্তত তার উপাদানের সব আছেকমে সক্রিয় সেগমেন্ট মাথা হল 1. উদাহরণস্বরূপ দ্বারা decremented সক্রিয় সেগমেন্ট হয়, কীট 3 1 2 3 2সক্রিয় সেগমেন্ট হয়েছে 2 3 2কমে সক্রিয় সেগমেন্ট, এবং2 3 1

বিবর্তনের নিয়ম

একটি কৃমি নিম্নলিখিত ধাপে ধাপে বিকশিত হয়:

পদক্ষেপ টিতে (= 1, 2, 3, ...),
    যদি মাথা 0 হয়:
    অন্যথায় মাথাটি মুছুন : সক্রিয় বিভাগটিকে টি + 1 দ্বারা হ্রাস করা সক্রিয় বিভাগের প্রতিলিপি দ্বারা প্রতিস্থাপন করুন।

ঘটনা : যে কোনও কৃমি অবশেষে খালি তালিকায় বিকশিত হয় এবং এটি করার পদক্ষেপের সংখ্যাটি হ'ল পোকার জীবদ্দশায়

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

উদাহরণ (প্রথম বন্ধনীতে সক্রিয় বিভাগ)

কৃমি: 0,1

step    worm
         0(1)
1        0 0 0
2        0 0 
3        0
4           <- lifetime = 4

কৃমি: 1,0

step    worm
         1 0
1       (1)
2        0 0 0
3        0 0 
4        0
5           <- lifetime = 5

কৃমি: 1,1

step    worm
        (1 1)
1        1 0 1 0 
2        1 0(1) 
3        1 0 0 0 0 0
4        1 0 0 0 0
5        1 0 0 0
...
8       (1) 
9        0 0 0 0 0 0 0 0 0 0
10       0 0 0 0 0 0 0 0 0
...
18       0
19           <- lifetime = 19

কৃমি: 2

step    worm
        (2)
1       (1 1)
2        1 0 1 0 1 0
3        1 0 1 0(1)
4        1 0 1 0 0 0 0 0 0
5        1 0 1 0 0 0 0 0
6        1 0 1 0 0 0 0
...
10       1 0(1)
11       1 0 0 0 0 0 0 0 0 0 0 0 0 0
12       1 0 0 0 0 0 0 0 0 0 0 0 0
...
24      (1)
25       0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
...
50       0
51          <- lifetime = 51

কৃমি: ২,০০০

        (2 1)
1        2 0 2 0
2        2 0(2)
3        2 0(1 1 1 1)
4        2 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0
5        2 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0(1 1 1)
6        2 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0
7        2 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0(1 1)
8        2 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0{1 0}^9
...
??          <- lifetime = ??      

কৃমি: ৩

step    worm
        (3)
1       (2 2)
2       (2 1 2 1 2 1)
3        2 1 2 1 2 0 2 1 2 1 2 0 2 1 2 1 2 0 2 1 2 1 2 0 
4        2 1 2 1 2 0 2 1 2 1 2 0 2 1 2 1 2 0 2 1 2 1(2)
5        2 1 2 1 2 0 2 1 2 1 2 0 2 1 2 1 2 0(2 1 2 1 1 1 1 1 1 1)
6        2 1 2 1 2 0 2 1 2 1 2 0 2 1 2 1 2 0{2 1 2 1 1 1 1 1 1 0}^7
7        2 1 2 1 2 0 2 1 2 1 2 0 2 1 2 1 2 0{2 1 2 1 1 1 1 1 1 0}^6 (2 1 2 1 1 1 1 1 1) 
...      ...
??          <- lifetime = ??


সরাইয়া

মান পরিপ্রেক্ষিতে নিম্নলিখিত নিম্ন সীমা দ্বারা প্রদর্শিত পোকায় আক্রান্ত জীবনকালের, সাধারণত বড় আকার ধারন করবে দ্রুত বর্ধনশীল অনুক্রমের ফাংশন চ এর α :

worm                lower bound on lifetime
----------------    ------------------------------------------
11..10 (k 1s)       f_k(2)
2                   f_ω(2)
211..1 (k 1s)       f_(ω+k)(2)
2121..212 (k 2s)    f_(ωk)(2)
22..2 (k 2s)        f_(ω^k)(2)
3                   f_(ω^ω)(2)
...
n                   f_(ω^ω^..^ω)(2) (n-1 ωs)  >  f_(ε_0) (n-1)

লক্ষণীয় বিষয় হল, কীট [3] এর ইতিমধ্যে একটি জীবনকাল রয়েছে যা গ্রাহামের সংখ্যা , জি ছাড়িয়ে গেছে :

ω ω (2) = চ ω 2 (2) = চ ω2 (2) = চ ω + 2 (2) = চ ω + 1 (চ ω + 1 (2)) >> ফ ω + 1 (64) > জি।


কোড গল্ফ চ্যালেঞ্জ

নিম্নলিখিত আচরণের সাথে সংক্ষিপ্ততম ফাংশন সাবপ্রগ্রামটি লিখুন:

ইনপুট : কোনও কৃমি।
আউটপুট : কৃমির জীবনকাল।

কোডের আকারটি বাইটে পরিমাপ করা হয়।


এখানে একটি উদাহরণ রয়েছে (পাইথন, প্রায় 167 বাইটে গল্ফগুলি):

from itertools import *
def T(w):
    w=w[::-1]
    t=0
    while w:
        t+=1
        if w[0]:a=list(takewhile(lambda e:e>=w[0],w));a[0]-=1;w=a*(t+1)+w[len(a):]
        else:w=w[1:]
    return t


নোট : যদি টি (এন) কীটপতঙ্গের জীবদ্দশায় থাকে [n], তবে টি (এন) এর বৃদ্ধির হার মোটামুটি গুডস্টেইন ফাংশনটির । সুতরাং এটি যদি 100 বাইটের নীচে গল্ফ করা যায় তবে এটি বৃহত্তর সংখ্যা মুদ্রণযোগ্য প্রশ্নের জবাব দিতে পারে । (এই উত্তরের জন্য, এন-এ ধাপে-কাউন্টারটি সর্বদা শুরু করে বৃদ্ধির হারকে তীব্রতর করা যেতে পারে - কীট [n] এর সমান মান - এটি 0 থেকে শুরু করার পরিবর্তে)


আমি আপনার কোড দ্বারা বিভ্রান্ত আপনি বলেছিলেন যে মাথাটি সর্বাধিকতম উপাদান, তবে আপনার পাইথনের উদাহরণে আপনি মাথাটিকে এমন হিসাবে বিবেচনা করেন w[0]যা সেই তালিকার * বামতম উপাদান?

@ লেগোস্টোরমাট্রোপ্র আপনি যদি একটি তালিকা বাম এবং ডান হিসাবে বিবেচনা করতে পারেন। আপনি যদি কেবল প্রথম এবং শেষের বিষয়টি বিবেচনা করেন তবে প্রাথমিক স্ট্রিংটি পড়ার সময় আপনি প্রথম বা শেষের ডানদিকে মানচিত্র তৈরি করতে পারেন - যা প্রশ্নের অংশ নয়। তবে ফাংশন ইনপুটগুলি কঠোরভাবে সংজ্ঞায়িত হয়নি।
বব

@ লেগোস্টোরমাট্রোপ্র - ভাল ধরা; আমি কোডটি সংশোধন করে ইনপুট কীটকে বিপরীতমুখী করতে একটি লাইন যুক্ত করেছিলাম, যার মাথাটি সত্যই ডানদিকে রয়েছে বলে মনে করা হচ্ছে (অর্থাৎ তালিকার শেষ উপাদানটি ডাব্লু)। এটি দক্ষতার জন্য যা প্রোগ্রামটি বিপরীত পোকার উপর চালিত হয়।
মাঝামাঝি

সঠিক পথ উত্তর জন্য 2 1একটি যুক্তিসঙ্গত সময়ের মধ্যে জিজ্ঞাসা করতে খুব বেশী হতে পারে, কিন্তু একটি দরকারী পরীক্ষা যে ক্রম শুরু করা উচিত (2 1), 2 0 2 0, 2 0 (2), 2 0 (1 1 1 1), ...
পিটার টেলর

1
@ দ্য প্লাজমাএরেলগুন - হার্ভে ফ্রেডম্যানকে প্যারাফ্রেস করতে, দ্রুত বর্ধমান শ্রেণিবিন্যাসের (যেমন কীট-জীবনকাল) level০ স্তরের ফাংশন থেকে প্রাপ্ত সংখ্যাগুলি ট্রি (3) এর তুলনায় সম্পূর্ণ অপ্রয়োজনীয়
মাঝামাঝি

উত্তর:


15

গল্ফস্ক্রিপ্ট ( 56 54 টি অক্ষর)

{-1%0\{\)\.0={.0+.({<}+??\((\+.@<2$*\+}{(;}if.}do;}:L;

অনলাইন ডেমো

আমি মনে করি যে এখানে মূল কৌশলটি সম্ভবত পোকাটিকে বিপরীত ক্রমে রাখছে। এর অর্থ সক্রিয় বিভাগের দৈর্ঘ্য সন্ধান করা এটি বেশ কমপ্যাক্ট:.0+.({<}+?? (যেখানে 0আমরা মাথার চেয়ে ছোট উপাদান খুঁজে পাই তা নিশ্চিত করতে প্রহরী হিসাবে যুক্ত করা হয়েছে)।


একটি সরু হিসাবে, কৃমি জীবনকাল কিছু বিশ্লেষণ। আমি যত কীট বোঝাতে করব age, head tail(প্রশ্ন স্বরলিপি থেকে বিপরীত ক্রম বড়) মাথায় পুনরাবৃত্তি এবং লেজ নির্দেশ করে বহিঃপ্রকাশ ব্যবহার করছে: যেমন 2^3হয় 2 2 2

লেমা : যে কোনও সক্রিয় বিভাগের জন্য xs, এমন একটি ফাংশন f_xsরয়েছে যা age, xs 0 tailরূপান্তরিত হয় f_xs(age), tail

প্রুফ: কোনও সক্রিয় বিভাগে কখনও একটি থাকতে পারে না 0, সুতরাং লেজটি লেজ থেকে স্বতন্ত্র হওয়ার আগে যতক্ষণ না আমরা সমস্ত কিছু মুছি সেই বয়স অনুসারে এবং কেবলমাত্র এটির একটি ক্রিয়াকলাপ xs

লেমা : যে কোনও সক্রিয় বিভাগের জন্য xs, কৃমিটি age, xsবয়সে মারা যায় f_xs(age) - 1

প্রুফ: আগের লেমা দ্বারা, age, xs 0রূপান্তরিত f_xs(age), []। চূড়ান্ত পদক্ষেপটি এটি মুছে ফেলা হয় 0, যা পূর্বে স্পর্শ করা হয়নি কারণ এটি কখনই কোনও সক্রিয় বিভাগের অংশ তৈরি করতে পারে না।

এই দুটি লেমটা দিয়ে আমরা কিছু সাধারণ সক্রিয় বিভাগগুলি অধ্যয়ন করতে পারি।

জন্য n > 0,

age, 1^n 0 xs -> age+1, (0 1^{n-1})^{age+1} 0 xs
              == age+1, 0 (1^{n-1} 0)^{age+1} xs
              -> age+2, (1^{n-1} 0)^{age+1} xs
              -> f_{1^{n-1}}^{age+1}(age+2), xs

সুতরাং f_{1^n} = x -> f_{1^{n-1}}^{x+1}(x+2)(বেস কেস সহ f_{[]} = x -> x+1, বা আপনি যদি পছন্দ করেন f_{1} = x -> 2x+3)। আমরা দেখতে পাই f_{1^n}(x) ~ A(n+1, x)যেখানে Aঅ্যাকারম্যান – পিটার ফাংশন।

age, 2 0 xs -> age+1, 1^{age+1} 0 xs
            -> f_{1^{age+1}}(age+1)

এটি হ্যান্ডেলটি পাওয়ার জন্য যথেষ্ট 1 2( 2 1প্রশ্নের স্বরলিপিতে):

1, 1 2 -> 2, 0 2 0 2
       -> 3, 2 0 2
       -> f_{1^4}(4), 2
       -> f_{1^{f_{1^4}(4)+1}}(f_{1^4}(4)+1) - 1, []

প্রদত্ত ইনপুট সুতরাং 2 1আমরা আউটপুট আশা ~ A(A(5,4), A(5,4))

1, 3 -> 2, 2 2
     -> 3, 1 2 1 2 1 2
     -> 4, 0 2 1 2 1 2 0 2 1 2 1 2 0 2 1 2 1 2 0 2 1 2 1 2
     -> 5, 2 1 2 1 2 0 2 1 2 1 2 0 2 1 2 1 2 0 2 1 2 1 2
     -> f_{21212}^4(5) - 1

age, 2 1 2 1 2 -> age+1, (1 1 2 1 2)^{age+1}
               -> age+2, 0 1 2 1 2 (1 1 2 1 2)^age
               -> age+3, 1 2 1 2 (1 1 2 1 2)^age

এবং আমি কেন সত্যিই বুঝতে পারি যে এই ফাংশনটি এত উন্মত্তভাবে কেন বৃদ্ধি পায়।


খুব ঠান্ডা. আমি মনে করি এই প্রোগ্রাম এছাড়াও জয়ের জবাব দেবে সংক্ষিপ্ততম সসীম প্রোগ্রাম যার আউটপুটের আকার গ্রাহাম নম্বর ছাড়িয়ে গেছে । (বর্তমান বিজয়ীর হাস্কেল কোডের 63 বাইট রয়েছে Eg) উদাহরণস্বরূপ, 55 বাইটে, কিছুটা (যেহেতু আমি সিনট্যাক্স 9{-1%0\{\)\.0={.0+.({<}+??\((\+.@<2$*\+}{(;}if.}do;}:L~ত্রুটিতে প্রবণ) কৃমির জীবনকাল গণনা করে [9], যা গ্রাহামের সংখ্যাকে ছাড়িয়ে গেছে - এবং হতে পারে আরও গল্ফ
মাঝামাঝি

9

গল্ফস্ক্রিপ্ট, 69 62 টি অক্ষর

{0:?~%{(.{[(]{:^0=2$0+0=<}{\(@\+}/}{,:^}if;^?):?)*\+.}do;?}:C;

কাজ C স্ট্যাকের কীটটিকে প্রত্যাশা করে এবং ফলাফল দ্বারা এটি প্রতিস্থাপন করে।

উদাহরণ:

> [1 1]
19

> [2]
51

> [1 1 0]
51

ফ্যান্টাস্টিক! "বৃহত্তমতম মুদ্রণযোগ্য" প্রশ্নের জন্য একটি নির্দিষ্ট বিজয়ী দিতে অবশ্যই আপনি এটিকে কিছুটা সংশোধন করতে পারেন ।
মাঝামাঝি

আমি আপনাকে সেখানে কোনও পোস্ট দেখতে পাইনি, তাই আমি এগিয়ে গিয়ে এই কোডটির একটি পরিবর্তন পোস্ট করেছিলাম যা আমি এখনও পর্যন্ত বিজয়ী উত্তর বলে বিশ্বাস করি - এটি ধরে নিয়ে যে *এবং ^বহুগুণে পাটিগণিত অপারেটর হিসাবে ব্যবহৃত হচ্ছে না এবং exponentiate। অবশ্যই, আপনি যদি নিজের নিজের (সন্দেহাতীতভাবে উচ্চতর) উত্তর জমা দিতে চান তবে আমি খুশিতে আমার অপসারণ করব।
মাঝামাঝি

7

রুবি - 131 টি অক্ষর

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

f=->w{t=0;w.reverse!;until w==[];t+=1;if w[0]<1;w.shift;else;h=w.take_while{|x|x>=w[0]};h[0]-=1;w.shift h.size;w=h*t+h+w;end;end;t}

আমার পূর্ব-গল্ফযুক্ত সমাধান যা থেকে উপরেরটি উত্পন্ন হয়েছে:

def life_time(worm)
  step = 0
  worm.reverse!
  until worm.empty?
    step += 1
    if worm.first == 0
      worm.shift
    else
      head = worm.take_while{ |x| x >= worm.first }
      head[0] -= 1
      worm.shift(head.size)
      worm = head * (step + 1) + worm
    end
  end
  step
end

জেনেরিক টিপ: অনেক গল্ফ সমস্যা অ-নেতিবাচক পূর্ণসংখ্যার উপর কাজ করে, যা ক্ষেত্রে if foo==0ছাঁটাই করা যায় if foo<1। এটি আপনাকে এখানে একটি চর বাঁচাতে পারে।
পিটার টেলর

ঘটনাচক্রে, আমি এটি আকর্ষণীয় মনে করি যে এটি এক সেকেন্ড ছাড়াই কাজ করে reverse
পিটার টেলর

আহ্, তা হয় না। এটি কেবল পরীক্ষার ক্ষেত্রে কাজ করে কারণ তাদের কেবল প্যালিনড্রমিক সক্রিয় বিভাগ রয়েছে।
পিটার টেলর

গল্ফ টিপ, পিটারটেলর জন্য ধন্যবাদ। এছাড়াও, হারিয়ে যাওয়া দ্বিতীয় বিপরীতে ভাল ক্যাচ। আমি এটিকে যুক্ত করে রেখেছি later পরে আমি বিপরীতটি ব্যবহার না করে এটিকে আরও অন্যভাবে লেখার চেষ্টা করব। আমি নিশ্চিত যে আমি elseধারাটি এক লাইনে নামতে পারি এবং তারপরে if..else..endএকটি ত্রৈমাসিক বিবৃতিটির জন্য অদলবদল করতে পারি । আমি মনে করি কয়েকটি চরিত্র সংরক্ষণ করতে ল্যাম্বডা ব্যবহার করতে পারি।
ওআই

6

স্ক্লিপটিং (43 টি অক্ষর)

글坼가⑴감套擘終長①加⒈丟倘⓶增⓶가采⓶擘❷小終⓷丟❶長貶❷가掊貶插①增復合감不가終終

এটি স্থান-বিচ্ছিন্ন তালিকা হিসাবে ইনপুটটি প্রত্যাশা করে। এটি এর জন্য 1 1এবং সঠিক উত্তর দেয় 2তবে 2 1বা এর জন্য বা3 এটির এটি খুব বেশি সময় নেয় তাই আমি এটি শেষ হওয়ার অপেক্ষায় ছেড়ে দিয়েছি।

ভাষ্য সহ:

글坼 | split at spaces
가⑴ | iteration count = 0

감套 | while:
  擘終長①加⒈丟 | remove zeros from end and add to iteration count
  倘 | if the list is not empty:
    ⓶增⓶ | increment iteration count
    가采⓶擘❷小終⓷丟 | separate out active segment
    ❶長貶❷가掊貶插 | compute reduced active segment
    ①增復合 | repeat reduced active segment and concat
    감 | continue while loop
  不 | else
    가 | stop while loop
  終 | end if
終 | end while

2
একটি দোভাষী একটি লিঙ্ক সহজ হবে ... এছাড়াও, 86 বাইট, ইউটিএফ -16 ব্যবহার করে?
পিটার টেলর

@ পিটারটেলর: ধন্যবাদ, নিবন্ধটিতে দোভাষীটির লিঙ্কটি যুক্ত করেছেন। এবং হ্যাঁ, 43 বিএমপি অক্ষরগুলি ইউটিএফ -16 এ 86 বাইটে অনুবাদ করে।
টিমউই

5

কে (83)

worm:{-1+*({x,,(,/((x+:i)#,@[y@&w;(i:~~#y)#0;-1+]),y@&~w:&\~y<*y;1_y)@~*y}.)/(1;|,/x)}

এটি সম্ভবত আরও গল্ফ করা যেতে পারে, কারণ এটি কেবল পুনরাবৃত্তিটি মোটামুটি সোজাভাবে প্রয়োগ করে।

মৌলিক বিবর্তন ক্রিয়াকলাপ, {x,,(,/((x+:i)#,@[y@&w;(i:~~#y)#0;-1+]),y@&~w:&\~y<*y;1_y)@~*y}65৫ টি চর এবং কীট মারা গেলে বয়স বাড়ানো বন্ধ করতে কিছু কৌশল ব্যবহার করে। মোড়ক একটি একক পূর্ণসংখ্যার একটি ইনপুট একটি তালিকার সাথে জড়িত করে, ইনপুটটিকে বিপরীত করে দেয় (আপনার স্বরলিপি থেকে বিপরীত কোনও কৃমির আকারে পুনরাবৃত্তিটি লিখতে এটি ছোট), ফিক্সপয়েন্টের জন্য জিজ্ঞাসা করে, আউটপুট হিসাবে বয়সটি নির্বাচন করে এবং ফলাফলটি সামঞ্জস্য করে শেষ প্রজন্মের ওভারশুট জন্য অ্যাকাউন্টে।

আমি যদি জবরদস্তি করি এবং ম্যানুয়ালি বিপরীত করি তবে তা নেমে আসে ৮০ ({-1+*({x,,(,/((x+:i)#,@[y@&w;(i:~~#y)#0;-1+]),y@&~w:&\~y<*y;1_y)@~*y}.)/(1;x)} )।

কিছু উদাহরণ:

  worm 1 1 0
51
  worm 2
51
  worm 1 1
19

দুর্ভাগ্যক্রমে, এটি সম্ভবত খুব বেশি ব্যবহার হয় না তাত্ত্বিক দিক থেকে ব্যতীত বৃহত্তম সংখ্যার মুদ্রণযোগ্য হিসাবে , কারণ এটি যথেষ্ট ধীর, 64৪-বিট পূর্ণসংখ্যার মধ্যে সীমাবদ্ধ এবং সম্ভবত বিশেষত স্মৃতি-দক্ষ নয়।

বিশেষত worm 2 1এবং worm 3কেবল মন্থন করুন (এবং 'wsfullযদি আমি তাদের চালিয়ে যেতে দিই তবে সম্ভবত (স্মৃতি থেকে দূরে ফেলে দেওয়া হবে))।


আমি এই অনলাইন দোভাষী দিয়ে আপনার প্রোগ্রামটি চালানোর চেষ্টা করেছি , তবে এটি কোনও আউটপুট দেখায় না। (এক্সটেনশন .k সহ একটি পাঠ্য ফাইল জমা দেওয়ার মাধ্যমে কে ইন্টারপ্রেটারকে অনুরোধ করা হবে)) আপনি জানেন কী স্ট্যান্ডআউটে আউটপুট প্রেরণ করার জন্য কী করা যেতে পারে?
মাঝামাঝি

দেখে মনে হচ্ছে এটি চলছে কোনা, কে 3 এর একটি মুক্ত-উত্স ক্লোন। আমার কোডটি k4-এ লেখা হয়েছে এবং কে 3 এর সাথে সামঞ্জস্য হওয়ার সম্ভাবনা কম। আপনি কুই / k4 একটি সময়-সীমিত বিনামূল্যে কপি পেতে পারেন kx.com/software-download.php ; একবার আপনি যে আছে, REPL শুরু টাইপ ` to switch from করতে q` k, এবং আমার কোড পেস্ট করুন। পরিবর্তে, আপনি সঙ্গে একটি ফাইলে আমার কোড সংরক্ষণ করতে পারবেন .kএক্সটেনশান এবং অনুবাদক সেটিকে লোড করুন।
অ্যারন ডেভিস

2

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

@ এনএনএন এবং @ অ্যাডমকে ধন্যবাদ 7 বাইট সংরক্ষণ করা

0{⍬≡⍵:⍺⋄n←⍺+10=⊃⍵:n1↓⍵⋄n∇∊(⊂1n/-∘1@1¨)@1⊆∘⍵⍳⍨⌊\⍵}⌽

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

ব্যাখ্যা:

0{...}⌽     A monadic function train. We define a recursive function with two
            arguments: zero (our counter), and the reverse of our input
⍬≡⍵:⍺       Our base case - if our input is an empty list, return our counter
n←⍺+1       Define 'n' as our counter plus 1
0=⊃⍵:n1↓⍵  If the first element of the input is zero, recurse with the tail
            of our input and n
\⍵         Minimum-expand: creates a new list from our input where each element
            is the incremental minimum     
⍳⍨          Applies above to both sides of the index-of function. Index-of returns
            the index of the first occurence of each element in the left-side list.
            At this point, a (reversed) input list of [3 4 5 2 3 4] would result
            in [1 1 1 4 4 4]
⊆∘⍵         Partition, composed with our input. Partition creates sublists of the
            right input whenever the integer list in the left input increases.
            This means we now have a list of sub-lists, with the first element
            being the worm's active segment.
(...)@1    ⍝ Take the active segment and apply the following function train...
-∘1@1¨     ⍝ Subtract 1 from the first element of the active segment
1n/        ⍝ Replicate the resultant list above n+1 times
⊂          ⍝ Enclose the above, so as to keep the original shape of our sub-array
∊          ⍝ Enlist everything above together - this recursively concatenates our
           ⍝ new active segment with the remainder of the list
n∇         ⍝ Recurse with the above and n

আমি এপিএলটির সত্যিকারের পরিষ্কার সমাধান পেয়েছি, এটি কী অ্যারে-ভিত্তিক ভাষা নয়?
ThePlasmaRailgun

1

স্কালা, 198

type A=List[Int]
def T(w:A)={def s(i:Int,l:A):Stream[A]=l match{case f::r=>l#::s(i+1,if(f<1)r
else{val(h,t)=l.span(_>=l(0));List.fill(i)(h(0)-1::h.tail).flatten++t})
case _=>Stream()};s(2,w).length}

ব্যবহার:

scala> T(List(2))
res0: Int = 51

1

কে, 95

{i::0;#{~x~,0}{((x@!b),,[;r]/[i+:1;r:{@[x;-1+#x;-1+]}@_(b:0^1+*|&h>x)_x];-1_x)@0=h:*|x:(),x}\x}

k)worm:{i::0;#{~x~,0}{((x@!b),,[;r]/[i+:1;r:{@[x;-1+#x;-1+]}@_(b:0^1+*|&h>x)_x];-1_x)@0=h:*|x:(),x}\x}
k)worm 2
51
k)worm 1 1
19
q)worm 1 1 0 0 0 0
635

1

সি (জিসিসি) , 396 বাইট

#define K malloc(8)
typedef*n;E(n e,n o){n s=K,t=s;for(*s=*o;o=o[1];*t=*o)t=t[1]=K;t[1]=e;e=s;}main(c,f,l,j,a)n*f;{n w=K,x=w;for(;l=--c;x=x[1]=K)*x=atoi(f[c]);for(;w&&++l;)if(*w){n v=K,z=v,u=w,t=K;for(a=*v=*w;(u=u[1])&&*u>=*w;*z=*u)z=z[1]=K;for(x=v[1],v=K,*v=a-1,1[u=v]=x;u;u=u[1])w=w[1];for(j=~l;j++;)u=t=E(t,v);for(;(u=u[1])&&(x=u[1])&&x[1];);u[1]=0;w=w?E(w,t):t;}else w=w[1];printf("%d",--l);}

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

আমি জানি আমি পার্টিতে খুব দেরি করেছি, তবে আমি ভেবেছিলাম আমি সিটিতে এ চেষ্টা করব, যার জন্য একটি লিঙ্ক-তালিকা বাস্তবায়ন প্রয়োজন। এটি সমস্ত শনাক্তকারীকে একক অক্ষরগুলিতে পরিবর্তন করা ছাড়াও সত্যই গল্ফ হয় না, তবে এটি কার্যকর হয়!

সব মিলিয়ে, আমি এটি লিখেছি এটি তৃতীয় সি / সি ++ প্রোগ্রাম হ'ল আমি বেশ খুশি।


আপনার কি সত্যিই কোনও লিঙ্কযুক্ত তালিকার দরকার? শুধু অ্যারে বরাদ্দ কেন? যেহেতু এটি কোড গল্ফ, তাই আপনার কাজ শেষ হয়ে গেলে এগুলি মুক্ত করারও দরকার নেই। আপনি পারে এমনকি কল স্ট্যাক (নিশ্চিত নয়) তাদের সঞ্চয় করতে একটি উপায় খুঁজে বের করতে সক্ষম হবেন।
ডিফিউয়ার

এছাড়াও, আপনার একটি প্রধান ফাংশন প্রয়োজন নেই। কেবল একটি ফাংশন লিখুন যা কীটটিকে আর্গুমেন্ট হিসাবে গ্রহণ করে এবং তার জীবনকাল ফিরিয়ে দেয়। কৃমিটি একটি অ্যারে এবং তার দৈর্ঘ্য হতে পারে, বা কোনও অ্যারেটি নেতিবাচক সংখ্যায় শেষ হতে পারে।
dfeuer

1

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

(0!).reverse
n!(x:y)|x<1=(n+1)!y|(a,b)<-span(>=x)y=(n+1)!(([-1..n]*>x-1:a)++b)
n!_=n

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

@ এক্সনোরকে দুটি বাইটের জন্য ধন্যবাদ

আমি মনে করি সাধারণ বৃদ্ধি বৃদ্ধি করার জন্য একটি ভাল উপায় থাকা উচিত তবে আমি এখনও একটি সংক্ষিপ্তসার খুঁজে পাইনি।


1
দুটি ছোট গল্ফ : খালি তালিকার কেসটি দ্বিতীয়টি পরীক্ষা করে দেখুন এবং n১ দিয়ে নামিয়ে নিন
xnor

আমি আরও মনে করি যে (n+1)!দু'বার লেখার উপায় নেই , তবে আমার প্রচেষ্টাটি কেবল বাঁধা।
xnor


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