Herausforderung
Sie müssen ein Programm schreiben, das eine positive Ganzzahl n
als Eingabe verwendet und die n
th-Fibonacci-Zahl (durchgehend als Fib # abgekürzt) ausgibt , die die n
th-Fib # als Unterzeichenfolge enthält. Für diese Herausforderung beginnt die Fibonacci-Sequenz mit a 1
.
Hier sind einige Beispiele, die Sie als Testfälle oder als Beispiele zur Verdeutlichung der Herausforderung verwenden können (für letztere hinterlassen Sie bitte einen Kommentar, der erklärt, was Sie für unklar halten).
n=1
Fib#s: 1
^1 1st Fib# that contains a 1 (1st Fib#)
Output: 1
n=2
Fib#s: 1, 1
^1 ^2 2nd Fib# that contains a 1 (2nd Fib#)
Output: 1
n=3
Fib#s: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233
^1 ^2 ^3 3rd Fib# that contains a 2 (3rd Fib#)
Output: 233
n=4
Output: 233
n=5
Output: 6765
n=6
Output: 28657
n=7
Output: 1304969544928657
n=8
Output: 14472334024676221
n=9
Output: 23416728348467685
n=10
Fib#s: 1, ..., 34, 55, 89, ..., 63245986, 102334155, 165580141, ..., 2880067194370816120, 4660046610375530309
^1 ^2 ^3 ^10 10th Fib# that contains a 55 (10th Fib#)
Output: 4660046610375530309
Wie immer ist dies Codegolf , also versuchen Sie die niedrigste mögliche Bytezahl.
Wenn etwas verwirrend / unklar ist, hinterlassen Sie bitte einen Kommentar.
(Diese Herausforderung basiert auf einer anderen Herausforderung, die ich veröffentlicht habe: Gib die n-te Primzahl aus, die n enthält. )
n=5
Testfall einzuschließen, weil ich gerade einen dummen Fehler gemacht habe, bei dem ich einen Scheck geschrieben habe, der eine Zahl mehrmals gezählt hat, wenn er den Teilstring mehr als einmal hatte.n=5
würde das wegen der fangen55
.n=25
(die Ausgabe hat 1186 Stellen) und wird dann fürn=26
(3085 Stellen, die auf meinem eigenen Laptop kompiliert wurden) getötet. Es scheint einen Sprung in den Schwierigkeitsgrad zu geben, wennfib(n)
eine weitere Ziffer erreicht wird (wie zu erwarten). Der nächste Sprung, 31, hat 12990 Stellen in der endgültigen Ausgabe.Antworten:
Haskell ,
8584 BytesBEARBEITEN:
l
.x>=s
fürx<=s
) in Erklärung.f
nimmt einInt
und gibt ein zurückString
.Probieren Sie es online!
Wie es funktioniert
l
ist die unendliche Liste von Fibonacci-Zahlen, rekursiv definiert als die Teilsummen von0:1:l
. Es beginnt damit,0
dass Listen mit 0-Index versehen sind.m
ist die gleiche Liste in Zeichenfolgen konvertiert.f
:n
ist die eingegebene Zahl undx
ist die (Zeichenfolge der)n
th Fibonacci-Zahl.y
wird eine Fibonacci-Zahl daraufhin geprüft, ob siex
eine Teilzeichenfolge enthält . Die übergebeneny
s werden in der Liste gesammelt und mit dem Finale indiziert!!n
, um die Ausgabe zu erhalten.x
Den Tests wird ein Extra vorangestellt, um!!(n-1)
am Ende zwei Bytes zu sparen .y
s mehrmals, die Tests jedesy
in gewickeltor
und eine andere Liste Verständnis.s
durch die Suffixe von iterierty
.x
ein Präfix von ists
, prüfen wir, obx<=s
undx++":">s
. (":"
ist etwas willkürlich, muss aber größer sein als jede Zahl.)quelle
l=0:scanl(+)1l
Speichert ein Byte.Jelly ,
15 bis14 Bytes1 Byte danke an Jonathan Allan.
Probieren Sie es online!
quelle
Python 2 ,
9986 Bytesb=i=x=-1 a=1
und Löschen derx and
f and n==2
bisf*(n>2)
a,b=a+b,a
Kürzelf-=str(x)in str(a)
, gequetscht(n<2)*f
Probieren Sie es online!
Erläuterung:
Python 3 ,
12612011311211010199 BytesProbieren Sie es online!
quelle
b=i=x=-1
a=1
und es fallen lassenx and
. (Beginnen Sie im Wesentlichen 3 Schritte früher in der zweiseitigen Fibonacci-Sequenz -1, 1, 0, 1, 1, 2, ....)-1
: Pn==2
wirklich eine besondere Behandlung zu erfordern. Es kann aber auch auf gekürzt werden*(n>2)
.Java,
118111 BytesIch denke immer wieder, dass es möglich sein sollte, das Fibonacci-Bit nicht zu duplizieren, aber alle meine Bemühungen führen irgendwie zu mehr Bytes.
Vielen Dank an Kevin für die Verbesserungen ... schätze, es zeigt, dass dies mein erster Versuch war, Golf zu spielen :)
quelle
i->{long n=i,p=0,q,c=1;while(--n>0){q=p;p=c;c+=q;}n=c;while(i>0){if((""+c).contains(""+n))--i;q=p;p=c;c+=q;}return p;}
while(--n>0){q=p;p=c;c+=q;}
Kann seinfor(;--n>0;p=c,c+=q)q=p;
undn=c;while(i>0){if((""+c).contains(""+n))--i;q=p;p=c;c+=q;}
kann seinfor(n=c;i>0;q=p,p=c,c+=q)if((""+c).contains(""+n))--i;
. (Insgesamt:i->{long n=i,p=0,q,c=1;for(;--n>0;p=c,c+=q)q=p;for(n=c;i>0;q=p,p=c,c+=q)if((""+c).contains(""+n))--i;return p;}
( 111 Bytes )Perl 6 , 45 Bytes
$_
ist das Argument für die Funktion;@f
ist die Fibonacci-Sequenz, die träge erzeugt wird.quelle
JavaScript (ES6),
9693929086 Bytes0-indiziert, wobei die 0. Ziffer in der Sequenz ist
1
. Scheißt um14
.26 Bytes gespart dank ArnauldVersuch es
Erläuterung
Aktualisierte Version folgt, wenn ich eine Minute Zeit habe.
quelle
Kohle , 65 Bytes
Probieren Sie es online! Link zum ausführlichen Code zur Erklärung.
quelle
PHP , 96 Bytes
Probieren Sie es online!
quelle
Mathematica, 85 Bytes
Eingang
-4 Bytes von @JungHwan min
Ausgabe
quelle
f@i@n++
ist aber völlig gültig und verringert 1 Byte. VerwendenFor
stattWhile
reduziert 3 Bytes. 85 Bytes:(i=ToString;f=Fibonacci;For[n=t=0,t<#,If[i@f@n++~StringContainsQ~i@f@#,t++]];f[n-1])&
R
7772 BytesDies nutzt die
gmp
Bibliothek für die Fibonacci-Nummer. Ziemlich geradeaus Umsetzung der Frage.Einige Tests
quelle
Clojure, 99 Bytes
Eine grundlegende Lösung verwendet eine unendliche Folge von Fibonacci-Zahlen
s
.quelle
C #, 35 Bytes
Versuch es
quelle
n
und Sie setzen nur die Ausgabe inb
(ich denke). Sie könnten dasn
als Argumente nehmen und zurückgebenb
... Außerdem bin ich mir ziemlich sicher, dass Sie nicht berechnen, was die Herausforderungen verlangen. Eigentlich habe ich keine Ahnung, was Sie berechnen. Können Sie uns bitte einen Code zur Verfügung stellen, mit dem wir Ihre Lösung überprüfen können? (Ihr "Try it" kann nicht ausgeführt werden, wie es ist ..)NewStack , 14 Bytes
Die Panne:
Auf Englisch: (am Beispiel einer Eingabe von 3)
N∞
: Machen Sie eine Liste der natürlichen Zahlen[1,2,3,4,5,6...]
ḟᵢ
: Speichern Sie die Eingabe in der Variablenf
[1,2,3,4,5,6...]
fi
: Konvertiert die Liste in Fibonacci-Zahlen[1,1,2,3,5,8...]
'fif
: Behalte alle Elemente, die dief
Fibonacci-Zahl enthalten[2,21,233...]
Ṗf⁻
: Gibt dasf-1
th-Element aus (-1 aufgrund der 0-basierten Indizierung)233
quelle
Japt ,
1615 BytesVersuch es
quelle