Innerhalb der Fibonacci-Zahlen

20

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: 121393wenn 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 , also gewinnt die kürzeste Antwort in jeder Sprache.

SpookyGengar
quelle
Können wir uns stattdessen für eine 1-Indizierung entscheiden?
Mr. Xcoder
1
Kein Duplikat, aber dieser Herausforderung ziemlich nahe .
Lynn
1
Fädeln über auf Mathematik darüber , ob Fibonacci - Folge normal ist oder nicht (diese Frage setzt voraus , es ist).
AdmBorkBork
1
Müssen wir einen Doppelpunkt als Trennzeichen verwenden? Können wir ein Array / eine Liste ausgeben?
Shaggy

Antworten:

8

Gelee , 10 Bytes

0ÆḞ©w¥1#;®

Probieren Sie es online!

Wie es funktioniert

0ÆḞ©w¥1#;®  Main link. Argument: n

0           Set the return value to 0.
       #    Call the second link to the left with arguments k = 0, 1, 2, ... until
      1     one match has been found.
     ¥        Combine the two links to the left into a dyadich chain.
 ÆḞ             Compute the k-th Fibonacci number...
   ©              and copy it to the register.
    w           Yield 1 if n occurs inside the Fibonacci number, 0 otherwise.
         ®  Yield the value stored in the register.
        ;   Concatenate the index and the Fibonacci number.
Dennis
quelle
Du hast den gleichen Trick benutzt wie ich. :)
Erik der Outgolfer
@EriktheOutgolfer Wie bei Ihnen?
Dennis
Hat nicht D
gepostet
4

Perl 6 , 30 Bytes

{first :kv,/$_/,(0,1,*+*...*)}

Probieren Sie es online!

firstist eine Funktion, die das erste Element einer Sequenz zurückgibt, die einen Test besteht, und es ist günstig, :kvwenn ein Adverb verwendet wird, das angibt, dass sowohl der Schlüssel (Index) als auch der übereinstimmende Wert zurückgegeben werden sollen.

Sean
quelle
Angenommen, Sie können ein Pair- Objekt zurückgeben, können Sie :pstattdessen das Adverb verwenden :kv.
Brad Gilbert b2gills
3

Batch, 104 Bytes

@set/an=x=0,y=1
:l
@call set t=%%x:%1=%%
@if "%t%"=="%x%" set/an+=1,x+=y,y=x-y&goto l
@echo %n%: %x%

Funktioniert n=0..45aufgrund 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. Dies if "%s:l=%"=="%s%"ist beispielsweise der Fall, wenn er %s%nicht leer ist, aber keine enthält l. Die Verwendung von callist dann ein Trick, um %1(die Eingabe) in den Ersetzungsoperator zu ersetzen, callfunktioniert jedoch nicht bei Steuerflussanweisungen, sodass eine temporäre Zwischenzuweisung erforderlich ist.

Neil
quelle
2

Javascript ES6, 68 Zeichen

n=>eval('for(q=x=0,y=1;!`${x}`.match(n);++q)[x,y]=[y,x+y];q+": "+x')

Prüfung:

f=n=>eval('for(q=x=0,y=1;!`${x}`.match(n);++q)[x,y]=[y,x+y];q+": "+x')
console.log([45,72,0,144].map(f).join`
`)

Qwertiy
quelle
2

Python 3, 76 Bytes

f=lambda n,l=[1,0]:str(n)in str(l[1])and(len(l)-2,l[1])or f(n,[l[0]+l[1]]+l)
Levi
quelle
2

Emojicode , 133 Bytes

🐖🔢🍇🍮a 0🍮b 1🍮i 0🔁☁️🔍🔡a 10🔡🐕10🍇🍮b➕a b🍮a➖b a🍮i➕1i🍉😀🔡i 10😀🔡a 10🍉

Probieren Sie es online!

betseg
quelle
1

Dyalog APL, 39 Bytes

{⍺←0⋄∨/(⍕⍵)⍷⍕x←1∧+∘÷/0,⍺/1:⍺,x⋄(1+⍺)∇⍵}

Schwanzrekursion verwenden. Versuchen Sie nicht 72, es wird Ihr Gerät brechen, weil es bei jedem Anruf Fibonacci neu berechnet.

Probieren Sie es online!

Uriel
quelle
1

Mathematica, 119 Bytes

1-indiziert

