Jeder kennt die Fibonacci-Folge:
Man nimmt ein Quadrat, fügt ein gleiches Quadrat hinzu und fügt dann wiederholt ein Quadrat hinzu, dessen Seitenlänge der größten Seitenlänge des resultierenden Rechtecks entspricht.
Das Ergebnis ist eine wunderschöne Spirale aus Quadraten, deren Zahlenfolge die Fibonacci-Folge ist :
Was aber, wenn wir keine Quadrate verwenden wollten?
Wenn wir in ähnlicher Weise gleichseitige Dreiecke anstelle von Quadraten verwenden, erhalten wir eine ebenso schöne Dreiecksspirale und eine neue Folge: die Padovan-Folge , auch bekannt als A000931 :
Aufgabe:
Bei einer positiven ganzen Zahl wird ausgegeben , der te Term in der Padovan-Sequenz ODER die ersten Terme.
Angenommen, die ersten drei Terme der Sequenz sind alle . Die Sequenz beginnt also wie folgt:
Eingang:
Beliebige positive ganze Zahl
Ungültige Eingaben müssen nicht berücksichtigt werden
Ausgabe:
Der te Term in der Padovan-Sequenz ODER die ersten Terms der Padovan-Sequenz.N
Wenn die ersten Terme ausgedruckt werden, kann die Ausgabe nach Belieben erfolgen (Liste / Array, mehrzeilige Zeichenfolge usw.).
Kann entweder indiziert oder indiziert sein
Testfälle:
(0-indiziert, ter Term)
Input | Output
--------------
0 | 1
1 | 1
2 | 1
4 | 2
6 | 4
14 | 37
20 | 200
33 | 7739
(1-indiziert, erste Begriffe)
Input | Output
--------------
1 | 1
3 | 1,1,1
4 | 1,1,1,2
7 | 1,1,1,2,2,3,4
10 | 1,1,1,2,2,3,4,5,7,9
12 | 1,1,1,2,2,3,4,5,7,9,12,16
Regeln:
Das ist Code-Golf : Je weniger Bytes, desto besser!
Standardlücken sind verboten.
14
(0-indiziert) wird als Ausgabe angezeigt,28
während ich glaube, dass es ergeben sollte37
a_0=1, a_1=0, a_2=0
. Es verschiebt sich ein bisschen, weil danna_5=a_6=a_7=1
Antworten:
Gelee , 10 Bytes
Probieren Sie es online!
1-indiziert. Berechnet das größte Element von: wobei die binäre Matrix wie folgt berechnet wird:⎡⎣⎢010001110⎤⎦⎥n ⎡⎣⎢i s p r i m e (0)i s p r i m e (3)i s p r i m e (6)i s p r i m e (1)i s p r i m e (4)i s p r i m e (7)i s p r i m e (2)i s p r i m e (5)i s p r i m e (8)⎤⎦⎥
(Dies ist ein totaler Zufall.)
quelle
Oase , 5 Bytes
n - ter Term 0-indiziert
Probieren Sie es online!
Erläuterung
quelle
Jelly ,
10 98 BytesEine monadische Linkannahme
n
(0-indiziert), die ergibtP(n)
.Probieren Sie es online!
Wie?
ImplementiertP( n ) = ∑⌊ n2⌋i = 0( i+1n - 2 i)
Und hier ist ein "Twofer"
... eine völlig andere Methode auch für 8 Bytes (diese ist 1-indiziert, aber viel langsamer):
quelle
Haskell , 26 Bytes
Probieren Sie es online! Gibt den n-ten Term mit dem Index Null aus.
Ich dachte, dass die "offensichtliche" rekursive Lösung unten unschlagbar wäre, aber dann fand ich das. Es ähnelt dem klassischen Golf-Ausdruck
l=1:scanl(+)1l
für die unendliche Fibonacci-Liste, aber hier ist der Unterschied zwischen benachbarten Elementen der Begriff 4 Positionen zurück. Wir können direkter schreibenl=1:1:zipWith(+)l(0:l)
, aber das ist länger.Wenn diese Herausforderung eine unendliche Listenausgabe erlaubt, könnten wir die erste Zeile abschneiden und 20 Bytes haben.
27 Bytes
Probieren Sie es online!
quelle
Python 2 , 30 Bytes
Probieren Sie es online!
Gibt den n-ten Term mit dem Index Null zurück. Ausgänge
True
für 1.quelle
Wolfram Language (Mathematica) , 33 Byte
1-indiziert, gibt den n-ten Ausdruck zurück
Probieren Sie es online!
quelle
Oktave / MATLAB,
3533 BytesGibt die ersten n Terme aus.
Probieren Sie es online!
Wie es funktioniert
Anonyme Funktion, die einen rekursiven Filter implementiert .
'cbaa'-98
ist eine kürzere Form zu produzieren[1 0 -1 -1]
.2:n<5
ist eine kürzere zu erzeugende Form[1 1 1 0 0 ··· 0]
( n −1 Terme).filter(1,[1 0 -1 -1],[1 1 1 0 0 ··· 0])
leitet die Eingabe[1 1 1 0 0 ··· 0]
durch ein zeitdiskretes Filter, das durch eine Übertragungsfunktion mit Zähler-1
und Nennerkoeffizienten definiert ist[1 0 -1 -1]
.quelle
J , 22 Bytes
-2 Bytes dank ngn und Galen
geschlossene Form, 26 Bytes
Probieren Sie es online!
iterativ 22 Bytes
Probieren Sie es online!
quelle
1:
->#
: Probieren Sie es online!1:
->1
. "nachteilig" funktioniert mit einem Nomen auf der rechten Seite, anscheinendRetina ,
47-42BytesProbieren Sie es online! Gibt die ersten
n
Terme in separaten Zeilen aus. Erläuterung:Ersetzen Sie die Eingabe durch die Begriffe
-2
,-1
und0
.Generieren Sie die nächsten
n
Terme mit der Wiederholungsrelation.*_
Hier ist kurz, für$&*_
die die (erste) Zahl in der Übereinstimmung in unär konvertiert wird , während$1*
kurz ist, für$1*_
die die mittlere Zahl in unär konvertiert wird. Der$.(
liefert die dezimale Summe seiner unären Argumente, also die Summe der ersten und mittleren Zahlen.Verwerfen Sie die ersten sechs Zeichen, dh die ersten drei Zeilen.
quelle
Cubix , 20 Bytes
Dies ist 0-indiziert und gibt den N- ten Term aus
Probieren Sie es online!
Wickelt sich auf einen Würfel mit Seitenlänge 2
Schau es dir an
I010
- Initiiert den Stapel+p?
- Fügt die Oberseite des Stapels hinzu, zieht den Zähler von der Unterseite des Stapels ab und testet/;UO@
- Wenn der Zähler auf 0 steht, reflektieren Sie auf die Oberseite, entfernen Sie den TOS, wenden Sie ihn, geben Sie ihn aus und halten Sie ihn an\(sqq;W
- Wenn der Zähler positiv ist, reflektieren Sie ihn, verringern Sie den Zähler, tauschen Sie die TOS aus, drücken Sie zweimal von oben nach unten, entfernen Sie die TOS und verschieben Sie die Spur zurück in die Hauptschleife.quelle
Python 2 ,
5648 BytesProbieren Sie es online!
Gibt den n-ten Wert mit dem Index 0 zurück.
quelle
Perl 6 , 24 Bytes
Probieren Sie es online!
Eine ziemlich standardmäßige generierte Sequenz, bei der jedes neue Element vom Ausdruck generiert wird
* + * + !*
. Das fügt das drittvorhergehende Element, das zweitvorhergehende Element und die logische Negation des vorherigen Elements hinzu, die immerFalse
null ist.quelle
05AB1E , 8 Bytes
Probieren Sie es online!
Halten Sie mit, ich habe eine Weile nicht mehr Golf gespielt. Ich frage mich , ob es ein kürzerer Ersatz ist fürn
1Ð)
die in diesem Fall funktioniert (ich habe versucht1D)
,3Å1
etc. , aber keiner von ihnen speichern Bytes). Gibt die ersten Terme der Sequenz aus. Oder ohne würde es einen unendlichen Strom der Terme der Sequenz ausgeben.£
Wie?
quelle
1Ð)
dass 2 Bytes tbh sein können. Ich kann mir sechs verschiedene 3-Byte-Alternativen vorstellen, aber keine 2- Byte-Alternativen .APL (Dyalog Unicode) ,
20 -18 -17 Byte SBCSDieser Code ist 1-indiziert. Es ist die gleiche Anzahl von Bytes, um
n
Elemente der Padovan-Sequenz abzurufen, da Sie die letzten zusätzlichen Elemente löschen müssen. Es ist auch die gleiche Anzahl von Bytes, um eine 0-Indizierung zu erhalten.Edit: -2 Bytes dank ngn. -1 Byte dank ngn
Probieren Sie es online!
Erläuterung
quelle
K (NGN / k) ,
2420 Bytes-4 Bytes dank ngn!
Probieren Sie es online!
0-indiziert, erste N Terme
quelle
f[x-2]+f[x-3]
->+/o'x-2 3
(o
ist "wiederkehrend")1:
->#
in der j-lösungx86-32-Bit-Computercode, 17 Byte
Demontage:
Es ist 0-indiziert. Die Initialisierung wird bequem durch Berechnen von eax * 0 erreicht. Das 128-Bit-Ergebnis ist 0 und geht in edx: eax.
Zu Beginn jeder Iteration lautet die Reihenfolge der Register ebx, eax, edx. Ich musste die richtige Reihenfolge wählen, um die Kodierung für den
xchg eax
Befehl zu nutzen - 1 Byte.Ich musste dem Schleifenzähler 4 hinzufügen, damit der Ausgang erreicht wird
eax
, der den Rückgabewert der Funktion in derfastcall
Konvention enthält.Ich könnte eine andere Aufrufkonvention verwenden, die kein Speichern und Wiederherstellen erfordert
ebx
, aberfastcall
trotzdem Spaß macht :)quelle
Jelly , 11 Bytes
Probieren Sie es online!
0-indiziert.
quelle
Lua 5.3,
4948 BytesProbieren Sie es online!
Vanilla Lua hat keine Nötigung von Booleschen Werten zu Zeichenfolgen (sogar zu
tonumber(true)
Rückgabennil
), daher müssen Sie einen pseudo-ternären Operator verwenden. Diese Version ist wie alle Lua 1-indiziert. Das1or
Teil muss1 or
in Lua 5.1 geändert werden , das eine andere Art hat, Zahlen zu lexieren.quelle
Ruby , 26 Bytes
Probieren Sie es online!
quelle
JavaScript (ES6), 23 Byte
Probieren Sie es online!
quelle
true
dasselbe ist wie das Zurückgeben,1
wenn der Rest der Ausgabe Zahlen sind.Japt
-N
, 12 BytesVersuch es
quelle
TI-BASIC (TI-84), 34 Byte
Eingang ist in
Ans
.Die Ausgabe erfolgt in
Ans
und wird automatisch ausgedruckt.Ich nahm an, dass genug Zeit vergangen war und mehrere Antworten gepostet worden waren, von denen es viele gab, die diese Antwort übertroffen hatten.Beispiel:
Erläuterung:
quelle
Pyth, 16 Bytes
Dies definiert die Funktion
y
. Probieren Sie es hier aus!Hier ist eine Lösung, die mehr Spaß macht, obwohl sie 9 Byte länger ist. Bytes könnten allerdings rasiert werden.
Dies verwendet die Definition von David Callan auf der OEIS-Seite: "a (n) = Anzahl der Kompositionen von n in ungerade Teile und> = 3." Probieren Sie es hier aus! Es werden Eingaben direkt übernommen, anstatt eine Funktion zu definieren.
quelle
y-b2y-b3
könnte vielleicht entweder mit Gabel oder umgestaltet werdenL
? Das Deklarieren eines Arrays aus 2 Elementen ist jedoch teuer.yL-Lb2,3
ist mehr :(+y-b2y-b3
mitsmy-bdhB2
die die gleiche Menge von Bytes;hB2
ergibt das Array[2, 3]
hB2
. Schade, dass es die gleiche Byteanzahl ist.d
in der Karte loszuwerden .Java, 41 Bytes
Lambda kann nicht verwendet werden (Laufzeitfehler). Port dieser Javascript-Antwort
TIO
quelle
R + pryr ,
3836 BytesNullindexierte rekursive Funktion.
Probieren Sie es online!
Vielen Dank an @ Giuseppe für den Hinweis auf zwei offensichtlich unnötige Bytes.
quelle
pryr
, sollte die Sprache seinR + pryr
und dies können 36 Bytes seinC (clang) ,
4133 BytesProbieren Sie es online!
quelle
C # (Visual C # Interactive Compiler) , 34 Byte
Probieren Sie es online!
quelle
Perl 5 , 34 Bytes
Probieren Sie es online!
quelle
Wolfram Language (Mathematica) , 26 Byte
Probieren Sie es online!
quelle
Pari / GP , 28 Bytes
0-indiziert.
Probieren Sie es online!
Pari / GP , 35 Bytes
1-indiziert.
Probieren Sie es online!
quelle