Défi
Vous devez écrire un programme qui prend un entier positif n
en entrée et n
génère le numéro de Fibonacci (abrégé en Fib # partout) qui contient le n
th Fib # en tant que sous-chaîne. Aux fins de ce défi, la séquence de Fibonacci commence par a 1
.
Voici quelques exemples que vous pouvez utiliser comme cas de test ou comme exemples pour clarifier le défi (pour ce dernier, veuillez laisser un commentaire ci-dessous expliquant ce que vous trouvez peu clair).
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
Comme toujours, il s'agit de code-golf , alors optez pour le nombre d'octets le plus bas possible.
Si quelque chose prête à confusion / n'est pas clair, veuillez laisser un commentaire.
(Ce défi est basé sur un autre défi que j'ai publié: Imprimer le nième nombre premier qui contient n )
n=5
testcase, car je viens de faire une erreur idiote où j'ai écrit un chèque qui comptait plusieurs fois s'il avait la sous-chaîne plus d'une fois.n=5
attraperait cela à cause du55
.n=25
(la sortie a 1186 chiffres), puis se fait tuern=26
(3085 chiffres compilés sur mon propre ordinateur portable). Il semble y avoir un saut de difficulté chaque fois qu'ilfib(n)
obtient un chiffre de plus (comme on pourrait s'y attendre). Le saut suivant, 31, a 12990 chiffres dans la sortie finale.Réponses:
Haskell ,
8584 octetsMODIFIER:
l
.x>=s
forx<=s
) dans l'explication.f
prend unInt
et retourne unString
.Essayez-le en ligne!
Comment ça marche
l
est la liste infinie des nombres de Fibonacci, définie récursivement comme les sommes partielles de0:1:l
. Il commence par0
parce que les listes sont indexées 0.m
est la même liste convertie en chaînes.f
:n
est le numéro d'entrée, etx
est la (chaîne du)n
ème numéro de Fibonacci.y
un nombre de Fibonacci est testé pour savoir s'il contientx
comme sous-chaîne. Lesy
s qui passent sont collectés dans la liste et indexés avec la finale!!n
pour donner la sortie. Un supplémentx
est ajouté aux tests pour économiser deux octets de plus!!(n-1)
à la fin.y
s plusieurs fois, les tests de chacuny
sont encapsulésor
et une autre liste de compréhension.s
itère à travers les suffixes dey
.x
c'est un préfixe des
, nous vérifions six<=s
etx++":">s
. (":"
est quelque peu arbitraire mais doit être plus grand que n'importe quel chiffre.)la source
l=0:scanl(+)1l
enregistre un octet.Gelée ,
1514 octets1 octet merci à Jonathan Allan.
Essayez-le en ligne!
la source
Python 2 ,
9986 octetsb=i=x=-1 a=1
et supprimer lex and
f and n==2
àf*(n>2)
a,b=a+b,a
raccourci de swap économiquef-=str(x)in str(a)
, pressé(n<2)*f
Essayez-le en ligne!
Explication:
Python 3 ,
12612011311211010199 octetsEssayez-le en ligne!
la source
b=i=x=-1
a=1
et en supprimant lex and
. (Commencer essentiellement 3 étapes plus tôt dans la séquence de Fibonacci bilatérale -1, 1, 0, 1, 1, 2, ....)-1
: Pn==2
vraiment avoir besoin d'un traitement spécial. Mais il peut être raccourci*(n>2)
.Java,
118111 octetsJe continue de penser qu'il devrait être possible de ne pas dupliquer le bit Fibonacci, mais tous mes efforts se traduisent en quelque sorte par plus d'octets.
Merci à Kevin pour les améliorations ... je suppose que cela montre que c'était ma première tentative de golf :)
la source
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;}
(118 octets)while(--n>0){q=p;p=c;c+=q;}
peuvent êtrefor(;--n>0;p=c,c+=q)q=p;
etn=c;while(i>0){if((""+c).contains(""+n))--i;q=p;p=c;c+=q;}
peuvent êtrefor(n=c;i>0;q=p,p=c,c+=q)if((""+c).contains(""+n))--i;
. (Au total: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 octets )Perl 6 , 45 octets
$_
est l'argument de la fonction;@f
est la séquence de Fibonacci, générée paresseusement.la source
JavaScript (ES6),
9693929086 octetsIndexé en 0, le 0ème numéro de la séquence étant
1
. Craps out14
.26 octets économisés grâce à ArnauldEssayez-le
Explication
Version mise à jour à suivre, quand j'aurai une minute.
la source
Fusain , 65 octets
Essayez-le en ligne!Lien vers le code détaillé pour explication.
la source
PHP , 96 octets
Essayez-le en ligne!
la source
Mathematica, 85 octets
contribution
-4 octets de @JungHwan Min
sortie
la source
f@i@n++
est totalement valide, diminuant de 1 octet. L'utilisationFor
au lieu deWhile
réduit 3 octets. 85 octets:(i=ToString;f=Fibonacci;For[n=t=0,t<#,If[i@f@n++~StringContainsQ~i@f@#,t++]];f[n-1])&
R,
7772 octetsCela utilise la
gmp
bibliothèque pour le numéro de Fibonacci. Mise en œuvre assez directe de la question.Quelques tests
la source
Clojure, 99 octets
Une solution de base, utilise une séquence infinie de nombres de Fibonacci
s
.la source
C #, 35 octets
Essayez-le
la source
n
et vous venez de mettre la sortieb
(je pense). Vous pouvez écrire cette prisen
comme arguments et retoursb
... De plus, je suis sûr que vous ne calculez pas ce que les défis demandent. En fait, je n'ai aucune idée de ce que vous calculez. Pourriez-vous s'il vous plaît fournir l'utilisation d'un code que nous pouvons exécuter pour vérifier votre solution? (votre "Try it" ne peut pas être exécuté telNewStack , 14 octets
La ventilation:
En anglais: (avec exemple d'une entrée de 3)
N∞
: Faites une liste des nombres naturels[1,2,3,4,5,6...]
ḟᵢ
: Stocker l'entrée dans la variablef
[1,2,3,4,5,6...]
fi
: Convertir la liste en nombres de Fibonacci[1,1,2,3,5,8...]
'fif
: Conserver tous les éléments qui contiennent lef
numéro de Fibonacci[2,21,233...]
Ṗf⁻
: Affiche lef-1
e élément (-1 en raison de l'indexation basée sur 0)233
la source
Japt ,
1615 octetsEssayez-le
la source