Das Seidel-Dreieck ist eine mathematische Konstruktion, die dem Pascal-Dreieck ähnelt und für seine Verbindung mit den Bernoulli-Zahlen bekannt ist.
Die ersten paar Zeilen sind:
1
1 1
2 2 1
2 4 5 5
16 16 14 10 5
16 32 46 56 61 61
Jede Zeile wird wie folgt generiert:
Wenn die Zeilennummer gerade ist (1-indiziert):
Bringen Sie das erste Element der vorherigen Zeile nach unten
Jeder nächste Artikel ist die Summe des vorherigen Artikels und des Artikels darüber
Dupliziere das letzte Element
Wenn die Zeilennummer ungerade ist:
Bringen Sie das letzte Element der vorherigen Zeile nach unten
Wenn Sie rückwärts gehen , ist jeder Artikel die Summe des vorherigen Artikels und des Artikels darüber
Dupliziere das, was jetzt der erste Gegenstand ist.
Grundsätzlich konstruieren wir das Dreieck in einem Zick-Zack-Muster:
1
v
1 > 1
v
2 < 2 < 1
v
2 > 4 > 5 > 5
Weitere Informationen finden Sie auf der Wikipedia-Seite zu Bernoulli-Zahlen.
Die Herausforderung:
Gegeben n
, entweder als Funktionsargument oder aus STDIN, drucke oder gib entweder die dritte n
Zeile des Seidel-Dreiecks oder die ersten n
Zeilen zurück. Sie können entweder 0 oder 1 Indexierung verwenden.
Sie müssen keine negativen oder nicht ganzzahligen Eingaben (oder 0, wenn 1-indiziert) verarbeiten. Sie müssen keine Ausgaben verarbeiten, die größer als sind2147483647 = 2^31 - 1
Da dies Codegolf ist, tun Sie dies in so wenigen Bytes wie möglich.
Beispiele:
In diesen Beispielen ist der Rückgabewert die n
dritte Zeile mit dem Index 0.
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
quelle
Antworten:
Brain-Flak , 66 Bytes
Probieren Sie es online!
Zeile ist 0-indiziert.
quelle
JavaScript (SpiderMonkey) , 67 Byte
Dieser Code missbraucht die
sort()
Methode und funktioniert nicht bei allen Engines.Zeilen sind 0-indiziert.
Probieren Sie es online!
Wie?
Wir kehren ein Array bedingt um, indem wir die
sort()
Methode mit einer Rückruffunktion verwenden, die seine Parameter ignoriert und entweder 0 oder eine positive Ganzzahl zurückgibt . Versuchen Sie das nicht zu Hause! Dies funktioniert nur mit SpiderMonkey zuverlässig.Beachten Sie, dass V8 abhängig von der Länge des Arrays (weniger oder mehr als 10 Elemente) wahrscheinlich unterschiedliche Sortieralgorithmen verwendet.
Kommentiert
quelle
sort()
dieser Engine. Ich habe eine Erklärung hinzugefügt.Perl 6 , 52 Bytes
Probieren Sie es online!
quelle
Haskell ,
898782 BytesDruckt einfach
s
die Zeilen in der Zick-Zack-Reihenfolge, kehrt die anonyme Funktion in der ersten Zeile die Hälfte der Zeilen um.Vielen Dank an @nimi für das Speichern von 5 Bytes!
Probieren Sie es online!
quelle
Gelee , 12 Bytes
Probieren Sie es online!
quelle
⁸
Python 3 ,
9891 BytesProbieren Sie es online!
Das Umschalten auf 0-basierte Zeilennummerierung sparte 7 Bytes.
quelle
Julia 0,6 , 85 Bytes
Probieren Sie es online!
Dies ist eine rekursive Lösung in Julia. Beachten Sie, dass es 1-basierte Indizierung hat. Daher die Tests.
Ungolfed Version, um die Logik zu verstehen:
Als Bonus gibt es hier eine nicht-rekursive Version, aber das ist länger:
quelle
Python 2 ,
10397 BytesProbieren Sie es online!
Nicht-rekursive Version (leichter zu lesen):
Python 2 , 106 Bytes
Probieren Sie es online!
Besser geht es doch!
quelle
Python 3 , 91 Bytes
Probieren Sie es online!
quelle
import
und entfernen*