সিডেল ট্রায়াঙ্গেল


14

সিডেল ত্রিভুজটি পাস্কালের ত্রিভুজের অনুরূপ একটি গাণিতিক নির্মাণ এবং এটি বার্নোল্লি সংখ্যার সাথে সংযোগের জন্য পরিচিত।

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

      1
      1  1
   2  2  1
   2  4  5  5
16 16 14 10 5
16 32 46 56 61 61

প্রতিটি সারি নিম্নলিখিত হিসাবে উত্পন্ন হয়:

সারি সংখ্যাটি যদি সমান হয় (1-ইনডেক্সড):

  • পূর্ববর্তী সারির প্রথম আইটেমটি নামিয়ে আনুন

  • প্রতিটি পরের আইটেমটি পূর্ববর্তী আইটেম এবং তার উপরে থাকা আইটেমের যোগফল

  • শেষ আইটেমটির সদৃশ করুন

যদি সারি নম্বরটি বিজোড় হয়:

  • পূর্ববর্তী সারির শেষ আইটেমটি নামিয়ে আনুন

  • Going পিছন , প্রতিটি আইটেমের পূর্ববর্তী আইটেমে এর সমষ্টি এবং এটি উপরে আইটেম

  • এখন প্রথম আইটেমটি নকল করুন।

মূলত, আমরা একটি zig-zag প্যাটার্নে ত্রিভুজটি তৈরি করি:

    1
    v
    1 > 1
        v
2 < 2 < 1
v
2 > 4 > 5 > 5

আরও তথ্যের জন্য, বার্নোল্লি নম্বরে উইকিপিডিয়া পৃষ্ঠাটি দেখুন ।

চ্যালেঞ্জ:

প্রদত্ত n, হয় ফাংশন আর্গুমেন্ট হিসাবে বা STDIN থেকে, nসিডেল ত্রিভুজটির প্রথম nসারি বা প্রথম সারিগুলি মুদ্রণ করুন বা ফিরে আসুন । আপনি 0 বা 1 সূচক ব্যবহার করতে পারেন।

আপনাকে নেতিবাচক বা অ-পূর্ণসংখ্যার ইনপুট হ্যান্ডেল করার দরকার নেই (যদি 1-ইনডেক্স করা হয় তবে 0 নয়)। এর চেয়ে বড় আউটপুটগুলি আপনাকে পরিচালনা করতে হবে না2147483647 = 2^31 - 1

এটি কোড-গল্ফ হিসাবে, এটি সম্ভব কম বাইটে করুন।

উদাহরণ:

এই উদাহরণগুলিতে রিটার্ন মান হল n0 সারি, 0-সূচকযুক্ত ed

Input   ->  Output

0           1
1           1 1
2           2 2 1
6           272 272 256 224 178 122 61
13          22368256 44736512 66750976 88057856 108311296 127181312 144361456 159575936 172585936 183194912 191252686 196658216 199360981 199360981

"আপনাকে নিজের ভাষার ডিফল্ট ইনট টাইপের চেয়ে বড় আউটপুটগুলি পরিচালনা করতে হবে না" কেবলমাত্র 1-বিট ইনট যুক্ত ভাষার জন্য এটি তুচ্ছ করে তোলে
ASCII- কেবল

সারিগুলি সর্বদা ছোট থেকে বড় আকারে আউটপুট করা যায়?
অ্যাঙ্গস

@ এএসসিআইআই-কেবলমাত্র সি ++ এর সর্বাধিক
সংখ্যার

@ অং না, সারিগুলি প্রদর্শিত হিসাবে সাজানো উচিত
বোলস বুসিয়ের

@ এএসসিআইআই-এটি কেবলমাত্র একটি ডিফল্ট লুফোল (যদিও আইএমও এটি কিছুটা খারাপভাবে বলা হয় কারণ এটি লোকেরা "যুক্তিসঙ্গত" কী বিবেচনা করবে তার উপর নির্ভর করে)
ব্যবহারকারী 202729

উত্তর:


7

মস্তিষ্ক-বিমানবিধ্বংসী কামান , 66 বাইট

<>(())<>{({}[()]<(()[{}]<<>{(({}<>{}))<>}>)>)}{}{{}<>{({}<>)<>}}<>

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

সারি 0-সূচকযুক্ত।

# Push 1 (the contents of row 0) on other stack; use implicit zero as parity of current row
<>(())<>

# Do a number of times equal to input:
{({}[()]<

  # Subtract the row parity from 1
  (()[{}]<

    # For each entry in old row:
    <>{

      # Add to previous entry in new row and push twice
      (({}<>{}))<>

    }

  >)

>)}{}

# If row parity is odd:
{{}

  # Reverse stack for output
  <>{({}<>)<>}

# Switch stacks for output
}<>

4

জাভাস্ক্রিপ্ট (স্পাইডারমোনকি) , 67 বাইট

এই কোডটি অপব্যবহার করে sort() পদ্ধতিটিকে এবং সমস্ত ইঞ্জিনে কাজ করে না।

সারিগুলি 0-সূচকযুক্ত।

f=(n,a=[1],r)=>n--?f(n,[...a.map(n=>k+=n,k=0),k].sort(_=>n|r),!r):a

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

