কিম্বারলিং সিকোয়েন্স


18

ভূমিকা

অবশ্যই, আমরা অনেক চ্যালেঞ্জ পেয়েছি , সুতরাং এখানে অন্য একটি রয়েছে।

কিম্বারলিং সিকোয়েন্স ( A007063 ) নিম্নলিখিত হিসাবে চলেছে :

1, 3, 5, 4, 10, 7, 15, 8, 20, 9, 18, 24, 31, 14, 28, 22, ...

এটি সাধারণ পুনরাবৃত্তির পরিবর্তন করে তৈরি করা হয়:

[1] 2  3  4  5  6  7  8

অনুক্রমের প্রথম শব্দটি হ'ল 1। এর পরে, বামে সমস্ত পদ ব্যবহার করা না হওয়া অবধি আমরা ক্রমটি রদবদল করি। বদলানোর প্যাটার্ন রয়েছে right - left - right - left - ...। যেহেতু বাম দিকের কোনও শর্ত নেই 1, তাই কোনও পরিবর্তন নেই। আমরা নিম্নলিখিত পেতে:

 2 [3] 4  5  6  7  8  9

I পুনরাবৃত্তিতে, আমরা i আইটেমটি বাতিল করে দিই এবং এটি আমাদের অনুক্রমের মধ্যে রেখেছি। এটি ২ য় পুনরাবৃত্তি, সুতরাং আমরা ২ য় আইটেমটি বাতিল করব । ক্রম হয়ে: 1, 3। আমাদের পরবর্তী পুনরাবৃত্তির জন্য, আমরা উপরের প্যাটার্নটি সহ বর্তমান পুনরাবৃত্তিটি পরিবর্তন করতে যাচ্ছি। আমরা প্রথম অব্যবহৃত আইটেমটি i আইটেমের ডানদিকে নিই। এটি হতে পারে 4। আমরা আমাদের নতুন পুনরাবৃত্তিতে এটি যুক্ত করব:

 4

এখন আমরা i আইটেমের বামে প্রথম অব্যবহৃত আইটেমটি নিতে যাচ্ছি । এই 2। আমরা আমাদের নতুন পুনরাবৃত্তিতে এটি যুক্ত করব:

 4  2

যেহেতু i আইটেমের বামে কোনও আইটেম অবশিষ্ট নেই , আমরা কেবলমাত্র বাকী ক্রমটি নতুন পুনরাবৃত্তিতে যুক্ত করব:

 4  2 [5] 6  7  8  9  10  11  ...

এটি আমাদের হয় 3 য় তাই আমরা পরিত্যাগ করব, পুনরাবৃত্তির 3rd আইটেম, যা 5। এটি আমাদের ক্রমের তৃতীয় আইটেম:

 1, 3, 5

পরবর্তী পুনরাবৃত্তি পেতে, কেবল প্রক্রিয়াটি পুনরাবৃত্তি করুন। আমি একটি জিআইএফ তৈরি করেছি যদি এটি পরিষ্কার না হয়:

এখানে চিত্র বর্ণনা লিখুন

জিআইএফ আমাকে প্রকৃত পোস্ট লেখার চেয়ে বেশি সময় নিয়েছে

কার্য

  • একটি অ-নেতিবাচক পূর্ণসংখ্যা n দেওয়া হয়েছে , অনুক্রমের প্রথম এন পদগুলিকে আউটপুট করুন
  • আপনি কোনও ফাংশন বা একটি প্রোগ্রাম সরবরাহ করতে পারেন
  • এটি , তাই সর্বনিম্ন পরিমাণ বাইটের সাথে জমাটি জয়!

পরীক্ষার কেস:

Input: 4
Output: 1, 3, 5, 4

Input: 8
Output: 1, 3, 5, 4, 10, 7, 15, 8

Input: 15
Output: 1, 3, 5, 4, 10, 7, 15, 8, 20, 9, 18, 24, 31, 14, 28

দ্রষ্টব্য: আউটপুটে কমাগুলি প্রয়োজনীয় নয়। আপনি উদাহরণস্বরূপ নিউলাইনগুলি, বা একটি তালিকা আউটপুট ইত্যাদি ব্যবহার করতে পারেন may


আমি স্ট্যাক রোটেশন ব্যবহার করে একটি পদ্ধতিতে কাজ করছি
সাইয়েস

@ কিউস শুভকামনা :)
আদনান

দেখে মনে হচ্ছে আমার এটির দরকার হবে
সাইয়েস

উত্তর:


3

পাইথ, 22 বাইট

JS*3QVQ@JN=J.i>JhN_<JN

অনলাইনে চেষ্টা করুন: বিক্ষোভ

কেবল ওপিতে বর্ণিত শিফলিং কৌশলটি সম্পাদন করে।

ব্যাখ্যা:

