পাস্কালের কলাম সমষ্টি


29

এখানকার বেশিরভাগ লোকই পাস্কেলের ত্রিভুজের সাথে পরিচিত। এটি ধারাবাহিক সারি দ্বারা গঠিত, যেখানে প্রতিটি উপাদান তার দুটি উপরের-বাম এবং উপরের-ডান প্রতিবেশীর যোগফল। এখানে প্রথম 5সারি রয়েছে (পাস্কেলের ত্রিভুজ উত্পন্ন করা থেকে নেওয়া ):

    1
   1 1
  1 2 1
 1 3 3 1
1 4 6 4 1

আমরা পাসকালের ত্রিভুজটি নিয়ে যাচ্ছি এবং এর উপর কিছু পরিমাণে (হাহ-হা) করবো। প্রদত্ত nইনপুটটির জন্য, পাস্কেলের nত্রিভুজের প্রথম সারিগুলির কলামার যোগফল আউটপুট করুন । উদাহরণস্বরূপ, ইনপুট জন্য 5, আউটপুট দ্বারা গঠিত হবে

            1
          1   1
        1   2   1
      1   3   3   1
[+] 1   4   6   4   1
----------------------
    1 1 5 4 9 4 5 1 1

সুতরাং আউটপুট হবে [1, 1, 5, 4, 9, 4, 5, 1, 1]

নোট করুন যে সংক্ষেপটি গণনা করার জন্য আপনার অগত্যা পাস্কালের ত্রিভুজ তৈরি করার দরকার নেই - এটি করা বা না করা যদি এটি কম হয় তবে এটি আপনার বাস্তবায়নের up

ইনপুট

একটি একক ধনাত্মক পূর্ণসংখ্যা nসঙ্গে n >= 1 কোনো সুবিধাজনক বিন্যাসে

আউটপুট

nউপরে বর্ণিত হিসাবে পাস্কেলের ত্রিভুজের প্রথম সারিগুলির কলাম-ভিত্তিক সংক্রমণের ফলাফলের অ্যারে / তালিকা । আবার, কোনও উপযুক্ত বিন্যাসে।

বিধি

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

উদাহরণ

[input]
[output]

1
[1]

2
[1, 1, 1]

3
[1, 1, 3, 1, 1]

5
[1, 1, 5, 4, 9, 4, 5, 1, 1]

11
[1, 1, 11, 10, 54, 44, 155, 111, 286, 175, 351, 175, 286, 111, 155, 44, 54, 10, 11, 1, 1]

উত্তর:


7

এমএটিএল , 16 বাইট

tZv=Gq:"t5BZ+]vs

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

ব্যাখ্যা

এটি বারবার সারিগুলি উত্পন্ন করার জন্য কনভোলশন প্রয়োগ করে। উদাহরণস্বরূপ, ইনপুট জন্য n=5আমরা প্রথম সারি দিয়ে শুরু করি

0 0 0 0 1 0 0 0 0

[1 0 1]দেয় সঙ্গে কনভলভিং

0 0 0 1 0 1 0 0 0

অপারেশন পুনরাবৃত্তি দেয়

0 0 1 0 2 0 1 0 0

তারপর

0 1 0 3 0 3 0 1 0

ইত্যাদি। এই অ্যারেগুলিকে উল্লম্বভাবে প্রতিবিম্বিত করা এবং প্রতিটি কলামের যোগফল গণনা ফলাফল দেয়।

t       % Input n implictly. Duplicate
Zv      % Symmetric range. Gives [1 2 3 4 5 4 3 2 1] for input 5
=       % Equal to (element-wise). Gives [0 0 0 0 1 0 0 0 0]. This is the first row
Gq:     % Push [1 2 ... n-1]
"       % For each. This executes the following code n-1 times
  t     %   Duplicate
  5B    %   Push 5 in binary, that is, [1 0 1]
  Z+    %   Convolution keeping size
]       % End
v       % Concatenate all results vertically 
s       % Sum. Display implicitly.

নশ্বরতা! আমি আমার বাইট-কাউন্ট অর্ধেক কাটতে পারি না; স্যার আপনি একটি টুপি।
ম্যাজিক অক্টোপাস উরান

3
@carusocomputing ধন্যবাদ :-) তুমি জানো তারা সম্পর্কে কী বলে সংবর্তন ...
লুইস Mendo

5

সিজেম , 32 25 24 বাইট

1 বাইট সংরক্ষণের জন্য লুইস মেন্ডোকে ধন্যবাদ।

