Die Herausforderung
Bei einer Ganzzahleingabe geben Sie die erste Fibonacci-Zahl zurück, die die Eingabe in sich enthält, zusammen mit dem Index dieser Fibonacci-Zahl (Indizes, die bei 0 oder 1 beginnen - bis zu Ihnen, aber geben Sie bitte an, welche in Ihrer Antwort). Wenn zum Beispiel die Eingabe 12 gegeben wird, wird das Programm zurückgegeben, 26: 121393
wenn 12 in der Zahl ( 12 1393) gefunden wird und es sich bei Index 26 der Fibonacci-Zahlen befindet.
Beispiele
Angesichts der Eingabe:
45
Ihr Programm sollte folgendes ausgeben:
33: 3524578
Eingang:
72
Ausgabe:
54: 86267571272
Eingang:
0
Ausgabe:
0: 0
Eingang:
144
Ausgabe:
12: 144
Wertung
Das ist Code-Golf , also gewinnt die kürzeste Antwort in jeder Sprache.
Antworten:
Gelee , 10 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
D
Python 2 , 56 Bytes
Probieren Sie es online!
quelle
Perl 6 , 30 Bytes
Probieren Sie es online!
first
ist eine Funktion, die das erste Element einer Sequenz zurückgibt, die einen Test besteht, und es ist günstig,:kv
wenn ein Adverb verwendet wird, das angibt, dass sowohl der Schlüssel (Index) als auch der übereinstimmende Wert zurückgegeben werden sollen.quelle
:p
stattdessen das Adverb verwenden:kv
.Batch, 104 Bytes
Funktioniert
n=0..45
aufgrund des begrenzten Bereichs der Ganzzahlarithmetik von Batch. Erläuterung: Batch verfügt nicht über einen integrierten Übereinstimmungstest, sondern über einen Operator, der Literalzeichenfolgen durch andere Literalzeichenfolgen ersetzen kann. Diesif "%s:l=%"=="%s%"
ist beispielsweise der Fall, wenn er%s%
nicht leer ist, aber keine enthältl
. Die Verwendung voncall
ist dann ein Trick, um%1
(die Eingabe) in den Ersetzungsoperator zu ersetzen,call
funktioniert jedoch nicht bei Steuerflussanweisungen, sodass eine temporäre Zwischenzuweisung erforderlich ist.quelle
Gelee , 15 Bytes
Probieren Sie es online!
quelle
Javascript ES6, 68 Zeichen
Prüfung:
quelle
Python 3, 76 Bytes
quelle
Emojicode , 133 Bytes
Probieren Sie es online!
quelle
Dyalog APL, 39 Bytes
Schwanzrekursion verwenden. Versuchen Sie nicht 72, es wird Ihr Gerät brechen, weil es bei jedem Anruf Fibonacci neu berechnet.
Probieren Sie es online!
quelle
Mathematica, 119 Bytes
1-indiziert
Probieren Sie es online!
quelle
Eigentlich 13 Bytes
Probieren Sie es online!
Erläuterung:
quelle
R, 65 Bytes
Standardrekursion zum Generieren von Fibnums, die jedoch nicht auf der Grundlage von terminiert, sondern beendet wird
n
, wenn sieb
mit dem regulären Ausdruck übereinstimmtx
. Das funktioniert eigentlich überraschend gut. Ich bin davon ausgegangen, dass die Verwendung von regulären Ausdrücken mit Zahlen viel Aufwand erfordert, um sie in Zeichenfolgen zu konvertieren, aber das scheint nicht notwendig zu sein :)Dies hat auch die Rekursion um 1 Schritt zu überschreiten, indem Sie auf
b
statta
und dann Subtrahieren1
vonn
. Dies soll sicherstellen, dass esf(0)
richtig funktioniert.Dies schlägt für die meisten Werte fehl, wenn die Eingabe den Wert
1001
von maxint überschreitet. Wenn wira
undb
für bigints ersetzen , funktioniert dies für höhere Eingaben (aktuelle Tests sind beix = 11451
)quelle
JavaScript ES6,
797875 Bytes-1 Byte von Step Hen
-3 Bytes von Neil
quelle
eval()
anstelle von{ return}
ein Byte speichern, und Sie können die löschen,t=
da Sie keine Rekursion verwenden:i=>eval('d=a=b=1;while(!~(a+"").indexOf(i+""){c=b;b=a+b;a=c;d++};d+": "+a')
String.prototype.indexOf
konvertiert seinen Parameter automatisch in eine Zeichenfolge, ohne dass dies explizit erforderlich ist. Außerdem scheinen Sie @ StepHens Tippfehler kopiert zu haben (Sie haben mehr(
s als)
s).C # (.NET Core) , 99 Byte
Probieren Sie es online!
Übernimmt die Eingabe als Ganzzahl und gibt eine Zeichenfolge mit der Ausgabe zurück.
quelle
Haskell , 84 Bytes
Probieren Sie es online!
quelle
PHP, 80 Bytes
Das Skript ist recht einfach und speichert einfach den aktuellen und den nächsten Term der Sequenz in $ a und $ b. Um das 0. Glied von 0 zu berücksichtigen, werden $ a und $ b anfänglich die Werte für das -1. Glied (1) bzw. das 0. Glied (0) zugewiesen.
Beide Werte werden in einem einzelnen Ausdruck neu berechnet, dh zwei Zuweisungen in einer. effektiv:
Wenn der Eingabewert mit dem Anfang des Terms übereinstimmt, gibt die Funktion strpos () 0 zurück (was falsch ist und ein falsches Negativ ergeben würde), aber in der Wonderphul World von PHP ist, obwohl
false == 0
wahr undfalse < 0
falsch,false < -1
wahr! Wenn Sie diesen Vergleich verwenden, werden im Vergleich zu fünf Bytes gespart!==false
.quelle
Japt ,
1714 Bytes3 Bytes gespart dank @JustinMariner
Probieren Sie es online!
Erläuterung
quelle
_ŬøU}a@[XMgX]
. Verwendens1 q
, um den letzten Gegenstand zu erhalten, mit dem der<space>s
PHP ,
163141 BytesProbieren Sie es online!
Verwendet
$b[0] = 0;
und$b[1] = 1;
für den Start der Fib-Sequenzquelle
Perl 5 , 67 + 1 (-p) = 68 Bytes
Probieren Sie es online!
quelle
PHP , 93 Bytes
Einfache Schleife durch die Fibonacci-Sequenz. Die Prüfung für unsere Eingabenummer erfolgt in
strpos(" $a[$i]","$argv[1]")
; Das zusätzliche Leerzeichen ist, weilstrpos
false-y zurückgegeben wird, wenn die Nadel am Anfang der Zeichenfolge gefunden wird. Wir beenden, wenn die Eingabe gefunden wurde, und geben die erforderliche Zeichenfolge aus.Probieren Sie es online!
quelle
Common Lisp, 105 Bytes
Probieren Sie es online!
quelle