A propos des représentations de Zeckendorf / Numéros de base de Fibonacci
Il s'agit d'un système numérique qui utilise les nombres de Fibonacci comme base. Les nombres se composent de 0 et de 1 et chaque 1 signifie que le nombre contient le numéro de Fibonacci correspondant, et 0 signifie qu'il n'en contient pas.
Par exemple, convertissons tous les nombres naturels <= 10 en Fibonacci de base.
1 deviendra 1, car c'est la somme de 1, qui est un nombre de Fibonacci,
2 deviendra 10, car c'est la somme de 2, qui est un nombre de Fibonacci, et il n'a pas besoin de 1, car nous avons déjà atteint la somme souhaitée.
3 deviendra 100, car c'est la somme de 3, qui est un nombre de Fibonacci et il n'a pas besoin de 2 ou 1 car nous avons déjà atteint la somme souhaitée.
- 4 deviendra 101, car il s'agit de la somme de [3,1], tous deux des nombres de Fibonacci.
- 5 deviendra 1000, car c'est la somme de 5, qui est un nombre de Fibonacci, et nous n'avons besoin d'aucun des autres nombres.
- 6 deviendra 1001, car c'est la somme des nombres de Fibonacci 5 et 1.
- 7 deviendra 1010, car c'est la somme des nombres de Fibonacci 5 et 2.
- 8 deviendra 10000, car il s'agit d'un nombre de Fibonacci.
- 9 deviendra 10001, car il s'agit de la somme des nombres de Fibonacci 8 et 1.
- 10 deviendra 10010, car c'est la somme des nombres de Fibonacci 8 et 2.
Convertissons un nombre aléatoire de Fibonacci de base, 10101001010 en décimal: nous écrivons d'abord les nombres de Fibonacci correspondants. Ensuite, nous calculons la somme des nombres sous 1.
1 0 1 0 1 0 0 1 0 1 0
144 89 55 34 21 13 8 5 3 2 1 -> 144+55+21+5+2 = 227.
En savoir plus sur les nombres de base de Fibonacci: lien , il dispose également d'un outil qui convertit les entiers réguliers en base de Fibonacci. Vous pouvez l'expérimenter.
Maintenant la question:
Votre tâche consiste à prendre un nombre dans la représentation de Zeckendorf et à afficher sa valeur décimale.
L'entrée est une chaîne qui ne contient que 0 et 1 (bien que vous puissiez prendre l'entrée comme vous le souhaitez).
Sortie un nombre en décimal.
Cas de test: (au format entrée-> sortie)
1001 -> 6
100101000 -> 73
1000000000 -> 89
1001000000100100010 -> 8432
1010000010001000100001010000 -> 723452
Il s'agit de code-golf, donc la réponse la plus courte en octets l'emporte.
Remarque: L'entrée ne contiendra aucun 0 ou 1 consécutif.
Réponses:
Taxi ,
19871927 octets-60 octets en raison de la prise de conscience que les sauts de ligne sont facultatifs.
Essayez-le en ligne!
Parce que je ne retourne pas au Taxi Garage à la fin, mon patron me licencie, donc il sort avec une erreur.
la source
Joyless Park
semble un bon endroit à visiterSunny Skies Park
.Perl 6 ,
2823 octetsEssayez-le en ligne!
Bloc de code anonyme qui prend une liste de
1
s et0
s dans l'ordre LSB et renvoie un nombre.Explication:
la source
Gelée , 5 octets
Un lien monadique acceptant une liste en forme Little-endian (c'est-à-dire du LSB à gauche au MSB à droite).
Essayez-le en ligne!
la source
J‘ÆḞḋṚ
.Wolfram Language (Mathematica) ,
35322928 octetsEssayez-le en ligne!
la source
Haskell , 38 octets
Essayez-le en ligne!
Prend l'entrée comme une liste de 1 et de 0.
Explication
Fait une liste des nombres de Fibonacci sans le premier, en variable
f
.Prend la liste des entrées
reverse
s multiplie chaque entrée par l'entrée correspondante dansf
, puissum
s les résultats.Haskell , 30 octets
Essayez-le en ligne!
Si nous prenons d'abord l'entrée avec le bit le moins significatif, nous n'en avons pas besoin
reverse
pour économiser 8 octets.la source
Python 2 , 43 octets
Essayez-le en ligne!
Prend la saisie sous forme de liste. La mise à jour est une version plus courte de
a,b=b+x,a+b+x
, qui ressemble à la mise à jour de Fibonaccia,b=b,a+b
si vous l'ignorezx
.Python 2 , 45 octets
Essayez-le en ligne!
Prend la saisie sous forme de nombres décimaux.
la source
Pyth, 13 octets
La plupart de ces informations (8 octets) ne font que générer les nombres de Fibonacci.
Essayez-le avec cette suite de tests!
Explication:
la source
Brain-Flak ,
110,102,96,94,78, 74 octetsEssayez-le en ligne!
la source
J ,
2414 octetsEssayez-le en ligne!
Golfed down la version 24 octets qui utilise la base mixte pour Fibonacci.
Comment ça fonctionne
J , 21 octets
Essayez-le en ligne!
Version raffinée de la solution à 25 octets de Galen Ivanov .
Utilise la somme diagonale du triangle de Pascal, qui est équivalente à la somme des coefficients binomiaux:
Comment ça fonctionne
J , 24 octets
Essayez-le en ligne!
Verbe explicite monadique. Génère la base mixte qui représente la base de Fibonacci, puis alimente la conversion de base
#.
.Comment ça fonctionne
Alternatives
J , 27 octets
Essayez-le en ligne!
L'idée:
J , 30 octets
Essayez-le en ligne!
Celui-ci a pris le plus d'efforts à construire. Utilise l'expression de forme fermée avec astuce d'arrondi. Dans l'expression, les valeurs 0 et 1 sont respectivement 0 et 1, donc la puissance réelle des chiffres doit commencer par 2.
Bien que l'erreur (
((1-sqrt(5))/2)^n
termes) puisse s'accumuler, elle ne dépasse jamais 0,5, donc l'astuce d'arrondi fonctionne jusqu'à l'infini. Mathématiquement:la source
MathGolf ,
86 octetsEssayez-le en ligne!
Explication
1 octet enregistré grâce à JoKing et un autre octet grâce à la commande LSB.
la source
05AB1E ,
1198 octetsEssayez-le en ligne!
Explication:
la source
Θ
.1
est déjà vrai dans 05AB1E. :)2+
Peut aussi l'êtreÌ
.Python 3 , 63 octets
Essayez-le en ligne!
Prend l'entrée via STDIN sous forme de chaîne.
la source
Rouge ,
142, 126106octetsEssayez-le en ligne!
la source
Rubis , 39 octets
Essayez-le en ligne!
la source
Stax , 6 octets
Exécuter et déboguer
Assez simple. Commande LSB.
la source
Brain-Flak , 40 octets
Essayez-le en ligne!
la source
C (gcc) , 63 octets
Prend l'entrée comme un tableau de
1
'et0
', avec la longueur du tableau. Cette solution est une boucle arrière assez simple.Essayez-le en ligne!
la source
Prolog (SWI) , 74 octets
Essayez-le en ligne!
Prend l'entrée comme une liste d'entiers 1 et 0 avec le bit le plus significatif en premier.
la source
Retina 0.8.2 , 23 octets
Essayez-le en ligne! Link inclut les cas de test les plus rapides. Explication:
Insérez des séparateurs partout et supprimez tous les zéros. Par exemple,
1001
devient;1;;;1;
.Remplacez à plusieurs reprises chacun
1
par un1
dans chacun des deux emplacements suivants, car la somme de leurs valeurs est égale à la valeur de l'original1
.1
les s migrent et s'accumulent donc jusqu'à atteindre les deux derniers endroits, qui (en raison du séparateur nouvellement ajouté) ont maintenant tous deux de la valeur1
.Comptez le
1
s.la source
Japt
-x
, 9 octetsEssayez-le
la source
JavaScript (Node.js) , 41 octets
Un port de la réponse de xnor . Prend l'entrée comme un littéral BigInt.
Essayez-le en ligne!
JavaScript (ES6), 44 octets
Prend l'entrée comme un tableau de caractères, dans l'ordre LSB-first.
Essayez-le en ligne!
la source
En fait , 8 octets
Essayez-le en ligne!
L'entrée est considérée comme une liste de bits dans le premier ordre LSB.
Explication:
la source
Powershell, 68 octets
Script de test:
Production:
la source
Java (OpenJDK 8) , 65 octets
Assez petit pour une réponse Java, j'en suis satisfait. Prend l'entrée comme un tableau ordonné de LSB-first.
Essayez-le en ligne!
Non golfé
la source
Z80Golf , 34 octets
Exemple avec l'entrée 1001-Essayez-le en ligne!
Exemple avec l'entrée 100101000-Essayez-le en ligne!
Assemblée:
la source