Una secuencia de recurrencia binaria es una secuencia definida recursivamente de la siguiente forma:
Esta es una generalización de la x = 1, y = 2, a = [1, 1], alpha = 1, beta = 1
secuencia de Fibonacci ( ) y la secuencia de Lucas ( x = 1, y = 2, a = [2, 1], alpha = 1, beta = 1
).
El reto
Dada n
, x
, y
, a
, alpha
, y beta
, en cualquier formato razonable, salida de la n
ésimo término de la secuencia de recurrencia binario correspondiente.
Reglas
- Puede elegir que la secuencia sea indexada en 1 o indexada en 0, pero su elección debe ser coherente en todas las entradas y debe tomar nota de su elección en su respuesta.
- Puede suponer que no se darían entradas inválidas (como una secuencia que termina antes
n
o una secuencia que hace referencia a términos indefinidos, comoF(-1)
oF(k)
dóndek > n
). Como resultado de esto,x
yy
siempre será positivo. - Las entradas y salidas siempre serán números enteros, dentro de los límites del tipo entero natural de su idioma. Si su idioma tiene enteros ilimitados, las entradas y salidas estarán dentro del rango
[2**31, 2**31-1]
(es decir, el rango para un entero de dos con signo de 32 bits). a
siempre contendrá exactamente losy
valores (según la definición).
Casos de prueba
Nota: todos los casos de prueba están indexados a 0.
x = 1, y = 2, a = [1, 1], alpha = 1, beta = 1, n = 6 => 13
x = 1, y = 2, a = [2, 1], alpha = 1, beta = 1, n = 8 => 47
x = 3, y = 5, a = [2, 3, 5, 7, 11], alpha = 2, beta = 3, n = 8 => 53
x = 1, y = 3, a = [-5, 2, 3], alpha = 1, beta = 2, n = 10 => -67
x = 5, y = 7, a = [-5, 2, 3, -7, -8, 1, -9], alpha = -10, beta = -7, n = 10 => 39
a
en orden inverso cuenta como razonable?Respuestas:
Jalea , 11 bytes
Pruébalo en línea! 1 | 2 | 3 | 4 | 5 5
Cómo funciona
fuente
Python 2, 62 bytes
Una solución recursiva directa. Todas las entradas se toman de STDIN, excepto
n
como argumento de función, una división que está permitida de manera predeterminada (aunque contenciosa).No parece haber una manera de guardar bytes
and/or
en lugar deif/else
porquel[n]
podría ser falsey como 0.fuente
Python 2, 59 bytes
Pruébelo en Ideone .
fuente
JavaScript (ES6),
5144 bytesTenga en cuenta que la función tiene un currículum parcial, por ejemplo,
f(1,2,[1,1],1,1)(8)
devuelve 34. Costaría 2 bytes hacer que las funciones intermedias sean independientes entre sí (actualmente solo la última función generada funciona correctamente).Editar: ahorré 7 bytes gracias a @Mego que señaló que había pasado por alto que la matriz que se pasa siempre contiene los primeros
y
elementos del resultado.fuente
Haskell,
5448 bytesfuente
J, 43 bytes
Dada una secuencia inicial de términos A , calcula el siguiente término n veces usando los parámetros de x , y , α y β . Posteriormente, se selecciona el n º término de la secuencia extendida y la emite como el resultado.
Uso
Como J solo admite 1 o 2 argumentos, agrupo todos los parámetros como una lista de listas en recuadro. Los valores iniciales A son primero, seguidos por los parámetros de x e y como una lista, seguidos por los parámetros de α y β como una lista, y terminando con el valor n .
fuente