Comme vous le savez probablement, un nombre de Fibonacci est celui qui est la somme des deux nombres précédents de la série.
Un Fibonacci Digit ™ est celui qui est la somme des deux chiffres précédents .
Par exemple, pour le début de la série 1,1
, la série serait 1,1,2,3,5,8,13,4,7,11,2...
La modification se produit après le 13
, où, au lieu d'ajouter 8+13
, vous ajoutez 1+3
. La série boucle à la fin, où 4+7=11
et 1+1=2
, comme au début de la série.
Pour un autre exemple, la série commençant 2,2
: 2,2,4,6,10,1,1,2,3,5,8,13,4,7,11,2,3...
. Celui-ci commence de manière unique, mais une fois que les chiffres sont cumulés 10
, vous vous retrouvez avec 1+0=1, 0+1=1
, et la série continue - et boucle - de la même manière que la 1,1
série.
Le défi
Étant donné une entrée entière 0≤n≤99
, calculez la boucle dans la série des chiffres de Fibonacci en commençant par ces deux chiffres. (Vous êtes certainement autorisé à considérer des nombres entiers hors de cette plage, mais ce n'est pas obligatoire.) Si une entrée à un chiffre est donnée, votre code devrait l'interpréter pour indiquer le début de la série 0,n
.
Tous les nombres dans la boucle qui sont à deux chiffres doivent être sortis comme deux chiffres. Ainsi, par exemple, la boucle pour 1,1
contiendrait 13
, non 1,3
.
La sortie commence par le premier numéro de la boucle. Ainsi, sur la base des restrictions ci-dessus, la boucle pour 1,1
commence par 2
, puisque 1,1
et 11
sont comptées séparément.
Chaque numéro de sortie peut être séparé par ce que vous voulez, tant qu'il est cohérent. Dans tous mes exemples, j'utilise des virgules, mais les espaces, les sauts de ligne, les lettres aléatoires, etc. sont tous autorisés, tant que vous utilisez toujours la même séparation. Il en 2g3g5g8g13g4g7g11
va de même pour une sortie légale 1
, mais ce 2j3g5i8s13m4g7sk11
n'est pas le cas. Vous pouvez utiliser des chaînes, des listes, des tableaux, peu importe, à condition que vous ayez les bons nombres dans le bon ordre séparés par un séparateur cohérent. Le bracketing de la sortie entière est également autorisé (ex. (5,9,14)
Ou [5,9,14]
, etc.).
Cas de test:
1 -> 2,3,5,8,13,4,7,11
2 -> 2,3,5,8,13,4,7,11
3 -> 11,2,3,5,8,13,4,7
4 -> 3,5,8,13,4,7,11,2
5 -> 2,3,5,8,13,4,7,11
6 -> 3,5,8,13,4,7,11,2
7 -> 14,5,9
8 -> 13,4,7,11,2,3,5,8
9 -> 11,2,3,5,8,13,4,7
0 -> 0
14 -> 5,9,14
59 -> 5,9,14
C'est le code-golf , donc le plus petit nombre d'octets gagne.
14
et59
donne le même résultat. Si59
est interprété comme commençant5,9
et permettant que cela fasse partie de la boucle, alors14
devrait sûrement être le début de sa boucle?0,1,1,2,3,5,8,13,4,7,11,2,3
. La première fois que la boucle se répète est à la seconde2
.1,4,5,9,14,5
et5,9,14,5,9
. Les deux répètent en commençant par le second5
. Comme je l'ai dit plus tôt, seule l'entrée est divisée; les numéros ultérieurs conservent leurs chiffres dans l'ordre.Réponses:
Gelée , 15 octets
Essayez-le en ligne!
Comment ça marche
la source
Perl 6 ,
96 7875 octets-3 octets grâce à nwellnhof
Essayez-le en ligne!
0 renvoie 0 et un autre nombre renvoie un objet Match qui se transforme en nombres séparés par un espace avec un espace de début en fin.
Explication:
la source
JavaScript (ES6),
111 104103 octetsEssayez-le en ligne!
Commenté
la source
Python 3 ,
1871761581391381291211201129695120116 octetsEssayez-le en ligne!
Edit: Comme indiqué par @ Jules , une solution plus courte s'applique à Python 3.6+.Plus de solutions distinctes pour Python 3 / 3.6+Edit: l'indexation de
z
était trop verbeuse. Sans cela maintenant, il n'y a aucun gain à utilisereval
.Edit: recherche simplifiée si les deux derniers éléments sont déjà apparus dans la séquence.
Modifier: format de sortie modifié de la liste en tuple + remplacé
lambda
pardef
Edit: Retour à
lambda
mais intégrét
dansf
.Edit: l'entrée
n
peut en fait être interprétée comme le chef d'une collection croissantez
qui représenterait la queue dans une approche récursive. Bat également à nouveau la solution de @ Arbo .Edit: En fait, vous pouvez déballer deux éléments de la tête, ce qui coupe encore 16 octets.
Edit: en fait 17 octets.
Edit: Comme indiqué par @ Arbo, la solution donnait des réponses
14
et des59
cas comme dans les cas de test initiaux qui se sont avérés plus tard erronés. Pour l'instant ce n'est pas si court mais au moins ça marche correctement.Tout un abus de
f-strings
eteval
. Code original non golfé bien que je soupçonne que cela pourrait être fait d'une manière plus simple:la source
59
rendements(14, 5, 9)
C (gcc) ,
114112109 octetsEssayez-le en ligne!
-3 depuis le plafond
Comprend un espace de fuite.
la source
do...while
n'a pas besoin des accolades s'il s'agit d'une seule déclaration O_oPerl 5,
9076 octetsTIO
la source
Java (JDK) , 194 octets
Essayez-le en ligne!
Le code dur semblait le plus court étant donné que Python avait déjà une réponse de 187 ...
la source
Haskell, 100 octets
Essayez-le en ligne!
la source
Python 2 ,
123114113 113 octetsEssayez-le en ligne!
Le programme crée un tuple
p
de toutes les paires de 2 valeurs qui se sont produites dans la séquence, qui est initialisé avec du courrier indésirable pour enregistrer certains octets. La séquence elle-même est intégrée dans le tuplel
, et les deux derniers éléments de ce tuple sont stockésb
pour une référence facile (et courte). Dès qu'une répétition est trouvée, nous pouvons rechercher l'indice deb
inp
savoir où la boucle a commencé.EDIT: Nettoyé un peu et rasé un octet de plus ... Ma méthode semble approcher de sa limite de nombre d'octets, et je devrais vraiment arrêter de travailler dessus.
la source
charbon , 46 octets
Essayez-le en ligne!Le lien est vers la version détaillée du code. Explication:
Saisissez le nombre, complétez-le à 2 caractères, puis prenez la somme numérique de chaque caractère et enregistrez la liste résultante.
Répétez pendant que la liste des boucles est vide.
Calculez la somme des deux chiffres précédents et ajoutez-la à la liste de Fibonacci.
Prenez tous les suffixes non triviaux de la liste.
Filtrez celles qui ne se répètent pas et enregistrez le résultat dans la liste des boucles.
Castez la liste des boucles en chaîne et imprimez.
la source
Rouge ,
189178164137 137 octetsEssayez-le en ligne!
la source
Python 2 ,
149139 octetsEssayez-le en ligne!
Attend un entier non négatif en entrée. Bytecount plus petit, mais ne fonctionnera probablement plus pour les entiers> 99.
Explication:
la source