Défi
Dans cette tâche, vous recevrez un entier N (inférieur à 10 6 ), trouvez la façon minimale de additionner N en utilisant uniquement des nombres de Fibonacci - cette partition est appelée représentation de Zeckendorf .
Vous pouvez utiliser n'importe quel numéro de Fibonacci plus d'une fois et s'il y a plus d'une représentation en sortie.
Par exemple, si l'entrée est 67, une sortie possible pourrait être d'utiliser les nombres Fibonacci 1,3,8,55 qui est également le nombre minimum de nombres Fibonacci qui pourraient être utilisés pour obtenir la somme 67 .
L'entrée N est donnée sur une seule ligne, les entrées sont terminées par EOF.
Exemples
Donné dans le format input: output
0: 0
47: 34+13
3788: 2584+987+144+55+13+5
1646: 1597+34+13+2
25347: 17711+6765+610+233+21+5+2
677: 610+55+8+3+1
343: 233+89+21
3434: 2584+610+233+5+2
Contraintes
- Le nombre d'entrées ne dépasserait pas 10 6 valeurs.
- Votre programme ne doit pas fonctionner plus de 5 secondes pour toutes les entrées.
- Vous pouvez utiliser n'importe quelle langue de votre choix.
- La solution la plus courte gagne!
code-golf
fibonacci
integer-partitions
Chimérique
la source
la source
Réponses:
Ensemble Motorola 68000 - 34 octets
(Syntaxe de l'assembleur GNU)
36 → 34: Le générateur Fibonacci s'est arrêté au débordement plutôt qu'en comptant, et a corrigé le
0
boîtier pour qu'il sorte[0]
plutôt que[]
. Cependant, passer un négatif seN
bloque maintenant.Le commentaire en haut est le prototype C de cette fonction, utilisant un extension de langage pour identifier quels paramètres vont où (par défaut, ils vont sur la pile).
Ma TI-89 , avec son processeur 10 MHz, prend 5 minutes pour exécuter cette fonction sur 1 - 1 000 000.
Bien que le code machine soit (actuellement) moins d'octets que la solution GolfScript, il serait probablement injuste d'accepter cela comme la solution la plus courte car:
Si vous avez une TI-89/92 / V200, vous pouvez télécharger le projet complet ici (obsolète):
https://rapidshare.com/files/154945328/minfib.zip
Bonne chance pour amener RapidShare à vous donner le fichier réel. Quelqu'un connaît-il un bon hôte pour des fichiers aussi gros? 8940 représente énormément d'octets.
la source
Javascript (142)
Ne gère qu'une seule entrée à la fois. Parce que la saisie sur plusieurs lignes est inutile pour JavaScript.
http://jsfiddle.net/EqMXQ/
la source
C, 244 caractères
Avec espace:
Ce programme lira les nombres de l'entrée standard et écrit sur la sortie standard.
la source
Golfscript, 43 caractères
Je pense que cela peut probablement être réduit de 3 à 5 caractères avec plus d'effort. Par exemple, le déplier pour ensuite jeter le tableau semble inutile.
la source
F # -
282 252241 caractèresla source
Python - 183 caractères
La majorité du code gère plusieurs entrées :(
la source
n=input()
à la fin de la ligne précédente?print
Mathematica 88
Exemple de sortie
la source
EXCEL: 89 caractères en code unique:
la source
Scala - 353 caractères (100 caractères pour gérer plusieurs entrées)
la source
Iterator.continually(Console.readLine).takeWhile(_ != "").foreach(line => h(Integer.parseInt(line)))
pourrait être raccourci pourio.Source.stdin.getLines.foreach(l=>h(Integer.parseInt(l)))
enregistrer 40 caractères ish.Python 3 (170 caractères)
Entrée multiligne, arrêt sur ligne vide
la source
C, 151 caractères
version lisible:
la source
R, 170
Gère plusieurs entrées et cat le résultat à STDOUT
la source
R (460 caractères)
Une autre version utilisant R.
Lecture du fichier «entrée», sortie vers le fichier «sortie»
exemple "entrée"
exemple "sortie"
Version plus lisible:
la source
D (196 caractères)
Courez avec
rdmd --eval=…
. Cela cache commodément le passe-partoutimport x, y, z;
etvoid main() {…}
:la source
Utiliser Java
la source