पास्कल कॉलम कॉलम


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]

ध्यान दें कि सारांश की गणना करने के लिए आपको पास्कल के त्रिभुज को उत्पन्न करने की आवश्यकता नहीं है - यह आपके कार्यान्वयन पर निर्भर है यदि ऐसा करने के लिए छोटा है या नहीं।

इनपुट

एक एकल सकारात्मक पूर्णांक nके साथ n >= 1 किसी भी सुविधाजनक प्रारूप में

उत्पादन

nऊपर उल्लिखित के रूप में पास्कल के त्रिकोण की पहली पंक्तियों के स्तंभ-वार योग के परिणामस्वरूप परिणाम / सूची । फिर से, किसी भी उपयुक्त प्रारूप में।

नियम

  • लीडिंग या अनुगामी newlines या व्हाट्सएप सभी वैकल्पिक हैं, जब तक कि वर्ण खुद को सही ढंग से पंक्तिबद्ध करते हैं।
  • या तो एक पूर्ण कार्यक्रम या एक समारोह स्वीकार्य हैं। यदि कोई फ़ंक्शन है, तो आप इसे प्रिंट करने के बजाय आउटपुट वापस कर सकते हैं।
  • यदि संभव हो, तो कृपया ऑनलाइन परीक्षण वातावरण का लिंक शामिल करें ताकि अन्य लोग आपके कोड को आज़मा सकें!
  • मानक खामियों को मना किया जाता है।
  • यह इसलिए सभी सामान्य गोल्फिंग नियम लागू होते हैं, और सबसे छोटा कोड (बाइट्स में) जीतता है।

उदाहरण

[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

MATL , 16 बाइट्स

tZv=Gq:"t5BZ+]vs

इसे ऑनलाइन आज़माएं!

व्याख्या

यह पंक्तियों को उत्पन्न करने के लिए बार-बार कनवल्शन लागू करता है। उदाहरण के लिए, इनपुट के लिए n=5हम पहली पंक्ति से शुरू करते हैं

0 0 0 0 1 0 0 0 0

साथ convolving [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.

विपत्ति! मैं आधे में अपनी बाइट-गिनती नहीं काट सकता; टोपी की एक टिप आप के लिए श्रीमान।
मैजिक ऑक्टोपस Urn

3
@carusocomputing धन्यवाद :-) आप जानते हैं कि वे के बारे में क्या कहते हैं घुमाव के ...
लुइस Mendo

5

CJam , 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

जावास्क्रिप्ट (ईएस 6), 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

जावास्क्रिप्ट (ईएस 6), 90 87 86 84 82 बाइट्स

सहेजे गए 3 बाइट्स ETHproductions के लिए धन्यवाद

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

गणितज्ञ, ५ ९ ५ by बाइट्स

दो-बाइट बचत खोजने के लिए मार्टिन एंडर को धन्यवाद!

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

05AB1E , 34 32 28 25 24 बाइट्स

-4 एमिग्ना के लिए धन्यवाद।

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हो सकता है ƒ
एमिग्ना

अच्छा कैच, मैं हमेशा Åस्मार्ट के बारे में भूल जाता हूं ! मैंने "पहचान सूची" के लिए "ctrl + f" रखा या info.txtहेह पर ऐसा कुछ ...
मैजिक ऑक्टोपस Urn

मुझे केवल हाल ही में याद रखना शुरू हुआ है कि वे मौजूद हैं :)
एमिग्ना

1
संक्रमण इसे से क्यों मुड़ता 13 x 5है 5 x 11? अन्य दो कॉलम / पंक्तियाँ कहाँ जाएँगी?
AdmBorkBork

4

PHP , 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);

इसे ऑनलाइन आज़माएं!


@LuisMendo धन्यवाद मुझे त्रुटि मिली है और यह 3 बाइट्स बचाता है। अब यह PHP संस्करणों के साथ 5.5 से अधिक काम करता है। array_columnइस संस्करण में एक नया कार्य है
Jörg Hülsermann

यह अच्छा है जब एक सुधार कम हो जाता है :-)
लुइस मेंडो

यहां एक और 24 से 30 बाइट्स हैं : पंक्ति और स्तंभ गणना और ड्रॉपिंग द्वारा 13 बाइट्स सहेजें array_column()$x=2*$j++-$i7 बाइट्स बचाता है। ऊपर के बजाय $ $ नीचे लूपिंग 1 ( for($j=$i+1;$j--;)) बचा सकता है । और 3 और बाइट्स आउटपुट से प्राप्त किए जा सकते हैं।
टाइटस

@ यह बहुत अच्छा उपयोग किया गया थाarray_column
Jörg 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]]

90 first घुमाएँ और प्रत्येक पंक्ति को योग करें, पहले और अंतिम को छोड़ (केवल शून्य)

[[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 बाइट्स ने @nimi को धन्यवाद दिया

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]]]और डंप करें #
nimi

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लेकिन यह अधिक लंबा था।

इसके अलावा यह मेरी पहली बार गोल्फ है इसलिए मुझे उम्मीद है कि आप किसी भी फॉक्स को माफ कर देंगे।

द्विपद मेरा नहीं है और यहाँ से लिया गया था ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.