Dans les chiffres de Fibonacci

20

Le défi

Étant donné une entrée entière, retournez le premier numéro de Fibonacci qui contient l'entrée en lui-même avec l'index de ce numéro de Fibonacci (index commençant par 0 ou 1 - jusqu'à vous, mais veuillez le mentionner dans votre réponse). Par exemple, si donné l'entrée de 12, le programme retournerait 26: 121393comme 12 se trouve dans le nombre ( 12 1393) et il est à l'index 26 des nombres de Fibonacci.

Exemples

Compte tenu de l'entrée:

45

Votre programme devrait produire:

33: 3524578

Contribution:

72

Production:

54: 86267571272

Contribution:

0

Production:

0: 0

Contribution:

144

Production:

12: 144

Notation

C'est le , donc la réponse la plus courte dans chaque langue l'emporte.

SpookyGengar
la source
Pouvons-nous choisir d'avoir une indexation 1 à la place?
M. Xcoder
1
Pas un doublon, mais assez proche de ce défi.
Lynn
1
Passez en revue les mathématiques pour savoir si la séquence de Fibonacci est normale ou non (cette question suppose qu'elle l'est).
AdmBorkBork
1
Faut-il utiliser un deux-points comme séparateur? Pouvons-nous produire un tableau / une liste?
Shaggy

Réponses:

8

Gelée , 10 octets

0ÆḞ©w¥1#;®

Essayez-le en ligne!

Comment ça fonctionne

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
la source
Vous avez utilisé la même astuce que la mienne. :)
Erik the Outgolfer
@EriktheOutgolfer Comme le vôtre?
Dennis
Je ne l'ai pas D
posté
4

Perl 6 , 30 octets

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

Essayez-le en ligne!

firstest une fonction qui renvoie le premier élément d'une séquence qui réussit un test, et elle prend commodément un :kvadverbe qui lui dit de renvoyer à la fois la clé (index) et la valeur correspondante.

Sean
la source
En supposant que vous pouvez renvoyer un objet Pair , vous pouvez utiliser l' :padverbe au lieu de :kv.
Brad Gilbert b2gills
3

Lot, 104 octets

@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%

Fonctionne pour en n=0..45raison de la plage limitée de l'arithmétique entière de Batch. Explication: Batch n'a pas de test de correspondance intégré, mais il a un opérateur qui peut remplacer les chaînes littérales par d'autres chaînes littérales, par exemple, il if "%s:l=%"=="%s%"est vrai si %s%n'est pas vide mais ne contient pas l. L'utilisation de callest alors une astuce pour remplacer %1(l'entrée) dans l'opérateur de remplacement, mais callne fonctionne pas sur les instructions de flux de contrôle, donc une affectation temporaire intermédiaire est nécessaire.

Neil
la source
2

Javascript ES6, 68 caractères

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

Tester:

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
la source
2

Python 3, 76 octets

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
la source
2

Emojicode , 133 octets

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

Essayez-le en ligne!

betseg
la source
1

Dyalog APL, 39 octets

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

Utilisation de la récursivité de la queue. N'essayez pas 72, cela va casser votre machine car ses fibonacci recalculent partout à chaque appel.

Essayez-le en ligne!

Uriel
la source
1

Mathematica, 119 octets

1 indexé

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


Essayez-le en ligne!

J42161217
la source
1

En fait , 13 octets

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

Essayez-le en ligne!

Explication:

╗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
la source
1

R, 65 octets

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

La récursivité standard pour générer des Fibnums, mais au lieu de se terminer en fonction de n, se termine lorsqu'elle bcorrespond à l'expression régulière x. Cela fonctionne étonnamment bien. J'ai supposé que l'utilisation d'expressions régulières avec des chiffres nécessiterait beaucoup de tracas pour les convertir en chaînes, mais cela ne semble pas être nécessaire :)

Cela a aussi à dépasser la récursion par 1 étape, en vérifiant au blieu de aet retranchant puis 1de n. C'est pour s'assurer que cela f(0)fonctionne correctement.

Cela échoue pour la plupart des valeurs lorsque l'entrée dépasse 1001, en raison de maxint. Si nous remplaçonsa et bpour les bigints, cela fonctionne pour les entrées plus élevées (les tests actuels sont à 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
la source
1

JavaScript ES6, 79 78 75 octets

-1 octet par Step Hen

-3 octets par Neil

i=>eval('d=a=b=1;while(!~(a+"").indexOf(i)){c=b;b=a+b;a=c;‌​d++};d+": "+a')
Евгений Новиков
la source
1
Vous pouvez utiliser eval()au lieu de { return}pour enregistrer un octet, et vous pouvez supprimer le t=puisque vous n'utilisez pas la récursivité:i=>eval('d=a=b=1;while(!~(a+"").indexOf(i+""){c=b;b=a+b;a=c;d++};d+": "+a')
Stephen
1
String.prototype.indexOfconvertit automatiquement son paramètre en chaîne, pas besoin de le faire explicitement. Vous semblez également avoir copié la faute de frappe de @ StepHen (vous avez plus de (s que de )s).
Neil
@Neil woops my bad
Stephen
1

C # (.NET Core) , 99 octets

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;}

Essayez-le en ligne!

Prend l'entrée comme un entier, renvoie une chaîne avec la sortie.

jkelm
la source
1

PHP, 80 octets

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

Le script est assez simple, stockant simplement les termes actuels et suivants de la séquence dans $ a et $ b tout au long. Pour permettre le 0e terme de 0, $ a et $ b se voient attribuer initialement les valeurs du -1e terme (1) et du 0e terme (0) respectivement.

Les deux valeurs sont recalculées dans une seule expression, ce qui correspond à deux affectations en une; effectivement:

$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

Si la valeur d'entrée correspond au début du terme, la fonction strpos () retournera 0 (ce qui est falsey et donnerait un faux négatif), mais dans le monde Wonderphul de PHP, bien que ce false == 0soit vrai et false < 0faux, false < -1c'est vrai! Et donc, l'utilisation de cette comparaison économise cinq octets par rapport à !==false.

WebSmithery
la source
1

Japt , 17 14 octets

Enregistré 3 octets grâce à @JustinMariner

_ŬøU}a@[XMgX]

Essayez-le en ligne!

Explication

_Ŭø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
la source
14 octets: _ŬøU}a@[XMgX]. Utiliser s1 q pour obtenir le dernier élément, ce qui permet de supprimer le<space>s
Justin Mariner
@JustinMariner C'est ... c'est du génie :-)
ETHproductions
0

PHP , 163 141 octets

<?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]);?>

Essayez-le en ligne!

Utilisations $b[0] = 0;et $b[1] = 1;pour le début de la séquence fib

Mic1780
la source
0

PHP , 93 octets

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

Boucle simple à travers la séquence de Fibonacci. La vérification de notre numéro d'entrée se fait en strpos(" $a[$i]","$argv[1]"); l'espace supplémentaire est parce strposque retournera false-y si l '«aiguille» est trouvée au début de la chaîne. Nous terminons si l'entrée est trouvée et renvoyons la chaîne requise.

Essayez-le en ligne!

Xanderhall
la source
0

Lisp commun, 105 octets

(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))))

Essayez-le en ligne!

Renzo
la source