{(_0a*1+\{_(2$+.+}*]:.+}

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

ব্যাখ্যা

(       e# Decrement input N.
_0a*1+  e# Create a list of N-1 zeros and a 1. This is the top row with
        e# the required indentation.
\{      e# Run this block N-1 times.
  _     e#   Duplicate the last row.
  (     e#   Pull off a leading zero, shifting the row left.
  2$+   e#   Copy the full row and prepend that zero, shifting the row right.
  .+    e#   Element-wise addition, which results in the next row.
}*
]       e# Wrap all rows in a list.
:.+     e# Add up the columns by reducing element-wise addition over the rows.

5

জাভাস্ক্রিপ্ট (ES6), 83 বাইট

f=
n=>[...Array(n+--n)].map(g=(j=n,i,a)=>j--?g(j,i-1)+g(j,i+1)+(a?g(j,i,a):0):i-n?0:1)
<input type=number min=1 oninput=o.textContent=f(+this.value)><pre id=o>

1-ইনডেক্সিং আমার একটি বাইট ব্যয় করে। ব্যাখ্যা: g(j-1,i-1)+g(j-1,i+1)প্যাসকের ত্রিভুজটি প্রথম সারিতে পৌঁছানো পর্যন্ত পুনরাবৃত্তভাবে গণনা করে, এটি বেস কেস। কলামের পরিমাণগুলি পাওয়ার জন্য, আমি এটি ব্যবহার করি যা mapআসলে তৃতীয় প্যারামিটারটি পাস করে, তাই যখন এটি হয় তখন একটি অতিরিক্ত পুনরাবৃত্ত পদক্ষেপ থাকে।


5

জাভাস্ক্রিপ্ট (ES6), 90 87 86 84 82 বাইট

ETH প্রডাকশনগুলির জন্য 3 বাইট সংরক্ষণ করা হয়েছে

f=(n,a=[1],b=a)=>n--?f(n,[...(F=x=>a.map((n,i)=>n+~~x[i-d]))(a,d=2),0,d=1],F(b)):b

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


5

গণিত, 59 57 বাইট

দু-বাইট সঞ্চয় সঞ্চয় করার জন্য মার্টিন ইন্ডারকে ধন্যবাদ!

Binomial[i,(j+i)/2]~Sum~{i,Abs@j,b,2}~Table~{j,-b,b=#-1}&

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

পূর্ববর্তী জমা (যা পড়তে কিছুটা সহজ):

Table[Sum[Binomial[i,(j+i)/2],{i,Abs@j,b,2}],{j,-b,b=#-1}]&

4

অক্টাভা , 84 67 45 বাইট

22 বাইট সংরক্ষিত নীলকে ধন্যবাদ !

@(n)sum(spdiags(flip(tril(flip(pascal(n))))))

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

ব্যাখ্যা

pascalফাংশন একটি ম্যাট্রিক্স যে পাসকাল ত্রিভুজ মধ্যে মান ধারণ করে দেয়:

>> pascal(5)
ans =
     1     1     1     1     1
     1     2     3     4     5
     1     3     6    10    15
     1     4    10    20    35
     1     5    15    35    70

কাঙ্ক্ষিত মানগুলি বের করতে আমরা উল্লম্বভাবে উল্টাতে পারি ( flip), নীচের ত্রিভুজাকার অংশটি রাখি ( tril), এবং আবার ফ্লিপ করুন। এই দেয়

ans =
   1   1   1   1   1
   1   2   3   4   0
   1   3   6   0   0
   1   4   0   0   0
   1   0   0   0   0

spdiags তারপরে কলামগুলি হিসাবে কর্ণগুলি বের করে

ans =
   1   1   1   1   1   0   0   0   0
   0   0   4   3   2   1   0   0   0
   0   0   0   0   6   3   1   0   0
   0   0   0   0   0   0   4   1   0
   0   0   0   0   0   0   0   0   1

এবং sumপ্রতিটি কলামের যোগফল গণনা করে, যা ফলাফল দেয়।


আপনি কি এটি সহজ করতে পারবেন না @(n)sum(spdiags(flip(tril(flip(pascal(n))))))?
নীল

@ নীল হ্যাঁ! ধন্যবাদ!!
লুইস মেন্ডো

4

05 এ বি 1 ই , 34 32 28 25 24 বাইট

-4 ধন্যবাদ Emigna।

FN©ƒ®Ne0})¹®-Å0.ø˜¨ˆ}¯øO

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


FN©ƒ®Ne0})               # Generate, iteratively, the current pascal row, interspersed with 0's.
          ¹®-Å0          # Calculate the number of zeros to middle pad it.
               .ø˜¨ˆ}¯øO # Surround with the zeros, transpose and sum.

মূলত এটি যা করে তা হ'ল এটি:

