Fast jeder hier ist mit Pascals Dreieck vertraut. Es besteht aus aufeinanderfolgenden Zeilen, wobei jedes Element die Summe der beiden Nachbarn oben links und oben rechts ist. Hier sind die ersten 5
Zeilen (aus dem Generate Pascal-Dreieck entlehnt ):
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
Wir werden Pascals Dreieck nehmen und ein paar Summen drauf machen (hah-ha). Geben Sie für eine bestimmte Eingabe n
die Spaltensumme der ersten n
Zeilen des Pascalschen Dreiecks aus. Zum Beispiel für die Eingabe5
die Ausgabe durch gebildet
1
1 1
1 2 1
1 3 3 1
[+] 1 4 6 4 1
----------------------
1 1 5 4 9 4 5 1 1
So wäre die Ausgabe [1, 1, 5, 4, 9, 4, 5, 1, 1]
.
Beachten Sie, dass Sie nicht unbedingt das Pascalsche Dreieck generieren müssen, um die Summe zu berechnen. Dies hängt von Ihrer Implementierung ab, ob dies kürzer ist oder nicht.
Eingang
Eine einzelne positive ganze Zahl n
mit n >= 1
in jedem geeigneten Format .
Ausgabe
Das resultierende Array / die Liste der spaltenweisen Summierung des ersten n
Zeilen des Pascalschen Dreiecks, wie oben beschrieben. Auch hier in jedem geeigneten Format.
Regeln
- Führende oder nachfolgende Zeilenumbrüche oder Leerzeichen sind optional, sofern die Zeichen selbst korrekt ausgerichtet sind.
- Es ist entweder ein vollständiges Programm oder eine Funktion zulässig. Bei einer Funktion können Sie die Ausgabe zurückgeben, anstatt sie zu drucken.
- Fügen Sie nach Möglichkeit einen Link zu einer Online-Testumgebung hinzu, damit andere Benutzer Ihren Code ausprobieren können!
- Standardlücken sind verboten.
- Dies ist Codegolf, daher gelten alle üblichen Golfregeln, und der kürzeste Code (in Byte) gewinnt.
Beispiele
[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]
quelle
CJam ,
322524 BytesVielen Dank an Luis Mendo für das Speichern von 1 Byte.
Probieren Sie es online!
Erläuterung
quelle
JavaScript (ES6), 83 Byte
1-Indizierung hat mich ein Byte gekostet. Erläuterung:
g(j-1,i-1)+g(j-1,i+1)
Berechnet rekursiv das Pascalsche Dreieck, bis es die erste Zeile erreicht, die der Basisfall ist. Um Spaltensummen zu erhalten, benutze ich die Tatsache, dassmap
tatsächlich ein dritter Parameter übergeben wird, sodass es in diesem Fall einen zusätzlichen rekursiven Schritt gibt.quelle
JavaScript (ES6),
9087868482 Byte3 Bytes gespart dank ETHproductions
Testfälle
Code-Snippet anzeigen
quelle
Mathematica,
5957 BytesVielen Dank an Martin Ender für die Zwei-Byte-Einsparung!
Reine Funktion, die eine positive Ganzzahleingabe verwendet und eine Liste von Ganzzahlen zurückgibt. Produziert buchstäblich alle relevanten Einträge von Pascals Dreieck und summiert sie entsprechend.
Vorheriger Beitrag (der etwas leichter zu lesen ist):
quelle
Oktave ,
846745 Bytes22 Bytes gespart dank Neil !
Probieren Sie es online!
Erläuterung
Die
pascal
Funktion liefert eine Matrix, die die Werte im Pascal-Dreieck enthält:Um die gewünschten Werte zu extrahieren, drehen wir vertikal (
flip
), behalten den unteren dreieckigen Teil (tril
) bei und drehen erneut. Das gibtspdiags
extrahiert dann die Diagonalen als Spaltenund
sum
berechnet die Summe jeder Spalte, die das Ergebnis ergibt.quelle
@(n)sum(spdiags(flip(tril(flip(pascal(n))))))
?05AB1E ,
3432282524 Bytes-4 danke an Emigna.
Probieren Sie es online!
Im Grunde ist alles, was es tut, dies zu erzeugen:
Transponiere es:
Dann summiert jede Zeile:
Wenn eine führende und eine
®>-Å
nachfolgende 0 nicht akzeptabel sind, wird®-Å
sie nicht für eine +1-Byte-Strafe korrigiert .Ergebnis für
50
:quelle
-Å0
statt>-Ý0*
sollte funktionieren und€
wird am ende nicht benötigt.>F
kann seinƒ
.Å
, klug! Ich hielt "Strg + F" für "Identitätsliste" oder so etwas auf deminfo.txt
heh ...13 x 5
zu5 x 11
? Wo sind die anderen beiden Spalten / Zeilen geblieben?PHP , 119 Bytes
Spaltennummern von 1-Eingabe bis Eingabe -1
Probieren Sie es online!
quelle
array_column
ist eine neue Funktion in dieser Versionarray_column()
.$x=2*$j++-$i
spart 7 Bytes. Wenn Sie $ j nach unten anstatt nach oben schleifen, können Sie 1 (for($j=$i+1;$j--;)
) sparen . Und 3 weitere Bytes können von der Ausgabe abgerufen werden.array_column
Gelee , 12 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
Python 3,
201184 Bytesquelle
Python 2 ,
140137 BytesProbieren Sie es online! oder Online ausprobieren!
Für
n=3
Beginnt mit einer Liste mit
n
Nullen umgibt eine Eins -[[0, 0, 0, 1, 0, 0, 0]]
Generieren Sie die vollständige Pyramide
Drehe um 90º und summiere jede Reihe, wobei du die erste und die letzte (nur Nullen) verwerfst.
quelle
Haskell,
118112104 Bytes614 Bytes gespart dank @nimiquelle
#
auf kürzenr#n|d<-0<$[1..n]=d++r++d
.#
, weil es nicht mehr rekursiv ist: Definieren Sief
asf n=foldl1 z[d++p x++d|x<-[1..n],d<-[0<$[1..n-x]]]
und dump#
.Python 3, 124 Zeichen
Dies nutzt die Tatsache, dass das Pascal-Dreieck mit Binomialkoeffizienten definiert werden kann. Ich habe versucht, das
abs(x)
und das zu entfernen, indem ichrange(-n+1,n)
es gemachtrange(n)
und dann verwendet habelambda l:l[-1:0:-1]+l
aber es war länger.Auch dies ist mein erstes Mal Golf, also hoffe ich, dass Sie alle Fauxpas verzeihen.
Das Binom ist nicht meins und wurde von hier genommen .
quelle