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.


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.

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.


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.



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


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)


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!


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!


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

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

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

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

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.


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

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



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!


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!

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.