Wie Sie wahrscheinlich wissen, ist eine Fibonacci-Zahl eine Zahl, die die Summe der beiden vorherigen Zahlen in der Reihe ist.
Eine Fibonacci-Ziffer ist eine, die die Summe der beiden vorherigen Ziffern ist .
Zum Beispiel wäre für den Serienanfang 1,1
die Serie 1,1,2,3,5,8,13,4,7,11,2...
Die Änderung erfolgt nach dem 13
, wo Sie anstelle des Hinzufügens 8+13
hinzufügen 1+3
. Die Serie wird am Ende wiederholt, wo 4+7=11
und 1+1=2
wie die Serie beginnt.
Für ein anderes Beispiel beginnt die Serie 2,2
: 2,2,4,6,10,1,1,2,3,5,8,13,4,7,11,2,3...
. Dieser beginnt einmalig, aber sobald die Ziffern zusammengezählt sind 10
, haben Sie das Ergebnis 1+0=1, 0+1=1
, und die Serie wird fortgesetzt - und wiederholt sich - auf dieselbe Weise wie die 1,1
Serie.
Die Herausforderung
0≤n≤99
Berechnen Sie bei einer Ganzzahleingabe die Schleife in der Fibonacci-Ziffernreihe, die mit diesen beiden Ziffern beginnt. ( Ganzzahlen außerhalb dieses Bereichs dürfen natürlich berücksichtigt werden, sind jedoch nicht erforderlich.) Bei einer einstelligen Eingabe sollte der Code diese interpretieren, um den Beginn der Reihe zu kennzeichnen 0,n
.
Alle zweistelligen Zahlen in der Schleife müssen zweistellig ausgegeben werden. So zum Beispiel für die Schleife 1,1
enthalten würde 13
, nicht 1,3
.
Die Ausgabe beginnt mit der ersten Nummer in der Schleife. Basierend auf den obigen Einschränkungen 1,1
beginnt die Schleife für also mit 2
, da 1,1
und 11
wird separat gezählt.
Jede Nummer der Ausgabe kann nach Belieben getrennt werden, solange sie konsistent ist. In allen meinen Beispielen verwende ich Kommas, aber Leerzeichen, Zeilenumbrüche, Zufallsbuchstaben usw. sind zulässig, solange Sie immer die gleiche Trennung verwenden. Ist 2g3g5g8g13g4g7g11
also eine legale Ausgabe für 1
, ist es aber 2j3g5i8s13m4g7sk11
nicht. Sie können beliebige Zeichenfolgen, Listen und Arrays verwenden, vorausgesetzt, Sie haben die richtigen Zahlen in der richtigen Reihenfolge, die durch ein konsistentes Trennzeichen voneinander getrennt sind. Die Belichtungsreihe für die gesamte Ausgabe ist ebenfalls zulässig (z. B. (5,9,14)
oder [5,9,14]
usw.).
Testfälle:
1 -> 2,3,5,8,13,4,7,11
2 -> 2,3,5,8,13,4,7,11
3 -> 11,2,3,5,8,13,4,7
4 -> 3,5,8,13,4,7,11,2
5 -> 2,3,5,8,13,4,7,11
6 -> 3,5,8,13,4,7,11,2
7 -> 14,5,9
8 -> 13,4,7,11,2,3,5,8
9 -> 11,2,3,5,8,13,4,7
0 -> 0
14 -> 5,9,14
59 -> 5,9,14
Das ist Code-Golf , also gewinnt die niedrigste Anzahl von Bytes.
14
und59
gebe das gleiche Ergebnis. Wenn dies59
so interpretiert wird5,9
, dass es als Teil der Schleife startet und dies zulässt,14
sollte dies sicher der Anfang der Schleife sein?0,1,1,2,3,5,8,13,4,7,11,2,3
. Das erste Mal, dass die Schleife wiederholt wird, erfolgt beim zweiten Mal2
.1,4,5,9,14,5
und5,9,14,5,9
. Beide wiederholen sich beginnend mit der Sekunde5
. Wie ich bereits sagte, wird nur die Eingabe aufgeteilt. Spätere Nummern behalten ihre Ziffern in der Reihenfolge bei.Antworten:
Gelee , 15 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
Perl 6 ,
96 &ndash ;7875 Bytes-3 bytes dank nwellnhof
Probieren Sie es online!
0 gibt 0 zurück, und andere Zahlen geben ein Match-Objekt zurück, das die durch ein Leerzeichen mit einem vorangestellten und einem nachfolgenden Leerzeichen getrennten Zahlen angibt.
Erläuterung:
quelle
JavaScript (ES6),
111 104103 ByteProbieren Sie es online!
Kommentiert
quelle
Python 3 ,
1871761581391381291211201129695120116 BytesProbieren Sie es online!
Bearbeiten: Wie von @ Jules bemerkt , gilt eine kürzere Lösung für Python 3.6+.Keine unterschiedlichen Lösungen mehr für Python 3 / 3.6+Edit: Indizierung von
z
war zu ausführlich. Ohne das gibt es jetzt keinen Nutzen mehreval
.Bearbeiten: Vereinfachtes Ermitteln, ob die letzten beiden Elemente bereits in der Sequenz enthalten waren.
Edit: Changed Ausgabeformat aus der Liste zu Tupel + ersetzt
lambda
mitdef
Bearbeiten: Zurück zu,
lambda
aber eingebettett
inf
.Bearbeiten: Eingaben
n
können tatsächlich als Kopf einer wachsenden Sammlung interpretiert werden,z
die im rekursiven Ansatz den Endpunkt darstellen würde. Schlägt auch wieder @ Arbos Lösung.Bearbeiten: Eigentlich können Sie zwei Elemente aus dem Kopf entpacken, was weitere 16 Bytes schneidet.
Edit: Eigentlich 17 Bytes.
Bearbeiten: Wie von @ Arbo festgestellt, gab Lösung Antworten für
14
und59
Fälle, wie sie in ersten Testfällen waren, die sich später als falsch erwiesen haben. Im Moment ist das nicht so kurz, aber es funktioniert zumindest richtig.Ein Missbrauch von
f-strings
undeval
. Original ungolfed code obwohl ich vermute es könnte irgendwie einfacher gemacht werden:quelle
59
Erträgen(14, 5, 9)
C (gcc) ,
114112109 BytesProbieren Sie es online!
-3 von ceilingcat
Beinhaltet ein Leerzeichen.
quelle
do...while
braucht keine geschweiften Klammern, wenn es eine einzelne Anweisung ist O_oPerl 5,
9076 BytesTIO
quelle
Java (JDK) , 194 Byte
Probieren Sie es online!
Hardcoded schien die kürzeste zu sein, da Python bereits eine Antwort von 187 hatte ...
quelle
Haskell, 100 Bytes
Probieren Sie es online!
quelle
Python 2 ,
123114113 BytesProbieren Sie es online!
Das Programm baut ein Tupel
p
aller 2-Wert-Paare auf, die in der Sequenz aufgetreten sind. Dieses Tupel wird mit Junk initialisiert, um einige Bytes zu sparen. Die Sequenz selbst wird im Tupel erstelltl
, und die letzten beiden Elemente dieses Tupels werdenb
zur einfachen (und kurzen) Bezugnahme gespeichert . Sobald eine Wiederholung gefunden wird, können wir den Index vonb
in nachschlagenp
zu wissen, wo die Schleife begonnen hat.EDIT: Bereinigt dies ein bisschen und rasiert ein weiteres Byte ... Meine Methode scheint sich dem Limit für die Byteanzahl zu nähern, und ich sollte wirklich aufhören, daran zu arbeiten.
quelle
Kohle , 46 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
Geben Sie die Nummer ein, füllen Sie sie mit 2 Zeichen auf, nehmen Sie die digitale Summe jedes Zeichens und speichern Sie die resultierende Liste.
Wiederholen, solange die Liste der Schleifen leer ist.
Berechnen Sie die Summe der beiden vorherigen Ziffern und fügen Sie sie der Fibonacci-Liste hinzu.
Nehmen Sie alle nichttrivialen Suffixe der Liste.
Filtern Sie diejenigen heraus, die sich nicht wiederholen, und speichern Sie das Ergebnis in der Liste der Schleifen.
Wandeln Sie die Liste der Schleifen in Zeichenfolge und drucken Sie sie aus.
quelle
Rot ,
189178164137 BytesProbieren Sie es online!
quelle
Python 2 ,
149139 BytesProbieren Sie es online!
Erwartet eine nicht negative Ganzzahl als Eingabe. Kleinere Bytecount, aber wahrscheinlich nicht mehr für ganze Zahlen> 99.
Erläuterung:
quelle