0 0 0 0 0 0 1 0 0 0 0 0 0
0 0 0 0 0 1 0 1 0 0 0 0 0
0 0 0 0 1 0 2 0 1 0 0 0 0
0 0 0 1 0 3 0 3 0 1 0 0 0
0 0 1 0 4 0 6 0 4 0 1 0 0

এটি স্থানান্তর করুন:

0 0 0 0 0
0 0 0 0 1
0 0 0 1 0
0 0 1 0 4
0 1 0 3 0
1 0 2 0 6
0 1 0 3 0
0 0 1 0 4
0 0 0 1 0
0 0 0 0 1
0 0 0 0 0

তারপরে প্রতিটি সারিতে যোগফলগুলি:

0
1
1
5
4
9
4
5
1
1
0

একটি সামনের এবং পিছনের তাহলে 0 গ্রহণযোগ্য নয়, ®>-Åএর isntead ®-Åএকটি +1 বাইট শাস্তি জন্য এটি সংশোধন করা হয়েছে।


এর জন্য ফলাফল 50:

[0, 1, 1, 50, 49, 1224, 1175, 19551, 18376, 229125, 210749, 2100384, 1889635, 15679951, 13790316, 97994765, 84204449, 523088334, 438883885, 2421229251, 1982345366, 9833394285, 7851048919, 35371393434, 27520344515, 113548602181, 86028257666, 327340174085, 241311916419, 851817398634, 610505482215, 2009517658701, 1399012176486, 4313184213360, 2914172036874, 8448367214664, 5534195177790, 15139356846901, 9605161669111, 24871748205410, 15266586536299, 37524050574849, 22257464038550, 52060859526501, 29803395487951, 66492351226050, 36688955738099, 78239857877649, 41550902139550, 84859704298201, 43308802158651, 84859704298201, 41550902139550, 78239857877649, 36688955738099, 66492351226050, 29803395487951, 52060859526501, 22257464038550, 37524050574849, 15266586536299, 24871748205410, 9605161669111, 15139356846901, 5534195177790, 8448367214664, 2914172036874, 4313184213360, 1399012176486, 2009517658701, 610505482215, 851817398634, 241311916419, 327340174085, 86028257666, 113548602181, 27520344515, 35371393434, 7851048919, 9833394285, 1982345366, 2421229251, 438883885, 523088334, 84204449, 97994765, 13790316, 15679951, 1889635, 2100384, 210749, 229125, 18376, 19551, 1175, 1224, 49, 50, 1, 1, 0]

1
-Å0পরিবর্তে >-Ý0*কাজ করা উচিত এবং শেষে প্রয়োজন হয় না।
এমিগনা

1
এবং >Fহতে পারে ƒ
এমিগনা

দুর্দান্ত ক্যাচ, আমি সবসময় ভুলে যাই Åস্মার্ট! আমি "পরিচয় তালিকার জন্য" বা " info.txtহেইহে " তেমন কিছু রাখার জন্য "সিআরটিএল + এফ" রেখেছি ...
ম্যাজিক অক্টোপাস উর্ন

আমি সম্প্রতি তাদের স্মরণ রাখতে শুরু করেছি :)
এমিগিনা

1
কেন TRANSPOSE থেকে এটি চালু করে 13 x 5করতে 5 x 11? অন্য দুটি কলাম / সারি কোথায় গিয়েছিল?
অ্যাডমবর্কবার্ক

4

পিএইচপি , 119 বাইট

1 ইনপুট থেকে ইনপুট -1 এ কলামগুলির সংখ্যা

for(;$r<$argn;$l=$t[+$r++])for($c=-$r;$c<=$r;$c+=2)$s[$c]+=$t[+$r][$c]=$r|$c?$l[$c+1]+$l[$c-1]:1;ksort($s);print_r($s);

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


@ লুইসমেন্ডো ধন্যবাদ আপনাকে ত্রুটিটি পেয়েছি এবং এটি 3 বাইট সংরক্ষণ করে। এখন এটি পিএইচপি সংস্করণ বৃহত্তর 5.5 এর সাথে কাজ করে। array_columnএই সংস্করণে একটি নতুন ফাংশন
জার্গ হালসারম্যান

যখন একটি সংশোধন সংক্ষিপ্ত আকারে পরিণত হয় :-)
লুইস মেন্ডো

এখানে আরও 24 থেকে 30 বাইট রয়েছে : সারি এবং কলামের গণনা এবং ড্রপিংয়ের মাধ্যমে 13 বাইট সংরক্ষণ করুন array_column()$x=2*$j++-$i7 বাইট সংরক্ষণ লুপিং $ j ডাউন এর পরিবর্তে 1 ( for($j=$i+1;$j--;)) সাশ্রয় করতে পারে । এবং আউটপুট থেকে আরও 3 বাইট গল্ফ করা যায়।
তিতাস