(T=ToString;If[(h=#)==0,"0:0",a=#&@@Select[k=T/@(Array[Fibonacci,9#]),StringContainsQ[#,T@h]&];Min@Position[k,a]":"a])&


Probieren Sie es online!

J42161217
quelle
1

Eigentlich 13 Bytes

╗1⌠F$╜@c⌡╓i;F

Probieren Sie es online!

Erläuterung:

╗1⌠F$╜@c⌡╓i;F
╗              save input in register 0
 1⌠F$╜@c⌡╓     smallest non-negative integer n where the following function returns truthy:
   F$            nth Fibonacci number, stringified
     ╜@c         count occurrences of input
          i;F  flatten the list, duplicate the index, and push the Fibonacci number at that index
Mego
quelle
1

R, 65 Bytes

f=function(x,n=1,a=1,b=0)`if`(grepl(x,b),c(b,n-1),f(x,n+1,a+b,a))

Standardrekursion zum Generieren von Fibnums, die jedoch nicht auf der Grundlage von terminiert, sondern beendet wird n, wenn sie bmit dem regulären Ausdruck übereinstimmt x. 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 bstatt aund dann Subtrahieren 1von n. Dies soll sicherstellen, dass es f(0)richtig funktioniert.

Dies schlägt für die meisten Werte fehl, wenn die Eingabe den Wert 1001von maxint überschreitet. Wenn wir aund bfür bigints ersetzen , funktioniert dies für höhere Eingaben (aktuelle Tests sind bei x = 11451)

f=function(x,n=1,a=gmp::as.bigz(1),b=gmp::as.bigz(0))`if`(grepl(x,b),c(b,n-1),f(x,n+1,a+b,a))
JAD
quelle
1

JavaScript ES6, 79 78 75 Bytes

-1 Byte von Step Hen

-3 Bytes von Neil

i=>eval('d=a=b=1;while(!~(a+"").indexOf(i)){c=b;b=a+b;a=c;‌​d++};d+": "+a')
Евгений Новиков
quelle
1
Sie können 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')
Stephen
1
String.prototype.indexOfkonvertiert 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).
Neil
@ Neil wirbt mein schlechtes
Stephen
1

C # (.NET Core) , 99 Byte

n=>{int a=0,b=1,c,d=0;for(;b.ToString().IndexOf(n.ToString())<0;c=a,a=b,b+=c,d++);return d+": "+b;}

Probieren Sie es online!

Übernimmt die Eingabe als Ganzzahl und gibt eine Zeichenfolge mit der Ausgabe zurück.

jkelm
quelle
1

PHP, 80 Bytes

<?php for($a=1,$b=$n=0;strpos($a=-$a+$b=$a+$b,"$argv[1]")<-1;$n++);echo"$n: $a";

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:

$b = $a + $b; // The next term is the sum of the two previous terms
$a = $b - $a; // The current term is now recalculated from the next and the previous

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 == 0wahr und false < 0falsch, false < -1wahr! Wenn Sie diesen Vergleich verwenden, werden im Vergleich zu fünf Bytes gespart !==false.

WebSmithery
quelle
1

Japt , 17 14 Bytes

3 Bytes gespart dank @JustinMariner

_ŬøU}a@[XMgX]

Probieren Sie es online!

Erläuterung

_ŬøU}a@[XMgX]      Implicit: U = input integer
      a@            For each integer X in [0, 1, 2, ...]:
        [XMgX]        take [X, Fibonacci(X)].
_    }a             Return the first pair where
 Å                    all but the first item
  ¬                   joined on the empty string (simply returns Fibonacci(X) as a string)
   øU                 contains U.
                    Implicit: output result of last expression
ETHproductions
quelle
14 Bytes: _ŬøU}a@[XMgX] . Verwenden s1 q , um den letzten Gegenstand zu erhalten, mit dem der<space>s
Justin Mariner
@JustinMariner Das ist ... das ist genial :-)
ETHproductions
0

PHP , 163 141 Bytes

<?php $x=fgets(STDIN);$b=[0,1];if($x<1)$b=[0];for(;($c=count($b)-1)&&strpos($b[$c],$x)===false;){$b[]=$b[$c]+$b[$c-1];}die($c.': '.$b[$c]);?>

Probieren Sie es online!

Verwendet $b[0] = 0;und $b[1] = 1;für den Start der Fib-Sequenz

Mic1780
quelle
0

PHP , 93 Bytes

for($a[0]=$a[1]++;!strpos(" $a[$i]","$argv[1]");$a[$i+2]=$a[$i+1]+$a[$i++]);echo"$i: $a[$i]";

Einfache Schleife durch die Fibonacci-Sequenz. Die Prüfung für unsere Eingabenummer erfolgt instrpos(" $a[$i]","$argv[1]") ; Das zusätzliche Leerzeichen ist, weil strposfalse-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!

Xanderhall
quelle
0

Common Lisp, 105 Bytes

(lambda(x)(do((a 0 b)(b 1(+ a b))(i 0(1+ i)))((search(#1=format()"~a"x)(#1#()"~a"a))(#1#()"~a: ~a"i a))))

Probieren Sie es online!

Renzo
quelle