Desafío
En esta tarea, se le dará un número entero N (menos de 10 6 ), encuentre la forma mínima en que podría sumar N usando solo números de Fibonacci; esta partición se llama representación de Zeckendorf .
Puede usar cualquier número de Fibonacci más de una vez y si hay más de una salida de representación.
Por ejemplo, si la entrada es 67, entonces una salida posible podría estar usando los números de Fibonacci 1,3,8,55, que también es el número mínimo de números de Fibonacci que podrían usarse para obtener la suma 67 .
La entrada N se da en una sola línea, las entradas son terminadas por EOF.
Ejemplos
Dado en el formato 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
Restricciones
- El número de entradas no excedería los 10 6 valores.
- Su programa no debe ejecutar más de 5 segundos para todas las entradas.
- Puede usar cualquier idioma de su elección.
- ¡La solución más corta gana!
code-golf
fibonacci
integer-partitions
Quijotesco
fuente
fuente
Respuestas:
Ensamblaje Motorola 68000 - 34 bytes
(Sintaxis del ensamblador GNU)
36 → 34: Se hizo que el generador de Fibonacci se detuviera en el desbordamiento en lugar de contar, y arregló el
0
caso para que salga en[0]
lugar de hacerlo[]
. Sin embargo, pasar unN
accidente negativo ahora.El comentario en la parte superior es el prototipo C de esta función, utilizando una extensión de lenguaje para identificar qué parámetros van a dónde (de manera predeterminada, van en la pila).
Mi TI-89 , con su procesador de 10MHz, tarda 5 minutos en ejecutar esta función en 1 - 1,000,000.
Aunque el código de la máquina es (actualmente) menos bytes que la solución GolfScript, probablemente sería injusto aceptar esto como la solución más corta porque:
Si tiene una TI-89/92 / V200, puede descargar el proyecto completo aquí (desactualizado):
https://rapidshare.com/files/154945328/minfib.zip
Buena suerte persuadiendo a RapidShare para que te dé el archivo real. ¿Alguien sabe de un buen host para archivos tan grandes? 8940 es una gran cantidad de bytes.
fuente
Javascript (142)
Solo maneja una sola entrada a la vez. Porque la entrada multilínea es inútil para JavaScript.
http://jsfiddle.net/EqMXQ/
fuente
C, 244 caracteres
Con espacios en blanco:
Este programa leerá los números de la entrada estándar y escribirá en la salida estándar.
fuente
Golfscript, 43 caracteres
Creo que esto probablemente se puede reducir de 3 a 5 caracteres con más esfuerzo. Por ejemplo, el despliegue para luego tirar la matriz se siente desperdiciado.
fuente
F # -
282252241caracteresfuente
Python - 183 caracteres
La mayoría del código maneja múltiples entradas :(
fuente
n=input()
al final de la línea anterior?print
Mathematica 88
Ejemplo de salida
fuente
EXCEL: 89 caracteres en código único:
fuente
Scala - 353 caracteres (100 caracteres para manejar múltiples entradas)
fuente
Iterator.continually(Console.readLine).takeWhile(_ != "").foreach(line => h(Integer.parseInt(line)))
podría acortarse paraio.Source.stdin.getLines.foreach(l=>h(Integer.parseInt(l)))
guardar 40 caracteres ish.Python 3 (170 caracteres)
Entrada multilínea, parada en línea vacía
fuente
C, 151 caracteres
versión legible:
fuente
R, 170
Maneja múltiples entradas y el resultado del gato a STDOUT
fuente
R (460 caracteres)
Otra versión que usa R.
Lectura del archivo "input", salida al archivo "output"
ejemplo de "entrada"
ejemplo de "salida"
Versión más legible:
fuente
D (196 caracteres)
Corre con
rdmd --eval=…
. Esto oculta convenientemente la repetitiva deimport x, y, z;
yvoid main() {…}
:fuente
Usando Java
fuente