@ টিটাস এটি খুব সুন্দর ছিল ব্যবহার করুনarray_column
Jgrg Hülsermann

কিছু দিন এটি বাইট সংরক্ষণ করবে।
তিতাস

3

জেলি , 12 বাইট

Ḷµc€j€0Ṛṙ"NS

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

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

Ḷµc€j€0Ṛṙ"NS  Main link. Argument: k

Ḷ             Unlength; yield A := [0, ..., k-1].
 µ            New chain. Argument: A
  c€          Combinations each; compute nCr for each n and r in A, grouping by n.
    j€0       Join each resulting array [nC0, ..., nC(k-1)], separating by zeroes,
              yielding, [nC0, 0, ..., 0, nC(k-1)].
              Note that nCr = 0 whenever r > n.
       Ṛ      Reverse the resulting 2D array.
          N   Negate A, yielding [0, ..., -(k-1)].
        ṙ"    Zipwith rotate; for each array in the result to the left and the
              corresponding integer non-positive integer to the right, rotate
              the array that many units to the left.
           S  Take the columnwise sum.

2

পাইথন 3, 201 184 বাইট

def f(n):x,z,m=[1],[0],n-1;l=[z*m+x+z*m];exec("x=[*map(sum,zip(z+x,x+z))];l.append(z*(n-len(x))+[b for a in zip(x,z*len(x))for b in a][:-1]+z*(n-len(x)));"*m);return[*map(sum,zip(*l))]

2

পাইথন 2 , 140 137 বাইট

n=input()
x=[]
a=[0]*n+[1]+n*[0]
z=n%2
exec'x+=[a];a=[(i%2^z)*sum(a[i-1:i+2])for i in range(2*n+1)];z^=1;'*n
print map(sum,zip(*x))[1:-1]

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

জন্যn=3
সঙ্গে একটি তালিকা দিয়ে শুরু হয় nশূন্য একটি এক ঘিরে - [[0, 0, 0, 1, 0, 0, 0]]
পূর্ণ পিরামিড নির্মাণ করা

[[0, 0, 0, 1, 0, 0, 0],
 [0, 0, 1, 0, 1, 0, 0],
 [0, 1, 0, 2, 0, 1, 0]]

প্রথম এবং শেষটিকে বাদ দিয়ে 90er এবং প্রতিটি সারিকে যোগ করুন (কেবল জিরো)

[[0, 0, 0],
 [0, 0, 1],
 [0, 1, 0],
 [1, 0, 2],
 [0, 1, 0],
 [0, 0, 1],
 [0, 0, 0]]

2

হাস্কেল, 118 112 104 বাইট

6 14 বাইট সংরক্ষণ করেছেন @ নিমিকে ধন্যবাদ

z=zipWith(+)
p n|n<2=[1]|m<-p(n-1)=z(0:0:m)(m++[0,0])            -- Generate the nth triangle row.
f n=foldl1 z[d++p x++d|x<-[1..n],d<-[0<$[1..n-x]]]  -- Pad each row with 0s and then sum all the rows.

আপনি প্যাডিং ফাংশন খাটো করতে পারেন #থেকে r#n|d<-0<$[1..n]=d++r++d
নিমি

ওহ, এখন আপনি ইনলাইন করতে পারেন #, কারণ এটি আর পুনরাবৃত্ত হয় না: fহিসাবে সংজ্ঞায়িত করুন f n=foldl1 z[d++p x++d|x<-[1..n],d<-[0<$[1..n-x]]]এবং ডাম্প করুন #
নিমি

1

পাইথন 3, 124 অক্ষর

f=lambda n:[sum(map(lambda n,k:k<1or (2*k+n)*f(2*k+n-1,k-1)/k,[abs(x)]*n,range(n))[:(n+1-abs(x))/2]) for x in range(-n+1,n)]

এটি পাস্কল ত্রিভুজ দ্বিপদী সহগ সহ সংজ্ঞায়িত করা যেতে পারে যে ব্যবহার করে। আমি সরানোর চেষ্টা abs(x)এবং range(-n+1,n)এটি করার মাধ্যমে range(n)এবং তারপর ব্যবহার lambda l:l[-1:0:-1]+lকিন্তু এরকম লম্বা হত।

এছাড়াও এটি আমার প্রথমবারের মতো গল্ফ করছে তাই আমি আশা করি আপনি কোনও ভুল-পাসকে ক্ষমা করেছেন।

দ্বিপদীটি আমার নয় এবং এখান থেকে নেওয়া হয়েছিল ।

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