En la secuencia alterna de Fibonacci, primero comienza con 1
y 1
como siempre.
Sin embargo, en lugar de sumar siempre los dos últimos valores para obtener el siguiente número, alterna alternando con la suma, y cada dos veces resta en su lugar.
La secuencia comienza así:
1
1
2 # 1 + 1
-1 # 1 - 2
1 # 2 + -1
-2 # -1 - 1
-1 # 1 + -2
-1 # -2 - -1
-2 # -1 + -1
1 # -1 - -2
-1 # -2 + 1
2 # 1 - -1
1 # -1 + 2
1 # 2 - 1
etc.
Tenga en cuenta que después de que comience de nuevo una vez que llegue 1
y 1
nuevamente.
Dado un número N , imprimir el N º término de la secuencia alterna de Fibonacci.
Recuerde, este es el código de golf , por lo que gana el código con el menor número de bytes.
true
por1
?1
valores cuentan como valores iniciales para la salida? ¿O comenzamos directamente con el2
?Respuestas:
JavaScript (ES6), 25 bytes
0 indexado. Puede acortar la cadena con una versión ligeramente recursiva, aunque agrega 6 bytes:
Esto es aún más corto que la fórmula recursiva definitiva:
fuente
Python, 31 bytes
No se molesta en tratar de calcular el valor. Solo busca en la lista de longitud 12 peroídica
[1, 1, 2, -1, 1, -2, -1, -1, -2, 1, -1, 2]
, que está comprimida en la base 5.Compare con una solución recursiva (37 bytes) con
True
's para 1:o para almacenar cadenas
o un intento de una expresión aritmética.
fuente
Oasis , 10 bytes
Me recuerda que implemente algunos más incorporados: p. La entrada está indexada en 0 .
Código:
Versión traducida:
Y calcula el n º plazo.
Pruébalo en línea!
fuente
05AB1E , 10 bytes
Utiliza la codificación CP-1252 . Pruébalo en línea!
fuente
Pyth - 13 bytes
Base codificada en una serie de ciclo, modular indexada.
Pruébelo en línea aquí .
fuente
Jalea, 12 bytes
TryItOnline!
Basado en 1, dado que el primer y el segundo valor son
1
.No estoy seguro si esto es más corto todavía, pero para esto noté que la serie tiene un período de 12:
[1, 1, 2, -1, 1, -2, -1, -1, -2, 1, -1, 2]
Entonces, tomé eso y agregué
2
para dar y[3, 3, 4, 1, 3, 0, 1, 1, 0, 3, 1, 4]
luego lo convertí como un
5
número base a base250
, para dar:[11, 197, 140, 84]
(que es
184222584
).fuente
Haskell,
3326 bytesEnfoque recursivo. 0 indexado. Pruébalo en Ideone.
Guardado 7 bytes gracias a xnor .
Uso:
fuente
a!b=a:b:(a+b)!(-a)
.Mathematica, 40 bytes
Simplemente crea una tabla de búsqueda y accede a ella cíclicamente, como en la respuesta de ETHproductions. Función sin nombre, 1 indexada.
fuente
MATL ,
171615 bytesLa entrada está basada en 1.
Pruébalo en línea!
Explicación
La secuencia tiene punto
[1 1 2 -1 1 -2 -1 -1 -2 1 -1 2]
.fuente
WinDbg, 26 bytes
La entrada se pasa a través del pseudo-registro
$t0
. 0 indexado. +2 de cada término en la secuencia se almacena en 3 bits haciendo85824331b
.Cómo funciona:
Salida de muestra, un bucle que imprime los primeros 14 valores de la secuencia:
fuente
Java, 32 bytes
Como se trata de Java, la respuesta está indexada en 0.
Pruebas y sin golf:
Prueba de ideona
fuente
Mathematica,
454138 bytesGracias a @MartinEnder por 3 bytes.
0 indexado.
Uso
fuente
±
lugar de una funcióna
.Perl 6 ,
39 3532 bytesfuente
C #, 117 bytes
Golfizado:
Sin golf:
Pruebas:
fuente
public int A(int n)
que ahoran=>
, puede quitar los corchetes alrededor de la instrucción for ahorrando 2 bytes, puede incrementar previamente eli
en el ciclo, es decir,++i <= n
y configurari = 2
guardar 3 bytes porque elimina eli++
al final de la instrucciónR, 38 bytes
Utiliza la solución de tabla de búsqueda inspirada en la respuesta de @ETHproductions JS.
Editar: Olvidé mencionar que esto está indexado 1.
fuente
En realidad , 22 bytes
Pruébalo en línea!
Explicación:
fuente
Java 7,
888279 bytesgolfizado:
sin golf:
Pruébalo en línea
fuente
int
como tipo de retorno. 2. puede ahorrar bytes moviendo la asignación de 0 a la declaración de i:int c,i=0
yfor(;i<n;){
. 3. Puede eliminar paréntesis alrededor de la condición del operador ternario.DC, 55 bytes
0 indexado.
El registro d almacena el índice del valor. Registrarse n cuenta el número de iteraciones completadas. Registrar r almacena la macro principal. Register y almacena el valor posterior en la secuencia, mientras que la pila contiene el valor anterior en la secuencia.
Explicación visual de lo que está sucediendo en el bucle grande (suponiendo además):
La verificación para determinar si se debe sumar o restar toma el módulo dos del contador y usa este truco para hacer una construcción en caso contrario.
Al final, la pila contiene un solo número, el valor deseado, que se imprime con
p
.(Soy nuevo
dc
, así que esperaría que se realicen algunas mejoras obvias aquí).fuente
ForceLang , 153 bytes
fuente
Turtlèd , 35 bytes
0 indexado
Explicación:
Pruébalo en línea!
fuente
ABCR, 43 bytes
Explicación: la primera parte (
)AAB)ABB..A))A..A)AA(ABB.)A+A)))A
) configura la cola A para que contenga [1, 1, 2, -1, 1, -2, -1, -1, -2, 1, -1, 2], manteniendo vacías todas las demás colas .iB
almacena nuestro término deseado, y el ciclo5aAb(Bx
recorre la cola muchas veces.o
imprime el frente de la cola como un número, que luego será nuestra respuesta deseada.fuente
Lote, 49 bytes
Toma la entrada como un parámetro de línea de comando. Explicación: El formulario cerrado utiliza las siguientes observaciones:
Por lo tanto, comenzamos reduciendo el módulo 12 (para guardar 2 bytes). Luego reducimos el módulo tres e invertimos el resultado, que es 1 para múltiplos de 3 o 0 de lo contrario. Entonces, a nivel de bits, no ese valor, dándonos -2 para múltiplos de 3 o -1 de lo contrario. Luego reducimos el módulo 5 y dividimos por separado entre 4, dando cero para los términos 1, 2, 3, 5, 10 y 12 (0). Invertir y negar nos da -1 para esos valores y cero para otros valores. Luego, a nivel de bit o eso con 1 y multiplicamos con el cálculo anterior.
fuente
TI-Basic, 26 bytes
Desafortunadamente, enfoque muy poco interesante. No pude encontrar nada más corto. La lista está indexada en 1.
fuente
C #,
7371 bytesEsto utiliza valores indexados 0 de n.
Versión formateada:
fuente