Escriba un programa o función con nombre que generará o devolverá la secuencia hasta el n
número entero en la secuencia Iccanobif, documentada en OEIS como A014258 . Tenga en cuenta que solo 0
se imprimirá el elemento cero en la secuencia ( ) si n
es cero.
La secuencia se genera comenzando como la secuencia estándar de Fibonacci, pero después de sumar los dos números anteriores, cambia el resultado y elimina los ceros iniciales. Un hecho interesante, al menos para mí, es que esta secuencia no está aumentando estrictamente (ver la lista a continuación). También parece ser (y probablemente sea) estrictamente mayor o igual que la secuencia de Fibonacci.
La entrada de su programa debe ser un número entero.
Los primeros 20 números de la secuencia se proporcionan aquí para su placer visual:
0, 1, 1, 2, 3, 5, 8, 31, 93, 421, 415, 638, 3501, 9314, 51821, 53116, 739401, 715297, 8964541, 8389769
Las lagunas estándar están prohibidas.
El programa más corto gana.
EDITAR: se agregó una nota para aclarar que la secuencia comienza con el elemento cero y debe incluirse si n
es cero.
Ejemplo de posibilidades de IO:
0 -> 0
1 -> 0 1
6 -> 0 1 1 2 3 5 8
17 -> [0, 1, 1, 2, 3, 5, 8, 31, 93, 421, 415, 638, 3501, 9314, 51821, 53116, 739401, 715297]
Ahora que hay varias respuestas, a continuación están mis implementaciones en Python 2 que trabajé duro para ocultar con el marcado:
Iterativo:
#Cerca de mi programa inicial. 73 bytes. También debe tenerse en cuenta que este programa No se puede alcanzar un desbordamiento de pila. Se ejecuta para n = 5000 en menos de 10 segundos.i,a,b=input(),0,1 print a while i:print b;i,a,b=i-1,b,int(str(a+b)[::-1])
Recursivo:
# Tenga en cuenta que esto imprime lasn
nuevas líneas finales. 64 bytes. Llegará a un error de desbordamiento de pila para valores grandes de n.def f(n,i=0,j=1):print i,n and f(n-1,j,int(str(i+j)[::-1]))or'';
Respuestas:
Pyth,
171514Pruébalo en línea
Implementación muy básica, comienza con
range(2)
y agrega una cantidad de elementos igual a la entrada, luegocorta los extras queaparecen en el último elemento.Gracias @Jakube por señalar la
>
cosa de la inversión.Explicación
fuente
Python 2, 58 bytes
Utiliza
str
para convertir en lugar de backticks porque los números lo suficientemente grandes en Python 2 se escriben con una L al final. Intenté una función recursiva, pero resultó más larga (61):fuente
Julia, 79 bytes
Esto crea una función que acepta un entero como entrada y devuelve una matriz de enteros.
Ungolfed + explicación:
Ejemplos:
fuente
T-SQL, 149
Función de tabla en línea muy sencilla que utiliza una consulta CTE recursiva. Como está usando INTs, esto alcanzará un máximo de 37. Agregar CASTs para bigints le permitirá ir más allá de 63
Se usa de la siguiente manera
fuente
K,
2523 bytesUna modificación simple de uno de los ejemplos en No Stinking Loops .
La frase
.|$
arroja un número a una cadena, lo invierte y luego lo evalúa.Editar:
Atención descuidada a las condiciones de contorno de mi parte. Más correcto ahora:
Edición 2:
(x+1)#
se puede reemplazar con-1_
, guardando 2 caracteres. El espacio es necesario porque de lo contrario_x
sería un identificador, cuando quiero que el operador "soltar" se aplique a una variable llamadax
.fuente
Haskell,
6449 bytesEjemplo de uso:
q 15
->[0,1,1,2,3,5,8,31,93,421,415,638,3501,9314,51821,53116]
Cómo funciona:
!
construye recursivamente una lista infinita de números de iccanobif comenzando con su primer argumento (el segundo argumento debe ser el siguiente número de iccanobif).q
toma los primerosn
números de la lista iccanobif que comienzan con1, 1
y antepone a0
.fuente
CJam, 18 bytes
Cómo funciona
Pruébalo en línea aquí
fuente
Java -
126124No he visto Java en este sitio desde hace un tiempo ...
f(5)
huellas dactilares0 1 1 2 3 5 8 31 93 421 415 638
fuente
...System.out.println(c);
Integer.valueOf(
connew Long(
(y luego cambiar elint
en el ciclo forlong
también). Si prefiere simplemente trabajar con enteros,new Integer(
aún es más corto queInteger.valueOf(
.SWI-Prolog,
141131121 bytesa(17,X).
Salidas corrientes :Toma alrededor de 10 segundos para mostrar el resultado
a(10000,X).
en mi computadora.Editar: La versión de 121 bytes anterior es una definición de un predicado = un revestimiento. La versión anterior de 131 bytes es la siguiente (debe ejecutarse como
p(17,X)
):fuente
> <> (Pez)
592254BytesNo super golf (42/43 espacios en blanco que no hacen nada y un total de 30 tokens de redireccionamiento), pero fue un ejercicio interesante para que funcione en primer lugar.
Puede probarlo aquí , proporcionando la longitud deseada en la pila inicial.
EDITAR: recuento de bytes más de la mitad
fuente
PHP,
114, 109 bytesNada de lujos, solo un algoritmo promedio de Fibonacci con la magia inversa de la cuerda.
Sin golf:
fuente
Excel VBA, 279 bytes
La ejecución de la macro solicitará al usuario que ingrese un valor para n.
Los resultados se imprimirán fila por fila en la columna A:
fuente
JavaScript (ES2015),
8173 bytesEjecutando esta función (nombrada
f
) con6
:fuente
Pip , 13 bytes
Estoy bastante seguro de que todas las características utilizadas en este programa estaban presentes en Pip antes de que se hiciera esta pregunta.
Toma entrada como argumento de línea de comando. Pruébalo en línea!
Explicación
Los valores de las dos variables evolucionan así:
fuente
Pushy , 18 bytes (no competidor)
Pruébalo en línea!
No es el más elegante de los programas, pero funciona.
fuente
Gelatina , 9 bytes (no competitiva)
Pruébalo en línea!
fuente
R, 134 bytes
Ejemplo:
Me encantaría ver si alguien tiene una mejor alternativa R que tomar su número, convertirlo en una cadena, invertirlo y volverlo a convertir en un número nuevamente.
fuente
Groovy, 70 bytes
fuente