JS*3QVQ@JN=J.i>JhN_<JN
JS*3Q                    assign the list [1, 2, ..., 3*input-1] to J
     VQ                  for N in range(Q):
       @JN                  print J[N]
            .i              interleave 
              >JhN             J[N+1:] with
                  _<JN         reverse J[:N]
          =J                assign the resulting list to J

6

জুলিয়া, 78 71 বাইট

n->[(i=j=x;while j<2i-3 j=i-(j%2>0?1-j:j+22;i-=1end;i+j-1)for x=1:n]

এটি একটি নামবিহীন ফাংশন যা একটি পূর্ণসংখ্যা গ্রহণ করে এবং পূর্ণসংখ্যার অ্যারে প্রদান করে। এটি কল করতে, এটি একটি ভেরিয়েবলের জন্য বরাদ্দ করুন।

এখানে দৃষ্টিভঙ্গি ওআইআইএস-তে বর্ণিত হিসাবে একই।

Ungolfed:

# This computes the element of the sequence
function K(x)
    i = j = x
    while j < 2i - 3
        j = i - (j % 2 > 0 ? 1 - j : j + 22
        i -= 1
    end
    return i + j - 1
end

# This gives the first n terms of the sequence
n -> [K(i) for i = 1:n]

মরিসকে ধন্যবাদ 7 বাইট সংরক্ষণ!


3

গণিত 130 বাইট

(n=0;s={};Nest[(n++;AppendTo[s,z=#[[n]]];Flatten[TakeDrop[#,1+2(n-1)]/.{t___,z,r___}:> 
Riffle[{r},Reverse@{t}]])&,Range[3*#],#];s)&

আমরা একটি তালিকা থেকে পরিসীমা গঠিত দিয়ে শুরু 1করতে 3xহয়, যেখানে xKimberling ক্রম পদ আকাঙ্ক্ষিত সংখ্যা।

প্রতিটি ধাপ অনুযায়ী, n, TakeDropএকটি সামনের এর তালিকায় বর্তমান তালিকায় ভঙ্গ 2n+1পদ (যেখানে কাজ করা হয়) এবং পিছন তালিকা (যা পরে সাথে জড়িত হয়ে যাবে সামনে তালিকা reworked)। সামনের তালিকাটি নীচের প্যাটার্নের সাথে মিলেছে, {t___,z,r___}যেখানে z সামনের তালিকার কেন্দ্রে কিম্বারলিং শব্দ। rহয় Riffle'এর বিপরীত সঙ্গে ঘ tএবং তারপর পিছন তালিকা যোগ করা হয়। ক্রমবর্ধমান কিম্বারলিং ক্রম zসরানো এবং সংযুক্ত করা হয় AppendTo

nদ্বারা বৃদ্ধি করা হয় 1এবং বর্তমান তালিকার মাধ্যমে একই ফাংশন দ্বারা প্রক্রিয়া করা হয়Nest.


উদাহরণ

(n=0;s={};Nest[(n++;AppendTo[s,z=#[[n]]];Flatten[TakeDrop[#,1+2(n-1)]/.{t___,z,r___}:> 
Riffle[{r},Reverse@{t}]])&,Range[3*#],#];s)&[100]

{1, 3, 5, 4, 10, 7, 15, 8, 20, 9, 18, 24, 31, 14, 28, 22, 42, 35, 33, 46, 53, 6, 36, 23, 2 , 55, 62, 59, 76, 65, 54, 11, 34, 48, 70, 79, 99, 95, 44, 97, 58, 84, 25, 13, 122, 83, 26, 115, 82, 91 , 52, 138, 67, 90, 71, 119, 64, 37, 81, 39, 169, 88, 108, 141, 38, 16, 146, 41, 21, 175, 158, 165, 86, 191, 45 , 198, 216, 166, 124, 128, 204, 160, 12, 232, 126, 208, 114, 161, 156, 151, 249, 236, 263, 243, 101, 121, 72, 120, 47, 229 }


2

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

for a in range(input()):
 b=a+1
 while-~b<2*a:b=a-(b^b%-2)/2;a-=1
 print a+b

ব্যাখ্যা

এটি অনেক গল্ফ-ওয়াই রূপান্তরের পরে ওআইআইএস সূত্র! এটি সুন্দরভাবে কাজ করেছে । মূল কোডটি ছিল

i=b=a+1
while b<2*i-3:b=i-(b+2,1-b)[b%2]/2;i-=1
print i+b-1

আমি সর্বদা iএটিকে a+1সর্বত্র প্রতিস্থাপন করে এবং প্রকাশগুলি প্রসারিত করে মুক্তি পেয়েছি :

b=a+1
while b<2*a-1:b=a+1-(b+2,1-b)[b%2]/2;a-=1
print a+b

তারপর, rewrote b<2*a-1যেমন -~b<2*aহোয়াইটস্পেস একটি বাইট সংরক্ষণ করতে, এবং সরানো +12 দ্বারা, নির্বাচন মধ্যে বিভাজন এবং অস্বীকৃতি:

while-~b<2*a:b=a-(b,-b-1)[b%2]/2;a-=1

তারপরে, -b-1ঠিক ~b, তাই আমরা লিখতে পারি (b,~b)[b%2]। এটি b^0 if b%2 else b^-1এক্সওআর অপারেটর বা বিকল্পভাবে ব্যবহার করার সমতুল্য b^b%-2

while-~b<2*a:b=a-(b^b%-2)/2;a-=1

2

পাইথ, 29 25 বাইট

VQ+.W<hHyN-~tN/x%Z_2Z2hNN

জাকুব 4 বাইট সংরক্ষণ করেছে, তবে কীভাবে কোডটি আর পড়তে হবে তা সম্পর্কে আমার কোনও ধারণা নেই।

এখানে পুরানো সমাধান:

VQKhNW<hKyN=K-~tN/x%K_2K2)+KN

আমার পাইথন উত্তরের অনুবাদ। আমি পাইথের পক্ষে খুব ভাল নই, তাই এটি সংক্ষিপ্ত করার উপায়গুলি এখনও রয়েছে।

VQ                              for N in range(input()):
  KhN                             K = N+1
     W<hKyN                       while 1+K < 2*N:
           =K-~tN/x%K_2K2)         K = (N--) - (K%-2 xor K) / 2
                          +KN     print K + N

আপনি ব্যবহার করতে পারেন .W4 বাইট বন্ধ গল্ফ: VQ+.W<hHyN-~tN/x%Z_2Z2hNN
জাকুব

এটি দুর্দান্ত - আপনি কীভাবে এটি কাজ করে তা মোটামুটি ব্যাখ্যা করতে পারবেন?
লিন

1
.Wফর্ম আছে: .W<condition><apply><start-value>hNআপনি যেমন শুরু করেছিলেন তেমন আমি শুরু মানটি ব্যবহার করেছিলাম KhN.Wযতক্ষণ <condition>সত্য হয় ততক্ষণ এই মানটি পরিবর্তন করে । আমি তোমার মতো একই শর্ত ব্যবহার করেছি <hHyN। শর্তটি প্যারামিটার সহ ল্যাম্বডা-ফাংশন H, সুতরাং বর্তমান মান (আপনার কোডে K) H। এবং আমিও আপনার মতো একই <apply>বিবৃতিটি ব্যবহার করেছি, আমি কেবল এটির Kসাথে প্রতিস্থাপন করেছি Z, কারণ <apply>বিবৃতিটি পরামিতি সহ ল্যাম্বডা-ফাংশন Z। আমরা উপেক্ষা করতে পারেন =K, .Wএই পরিচালনা করে। এটি গণনা করা পুরানো মানটির সাথে প্রতিস্থাপন করে। শেষ প্রিন্টে+...N
জাকুব

2

এপিএল, 56 44 বাইট

{⍵<⍺+⍺-3:(⍺-1)∇⍺-4÷⍨3+(1+2×⍵)ׯ1*⍵⋄⍺+⍵-1}⍨¨⍳

এটি একটি নামবিহীন মোনাডিক ট্রেন যা ডানদিকে একটি পূর্ণসংখ্যা গ্রহণ করে এবং একটি অ্যারে প্রদান করে। এটি প্রায় আমার জুলিয়া উত্তর মত একই পদ্ধতির ।

অন্তরতম ফাংশন একটি recursive dyadic ফাংশন যা রিটার্ন হয় এন Kimberling ক্রমানুসারে তম শব্দ, দেওয়া এন অভিন্ন বাম এবং ডান আর্গুমেন্ট হিসাবে।

{⍵<⍺+⍺-3:                                    ⍝ If ⍵ < 2⍺ - 3
         (⍺-1)∇⍺-4÷⍨3+(1+2×⍵)ׯ1*⍵           ⍝ Recurse, incrementing a and setting
                                             ⍝ ⍵ = ⍺ - (3 + (-1)^⍵ * (1 + 2⍵))/4
                                   ⋄⍺+⍵-1}   ⍝ Otherwise return ⍺ + ⍵ - 1

যে হাতে হাতে, আমরা ক্রম স্বতন্ত্র পদ পেতে সক্ষম। তবে সমস্যাটি তখন হয়ে যায় যে এটি একটি ডায়াডিক ফাংশন, যার অর্থ এটি উভয় পক্ষের পক্ষে যুক্তি প্রয়োজন। অপারেটর প্রবেশ করুন ! একটি ফাংশন fএবং একটি ইনপুট দেওয়া x, f⍨xএকই x f x। সুতরাং আমাদের ক্ষেত্রে, উল্লিখিত ফাংশন হিসাবে উল্লেখ করে f, আমরা নিম্নলিখিত monadic ট্রেনটি নির্মাণ করতে পারি:

f⍨¨⍳

আমরা fপ্রতিটি পূর্ণসংখ্যার উপর 1 থেকে ইনপুটটিতে প্রয়োগ করি , একটি অ্যারে দেয়।

ডেনিসকে 12 বাইট সংরক্ষণ করে!

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