Acerca de las representaciones de Zeckendorf / Números de base de Fibonacci
Este es un sistema de números que utiliza los números de Fibonacci como base. Los números consisten en 0 y 1 y cada 1 significa que el número contiene el número de Fibonacci correspondiente, y 0 significa que no.
Por ejemplo, convierta todos los números naturales <= 10 a Fibonacci base.
1 se convertirá en 1, porque es la suma de 1, que es un número de Fibonacci,
2 se convertirá en 10, porque es la suma de 2, que es un número de Fibonacci, y no necesita 1, porque ya logramos la suma deseada.
3 se convertirá en 100, porque es la suma de 3, que es un número de Fibonacci y no necesita 2 o 1 porque ya logramos la suma deseada.
- 4 se convertirá en 101, porque es la suma de [3,1], los cuales son números de Fibonacci.
- 5 se convertirá en 1000, porque es la suma de 5, que es un número de Fibonacci, y no necesitamos ninguno de los otros números.
- 6 se convertirá en 1001, porque es la suma de los números de Fibonacci 5 y 1.
- 7 se convertirá en 1010, porque es la suma de los números de Fibonacci 5 y 2.
- 8 se convertirá en 10000, porque es un número de Fibonacci.
- 9 se convertirá en 10001, porque es la suma de los números de Fibonacci 8 y 1.
- 10 se convertirá en 10010, porque es la suma de los números 8 y 2 de Fibonacci.
Vamos a convertir un número aleatorio de Base Fibonacci, 10101001010 a decimal: Primero escribimos los números de Fibonacci correspondientes. Luego calculamos la suma de los números debajo de 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.
Lea más sobre los números de Base Fibonacci: enlace , también tiene una herramienta que convierte enteros regulares en base de Fibonacci. Puedes experimentar con eso.
Ahora la pregunta:
Su tarea es tomar un número en la representación de Zeckendorf y generar su valor decimal.
La entrada es una cadena que contiene solo 0 y 1 (aunque puede tomar la entrada de la forma que desee).
Salida de un número en decimal.
Casos de prueba: (en el formato de entrada-> salida)
1001 -> 6
100101000 -> 73
1000000000 -> 89
1001000000100100010 -> 8432
1010000010001000100001010000 -> 723452
Este es el código de golf, por lo que gana la respuesta más corta en bytes.
Nota: La entrada no contendrá ningún 0 inicial o 1 consecutivo.
Respuestas:
Taxi ,
19871927 bytes-60 bytes debido a la comprensión de que los saltos de línea son opcionales.
Pruébalo en línea!
Como no regreso al Taxi Garage al final, mi jefe me despide, por lo que sale con un error.
fuente
Joyless Park
Parece un lugar agradable para visitarSunny Skies Park
.Perl 6 ,
2823 bytesPruébalo en línea!
Bloque de código anónimo que toma una lista de
1
s y0
S en la LSB pedidos y devuelve un número.Explicación:
fuente
Jalea , 5 bytes
Un enlace monádico que acepta una lista en forma little-endian (es decir, del LSB a la izquierda a MSB a la derecha).
Pruébalo en línea!
fuente
J‘ÆḞḋṚ
.Wolfram Language (Mathematica) ,
35322928 bytesPruébalo en línea!
fuente
Haskell , 38 bytes
Pruébalo en línea!
Toma la entrada como una lista de 1s y 0s.
Explicación
Hace una lista de los números de Fibonacci sin el primero, en variable
f
.Toma la lista de entrada
reverse
si multiplica cada entrada por la entrada correspondientef
, luegosum
muestra los resultados.Haskell , 30 bytes
Pruébalo en línea!
Si tomamos la entrada con el bit menos significativo primero, no lo necesitamos
reverse
para poder guardar 8 bytes.fuente
Python 2 , 43 bytes
Pruébalo en línea!
Toma la entrada como una lista. La actualización es una versión más corta de
a,b=b+x,a+b+x
, que es como la actualización de Fibonaccia,b=b,a+b
si se ignorax
.Python 2 , 45 bytes
Pruébalo en línea!
Toma la entrada como números decimales.
fuente
Pyth, 13 bytes
La mayor parte de esto (8 bytes) solo genera los números de Fibonacci.
¡Pruébalo con este paquete de prueba!
Explicación:
fuente
Brain-Flak ,
110,102,96,94,78, 74 bytesPruébalo en línea!
fuente
J ,
2414 bytesPruébalo en línea!
Bajó la versión de 24 bytes que utiliza la base mixta para Fibonacci.
Cómo funciona
J , 21 bytes
Pruébalo en línea!
Versión refinada de la solución de 25 bytes de Galen Ivanov .
Utiliza la suma diagonal del triángulo de Pascal, que es equivalente a la suma de los coeficientes binomiales:
Cómo funciona
J , 24 bytes
Pruébalo en línea!
Verbo explícito monádico. Genera la base mixta que representa la base de Fibonacci y luego la convierte en conversión de base
#.
.Cómo funciona
Alternativas
J , 27 bytes
Pruébalo en línea!
La idea:
J , 30 bytes
Pruébalo en línea!
Este tomó el mayor esfuerzo para construir. Utiliza la expresión de forma cerrada con truco de redondeo. En la expresión, los valores 0 y 1 son 0 y 1 respectivamente, por lo que la potencia real de los dígitos debe comenzar con 2.
Si bien el error (
((1-sqrt(5))/2)^n
términos) puede acumularse, nunca excede 0.5, por lo que el truco de redondeo funciona hasta el infinito. Matemáticamente:fuente
MathGolf ,
86 bytesPruébalo en línea!
Explicación
Se guardó 1 byte gracias a JoKing y otro byte gracias a los pedidos de LSB.
fuente
05AB1E ,
1198 bytesPruébalo en línea!
Explicación:
fuente
Θ
.1
es verdad en 05AB1E ya. :) Además,2+
puede serÌ
.Python 3 , 63 bytes
Pruébalo en línea!
Toma entrada a través de STDIN como una cadena.
fuente
Rojo ,
142, 126106bytesPruébalo en línea!
fuente
Rubí , 39 bytes
Pruébalo en línea!
fuente
Stax , 6 bytes
Ejecutar y depurarlo
Muy claro. Pedidos LSB.
fuente
Brain-Flak , 40 bytes
Pruébalo en línea!
fuente
C (gcc) , 63 bytes
Toma la entrada como una matriz de
1
'sy0
' s, junto con la longitud de la matriz. Esta solución es un bucle bastante directo hacia atrás.Pruébalo en línea!
fuente
Prólogo (SWI) , 74 bytes
Pruébalo en línea!
Toma la entrada como una lista de enteros 1 y 0 con el bit más significativo primero.
fuente
Retina 0.8.2 , 23 bytes
Pruébalo en línea! El enlace incluye los casos de prueba más rápidos. Explicación:
Inserte separadores en todas partes y elimine los ceros. Por ejemplo, se
1001
convierte;1;;;1;
.Reemplace repetidamente cada uno
1
con a1
en cada uno de los siguientes dos lugares, ya que la suma de sus valores es igual al valor del original1
.1
s, por lo tanto, migran y se acumulan hasta llegar a los dos últimos lugares, que (debido al separador recién agregado) ahora tienen valor1
.Cuenta el
1
s.fuente
Japt
-x
, 9 bytesIntentalo
fuente
JavaScript (Node.js) , 41 bytes
La respuesta de un puerto de xnor . Toma la entrada como un literal BigInt.
Pruébalo en línea!
JavaScript (ES6), 44 bytes
Toma la entrada como una matriz de caracteres, en primer orden LSB.
Pruébalo en línea!
fuente
En realidad , 8 bytes
Pruébalo en línea!
La entrada se toma como una lista de bits en el primer orden de LSB.
Explicación:
fuente
Powershell, 68 bytes
Script de prueba:
Salida:
fuente
Java (OpenJDK 8) , 65 bytes
Bastante pequeño para una respuesta de Java a Estoy feliz con eso. Toma la entrada como una matriz ordenada de entradas de LSB.
Pruébalo en línea!
Sin golf
fuente
Z80Golf , 34 bytes
Ejemplo con entrada 1001: ¡Pruébelo en línea!
Ejemplo con entrada 100101000: ¡Pruébelo en línea!
Montaje:
fuente