Como probablemente sepa, un número de Fibonacci es uno que es la suma de los dos números anteriores de la serie.
Un Fibonacci Digit ™ es uno que es la suma de los dos dígitos anteriores .
Por ejemplo, para el comienzo de la serie 1,1
, la serie sería 1,1,2,3,5,8,13,4,7,11,2...
El cambio ocurre después de 13
, donde, en lugar de agregar 8+13
, agrega 1+3
. La serie se repite al final, donde 4+7=11
, y 1+1=2
, al igual que la serie comienza.
Para dar otro ejemplo, la serie que comienza 2,2
: 2,2,4,6,10,1,1,2,3,5,8,13,4,7,11,2,3...
. Este comienza de manera única, pero una vez que los dígitos se suman 10
, terminas 1+0=1, 0+1=1
y la serie continúa, y se repite, de la misma manera que la 1,1
serie.
El reto
Dada una entrada entera 0≤n≤99
, calcule el bucle en la serie de dígitos de Fibonacci que comienza con esos dos dígitos. (Ciertamente se le permite considerar números enteros fuera de este rango, pero no es obligatorio). Si se le da una entrada de un dígito, su código debe interpretarlo para indicar el comienzo de la serie 0,n
.
Todos los números en el bucle que son de dos dígitos se deben generar como dos dígitos. Entonces, por ejemplo, el bucle para 1,1
contendría 13
, no 1,3
.
La salida comienza con el primer número en el bucle. Por lo tanto, en base a las restricciones anteriores, el bucle de 1,1
comienza con 2
, puesto 1,1
y 11
se cuentan por separado.
Cada número de salida puede estar separado por lo que desee, siempre que sea coherente. En todos mis ejemplos utilizo comas, pero se permiten espacios, saltos de línea, letras aleatorias, etc., siempre que use siempre la misma separación. Entonces, 2g3g5g8g13g4g7g11
es una salida legal para 1
, pero 2j3g5i8s13m4g7sk11
no lo es. Puede usar cadenas, listas, matrices, lo que sea, siempre que tenga los números correctos en el orden correcto separados por un separador consistente. También se permite el horquillado de toda la salida (ej. (5,9,14)
O [5,9,14]
, etc.).
Casos de prueba:
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
Este es el código de golf , por lo que gana el menor número de bytes.
14
y59
doy el mismo resultado. Si59
se interpreta como inicio5,9
y lo permite como parte del ciclo, ¿entonces seguramente14
debería ser el comienzo de su ciclo?0,1,1,2,3,5,8,13,4,7,11,2,3
. La primera vez que se repite el ciclo es en la segunda2
.1,4,5,9,14,5
y5,9,14,5,9
. Ambos repiten comenzando con el segundo5
. Como dije antes, solo la entrada se divide; los números posteriores mantienen sus dígitos juntos en la secuencia.Respuestas:
Jalea , 15 bytes
Pruébalo en línea!
Cómo funciona
fuente
Perl 6 ,
96 7875 bytes-3 bytes gracias a nwellnhof
Pruébalo en línea!
0 devuelve 0, y otro número devuelve un objeto Match que encadena a los números separados por un espacio con un espacio inicial al final.
Explicación:
fuente
JavaScript (ES6),
111 104103 bytesPruébalo en línea!
Comentado
fuente
Python 3 ,
1871761581391381291211201129695120116 bytesPruébalo en línea!
Editar: como señaló @ Jules , la solución más corta se aplica a Python 3.6+.Ya no hay soluciones distintas para Python 3 / 3.6+Editar: La indexación de
z
era demasiado detallada. Sin eso ahora no hay ganancia en el usoeval
.Editar: búsqueda simplificada si los dos últimos elementos ya aparecieron en la secuencia.
Editar: Se cambió el formato de salida de la lista a tupla + reemplazado
lambda
pordef
Editar: Volver a
lambda
pero incrustadot
enf
.Editar: La entrada
n
se puede interpretar realmente como la cabeza de una colección en crecimientoz
que representaría la cola en un enfoque recursivo. También supera la solución de @ Arbo nuevamente.Editar: en realidad, puede descomprimir dos elementos de la cabeza que corta otros 16 bytes.
Editar: en realidad 17 bytes.
Editar: Como lo señaló @ Arbo, la solución estaba dando respuestas
14
y59
casos como en los casos de prueba iniciales que luego se demostró que estaban equivocados. Por ahora esto no es tan corto, pero al menos funciona correctamente.Todo un abuso de
f-strings
yeval
. Código original no protegido, aunque sospecho que podría hacerse de alguna manera más fácilfuente
59
rendimientos(14, 5, 9)
C (gcc) ,
114112109 bytesPruébalo en línea!
-3 de ceilingcat
Incluye un espacio final.
fuente
do...while
no necesita los frenos si es una sola declaración O_oPerl 5,
9076 bytesTIO
fuente
Java (JDK) , 194 bytes
Pruébalo en línea!
Hardcoded parecía el más corto dado que Python ya tenía una respuesta de 187 ...
fuente
Haskell, 100 bytes
Pruébalo en línea!
fuente
Python 2 ,
123114113 bytesPruébalo en línea!
El programa crea una tupla
p
de todos los pares de 2 valores que se han producido en la secuencia, que se inicializa con basura para guardar algunos bytes. La secuencia misma se construye en la tuplal
, y los dos últimos elementos de esta tupla se almacenanb
para una referencia fácil (y breve). Tan pronto como se encuentre una repetición, podemos buscar el índice deb
enp
para saber dónde comenzó el ciclo.EDITAR: Limpié esto un poco y me afeité un byte más ... Mi método parece estar llegando a su límite de conteo de bytes, y realmente debería dejar de trabajar en esto.
fuente
Carbón , 46 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
Ingrese el número, rellene con 2 caracteres, luego tome la suma digital de cada carácter y guarde la lista resultante.
Repita mientras la lista de bucles esté vacía.
Calcule la suma de los dos dígitos anteriores y agréguela a la lista de Fibonacci.
Tome todos los sufijos no triviales de la lista.
Filtre los que no se repiten y guarde el resultado en la lista de bucles.
Transmita la lista de bucles para encadenar e imprimir.
fuente
Rojas ,
189178164137 bytesPruébalo en línea!
fuente
Python 2 ,
149139 bytesPruébalo en línea!
Espera un entero no negativo como entrada. Menor bytecount, pero probablemente ya no funcionará para enteros> 99.
Explicación:
fuente