Sie sind wahrscheinlich mit der Fibonacci-Sequenz vertraut, bei der die ersten beiden Terme 0, 1
(oder manchmal 1, 1
) sind und jeder Term danach die Summe der vorherigen beiden ist. Es beginnt so:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
Manchmal enthält die Sequenz Zahlen mit einem bestimmten Muster, das ich interessant finde: Der Unterschied zwischen zwei benachbarten Ziffern ist der gleiche wie bei jedem anderen Paar. Zum Beispiel ist in der Sequenz, die mit beginnt 0, 1
, der 18. Term 987
. 9-8=1
und 8-7=1
. Ich bin ein bisschen zufrieden.
Herausforderung
Bei zwei Anfangswerten F(0)
und F(1)
Ausgabe jeder Zahl in der Folge, die dadurch generiert wird F(n) = F(n-1) + F(n-2)
, erfüllen die folgenden Kriterien:
- Der Unterschied zwischen zwei benachbarten Ziffern ist der gleiche wie bei jedem anderen Paar
- Es ist mindestens dreistellig (1- und 2-stellige Zahlen sind für dieses Muster nicht interessant)
Eingang
- Zwei nicht negative ganze Zahlen unter 10 ** 10 (10 Milliarden)
Ausgabe
- Alle Ganzzahlen, die kleiner als 10 ** 10 sind und die Kriterien im Abschnitt Herausforderung erfüllen
- Es ist zulässig, Ziffern größer als 10 ** 10 auszugeben, dies ist jedoch keine Voraussetzung
- Angesichts der Tatsache, dass wiederholte Ziffern dem Muster entsprechen (z. B.
777
), ist es möglich, dass es unendlich viele Zahlen gibt, die den Kriterien entsprechen, aber Ihr Programm muss nicht für immer ausgegeben werden - Wenn keine solchen Ganzzahlen vorhanden sind, geben Sie alles aus, was Sie möchten, solange es sich nicht um eine Zahl handelt (nichts, null, leeres Array, Fehlermeldung, trauriges Gesicht usw.).
- Wenn eine Zahl, die mit dem Muster übereinstimmt, in der Sequenz mehrmals vorkommt, können Sie sie einmal oder so oft ausgeben, wie sie vorkommt
- Wenn eine Eingabe die Kriterien erfüllt, sollte sie in die Ausgabe aufgenommen werden
Regeln
- Eingabe und Ausgabe können in jedem Standardformat erfolgen
- Standardlücken sind verboten
- Das ist Code-Golf, also gewinnt der kürzeste Code in Bytes
Beispiele / Testfälle
Input , Output
[1,10] , []
[0,1] , [987]
[2,1] , [123]
[2,3] , [987]
[61,86] , [147]
[75,90] , [420]
[34,74] , [1234]
[59,81] , [2468]
[84,85] , [7531]
[19,46] , [111]
[60,81] , [222]
[41,42] , [333]
[13,81] , [444]
[31,50] , [555]
[15,42] , [666]
[94,99] , [777]
[72,66] , [888]
[3189,826] , [888888888]
[15,3] , [159,258]
[22,51] , [321,1357]
[74,85] , [159,4444]
[27,31] , [147,11111]
[123,0] , [123,123,123,246,369]
[111,0] , [111,111,111,222,333,555,888]
[111,222] , [111,222,333,555,888]
[33345,692] , [987654321]
[3894621507,5981921703] , [9876543210]
[765432099,111111111] , [111111111,876543210,987654321]
[1976,123] , [123, 2222, 4321, 6543, 45678]
[1976, 123] -> [123, 2222, 4321, 6543, 45678]
,[3189, 826] -> [888888888]
,[33345, 692] -> [987654321]
Antworten:
MATL , 14 Bytes
Vielen Dank an Emigna für den Hinweis auf einen Fehler, der jetzt korrigiert wurde
Endlosschleife, die die gefundenen Zahlen ausgibt.
Probieren Sie es online! Beachten Sie, dass im Online-Interpreter die Ergebnisse nach 1 Minute angezeigt werden.
Erläuterung
Lassen Sie
F(n)
undF(n+1)
bezeichnen Sie zwei generische aufeinanderfolgende Ausdrücke der Fibonacci-Sequenz. Jede Iteration der Schleife beginnt mit dem StapelF(n)
, derF(n+1)
für einige enthältn
.quelle
05AB1E ,
171615 BytesProbieren Sie es online!
Erläuterung
quelle
JavaScript (ES6),
858481 BytesProbieren Sie es online!
Testen benachbarter Ziffern
Sowohl x als auch d werden mit einer anonymen Funktion initialisiert, die
NaN
alle arithmetischen Operationen erzwingt, an denen sie beteiligt sind. Die erste Iteration vonsome()
always gives(d = [function] - n) === NaN
und(r = [function] - d) === NaN
(falsy). Bei der zweiten Iteration haben wird = x - n
(eine ganze Zahl) und(r = NaN - d) === NaN
(wieder falsch). Ab der dritten Iteration wird r auf eine ganze Zahl ungleich Null gesetzt, wenn die Differenz zwischen Ziffer # 3 und Ziffer # 2 nicht gleich der Differenz zwischen Ziffer # 2 und Ziffer # 1 ist.Die Zahl p wird die geforderten Kriterien erfüllen , wenn und nur wenn
some()
falsy ist (alle benachbarten Ziffern haben die gleiche Differenz) und der Endwert von r ist 0 (es waren mindestens 3 Wiederholungen). Das gibt!false / 0 === true / 0 === Infinity
(wahr).Andernfalls haben wir möglicherweise:
!true / r
mit r> 0 oder r <0 , wasfalse / r === 0
(falsch) ergibt!false / NaN
, was gibttrue / NaN === NaN
(falsch)Haltezustand
Die Rekursion stoppt, wenn 0
p | q
ausgewertet wird . Dies ist garantiert, wenn sowohl p als auch q Werte um 10 25 erreichen, die 84 Bit lang sind. Da JS 52 Bits Mantisse hat, werden die letzten 32 Bits auf Null gesetzt. Das bitweise 32-Bit-ODER wird also zu 0 ausgewertet .Aufgrund der schnell wachsenden Geschwindigkeit der Sequenz geschieht dies ziemlich schnell.
quelle
Java 8,
151144140136130 BytesEndlosschleife, die die Zahlen ausgibt, wenn sie gefunden werden.
Probieren Sie es online aus (Timeout nach 60 Sekunden).
136-Byte- Version mit zusätzlichen 10 10 limit (
a<1e10
):Probieren Sie es online aus.
Erläuterung:
quelle
Jelly ,
20 1918 BytesProbieren Sie es online!
+ƝḢ;Ɗȷ¡
erzeugt die ersten tausend (ȷ
) Terme der Reihe, die immer ausreichen werden. Ich denke, es gibt wahrscheinlich einen kürzeren Weg, dies zu tun.+ȷ¡
wird knapp, funktioniert aber nur, wenn der erste Term Null ist.Ich gehe davon aus, dass wir die beiden Zahlen in umgekehrter Reihenfolge aufnehmen können, wodurch ein Byte möglich ist
DIE
.Wenn wir keine der Eingaben ausgeben müssen:
Gelee , 15 Bytes
Probieren Sie es online!
quelle
DIEƊ
während des Golfspiels auftauchen.Oktave ,
919083 Bytes7 Bytes gespart dank Luis Mendo!
Probieren Sie es online!
Nun, es funktioniert!
eval
mit for Schleife im Inneren um ein paar Bytes zu sparen. Überspringen von Doppelpunkten und Semikolons , um einige zu sparen. Verwendet die Tatsache, dass ein Vektor als wahr angesehen wird, wenn alle Elemente nicht Null sind, umany
oder zu speichernall
.Davon abgesehen ist es so ziemlich eine einfache Implementierung von Fibonacci.
quelle
Python 2 ,
10298 BytesProbieren Sie es online!
Danke für 4 Bytes von ovs
quelle
Haskell , 105 Bytes
Definiert den Operator,
(%)
der eine unendliche Liste mit allen Lösungen zurückgibt. Um das Ergebnis auf stdout tatsächlich zu sehen, müssen wir das Puffern deaktivieren (oder es inghci
oder mit ausführenrunhaskell
), versuchen Sie es online!Erklärung / Ungolfed
Die Funktion
f
ist nur eine Hilfsfunktion, die eine Binärfunktion und eine Liste erwartet. Sie wendet die Funktiong
auf alle benachbarten Paare an. Es ist im Wesentlichen dasselbe wie:Der Operator
(%)
ist nur ein Listenverständnis, das eine gewisse Filterung vornimmt (wobei sicherzustellen ist, dass mindestens drei Stellen vorhanden sind und die benachbarten Stellen den gleichen Abstand haben):quelle
CJam , 55 Bytes
Probieren Sie es online!
Mein erster CJam-Beitrag, nicht sehr kurz, aber sehr lustig. Anregungen sind willkommen!
quelle
Stax ,
2624 BytesFühren Sie es aus und debuggen Sie es
Erläuterung
Nicht so kurz, wie ich es gerne hätte und wahrscheinlich ein bisschen mehr Golf spielen kann, aber es funktioniert.
quelle
Ruby , 79 Bytes
Probieren Sie es online!
quelle
Julia 0,6 ,
8681 BytesProbieren Sie es online!
Ziemlich einfach - überprüfen Sie, ob die Eingabe mindestens 3 Ziffern hat (
n>99
), und nehmen Sie dann die Differenz zwischen jedem Ziffernpaar in der Zahl (diff(digits(n))
). Überprüfen Sie, ob die Länge (endof
) eines eindeutigen Satzes (∪
) dieser Unterschiede 1 beträgt (dh alle Unterschiede) sind die gleichen), und wenn ja, drucken Sie die Nummer. Tun Sie dies für beide angegebenen Nummern und rufen Sie dann die Funktion mit den nächsten beiden Nummern rekursiv auf.(Leider hat es den Anschein, als hätte esÜberlastet nun den±
eine höhere Priorität, als+
wenn der letzte Aufrufa+b±a+2b
3 Bytes gespart hätte.)<
Operator, wodurch sowohl die Operator-Bytes als auch die Prioritätsklammern gespart werden. (Kann nicht verwenden<
in unserem Code aber so gerade neu geordnetendof(...)<2
zu2>endof(...)
).Wenn einige Fremd Ausgang erlaubt ist, können wir 2 Bytes speichern verwenden
@show
stattprintln
, Drucken ,n = 987
anstatt nur987
. Wir könnten sogardump
1 Byte weniger verwenden, aberdump
die Typinformationen werden zusammen mit dem Wert gedruckt, sodass die AusgabeInt64 987
statt nur erfolgt987
.quelle