কিভাবে?

আমরা শর্তসাপেক্ষে sort()কলব্যাক ফাংশন সহ পদ্ধতিটি ব্যবহার করে একটি অ্যারের বিপরীত করি যা এর পরামিতিগুলিকে উপেক্ষা করে 0 বা ধনাত্মক পূর্ণসংখ্যা প্রদান করে। বাড়িতে এ চেষ্টা করবেন না! এটি কেবল স্পাইডারমোনকি-তে নির্ভরযোগ্যভাবে কাজ করে।

let A = [1,2,3,4,5] and B = [1,2,3,4,5,6,7,8,9,10,11]

             | SpiderMonkey (Firefox)  | V8 (Chrome)             | Chakra (Edge)
-------------+-------------------------+-------------------------+------------------------
A.sort(_=>0) | 1,2,3,4,5               | 1,2,3,4,5               | 1,2,3,4,5
A.sort(_=>1) | 5,4,3,2,1               | 5,4,3,2,1               | 1,2,3,4,5
B.sort(_=>0) | 1,2,3,4,5,6,7,8,9,10,11 | 6,1,3,4,5,2,7,8,9,10,11 | 1,2,3,4,5,6,7,8,9,10,11
B.sort(_=>1) | 11,10,9,8,7,6,5,4,3,2,1 | 6,11,1,10,9,8,7,2,5,4,3 | 1,2,3,4,5,6,7,8,9,10,11

নোট করুন যে ভি 8 সম্ভবত অ্যারের দৈর্ঘ্যের উপর নির্ভর করে (কম বা 10 টিরও বেশি উপাদান) বিভিন্ন ধরণের অ্যালগোরিদম ব্যবহার করছে।

মন্তব্য

f = (                     // f = recursive function taking:
  n,                      //   n   = row counter
  a = [1],                //   a[] = current row, initialized to [1]
  r                       //   r   = 'reverse' flag, initially undefined
) =>                      //
  n-- ?                   // decrement n; if it was not equal to zero:
    f(                    //   do a recursive call with:
      n,                  //     - the updated value of n
      [ ...a.map(n =>     //     - a new array:
          k += n, k = 0   //       - made of the cumulative sum of a[]
        ), k              //         with the last value appended twice
      ].sort(_ => n | r), //       - reversed if n is not equal to 0 or r is set
      !r                  //     - the updated flag r
    )                     //   end of recursive call
  :                       // else:
    a                     //   stop recursion and return a[]

কোন মাকড়সা-বানর নির্দিষ্ট বৈশিষ্ট্যটি ব্যবহার করে?
ডাউনগোট

@ ডাউনগোট এটি sort()এই ইঞ্জিনের নির্দিষ্ট প্রয়োগের সুযোগ নিচ্ছে । আমি একটি ব্যাখ্যা যুক্ত করেছি।
আর্নল্ড


3

হাস্কেল , 89 87 82 বাইট

(cycle[r,id]!!)<*>s
r=reverse
s 0=[1]
s n=let a=zipWith(+)(0:a)$(r.s$n-1)++[0]in a

মাত্র s জিগ-জাগ ক্রমের লাইনগুলি মুদ্রণ করে, প্রথম সারিতে বেনামে ফাংশন সারিগুলির অর্ধেকটিকে বিপরীত করে।

5 বাইট বাঁচানোর জন্য @ নিমিকে ধন্যবাদ!

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




2

জুলিয়া 0.6 , 85 বাইট

r(l,n=cumsum(l))=[n...,n[end]]
w=reverse
f(n)=n<2?[1]:n%2<1?r(f(n-1)):w(r(w(f(n-1))))

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

এটি জুলিয়ার একটি পুনরাবৃত্ত সমাধান। দ্রষ্টব্য যে এটিতে 1-ভিত্তিক সূচক রয়েছে। সুতরাং পরীক্ষা।

যুক্তিটি বোঝার জন্য অব্যক্ত সংস্করণ:

function new_row(last_row)
    new_row = cumsum(last_row)
    push!(new_row, new_row[end])
    return new_row
end


function triangle(n)
    if n == 1
        return [1]
    elseif mod(n,2) == 0
        return new_row(triangle(n-1))
    else
        return reverse(new_row(reverse(triangle(n-1))))
    end
end

আস বোনাস, এখানে একটি পুনরাবৃত্তিযোগ্য সংস্করণ রয়েছে তবে এটি আরও দীর্ঘ:

w=reverse;c=cumsum
r(l,i)=i%2<1?c([l...,0]):w(c(w([0,l...])))
f(n,l=[1])=(for i=2:n l=r(l,i)end;l)

1

পাইথন 2 , 103 97 বাইট

f=lambda n,r=[1],k=2:n and f(n-1,[sum(r[-2::-1][:i],r[-1])for i in range(k)],k+1)or r[::-(-1)**k]

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

অ-পুনরাবৃত্ত সংস্করণ (পড়তে সহজ):

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

def f(n,r=[1],j=1):
 while n:
	a=r[-2::-1];r=r[-1:];n-=1;j=-j
	for x in a+[0]:r+=[r[-1]+x]
 return r[::-j]

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

অবশ্যই, আরও ভাল সম্ভব!


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