Une séquence de récurrence binaire est une séquence définie récursivement de la forme suivante:
Il s'agit d'une généralisation de la x = 1, y = 2, a = [1, 1], alpha = 1, beta = 1
séquence de Fibonacci ( ) et de la séquence de Lucas ( x = 1, y = 2, a = [2, 1], alpha = 1, beta = 1
).
Le défi
Compte tenu n
, x
, y
, a
, alpha
et beta
, dans tout format raisonnable, la production n
e terme de la séquence de récurrence binaire correspondant.
Règles
- Vous pouvez choisir que la séquence soit indexée 1 ou indexée 0, mais votre choix doit être cohérent sur toutes les entrées, et vous devez noter votre choix dans votre réponse.
- Vous pouvez supposer qu'aucune entrée non valide ne sera donnée (comme une séquence qui se termine avant
n
ou une séquence qui fait référence à des termes non définis, commeF(-1)
ouF(k)
oùk > n
). À la suite de cela,x
ety
sera toujours positif. - Les entrées et sorties seront toujours des entiers, dans les limites du type entier naturel de votre langue. Si votre langue a des entiers non bornés, les entrées et sorties seront dans la plage
[2**31, 2**31-1]
(c'est-à-dire la plage pour un entier complément à deux signé 32 bits). a
contiendra toujours exactement desy
valeurs (selon la définition).
Cas de test
Remarque: tous les cas de test sont indexés 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
raisonnable de prendre un ordre inversé?Réponses:
Gelée , 11 octets
Essayez-le en ligne! 1 | 2 | 3 | 4 | 5
Comment ça fonctionne
la source
Python 2, 62 octets
Une solution récursive directe. Toutes les entrées sont extraites de STDIN, sauf en
n
tant qu'argument de fonction, une division qui est autorisée par défaut (mais de manière litigieuse).Il ne semble pas y avoir de moyen d'économiser des octets
and/or
à la place deif/else
carl[n]
pourrait être falsey à 0.la source
Python 2, 59 octets
Testez-le sur Ideone .
la source
JavaScript (ES6),
5144 octetsNotez que la fonction est partiellement curry, par exemple
f(1,2,[1,1],1,1)(8)
renvoie 34. Il en coûterait 2 octets pour rendre les fonctions intermédiaires indépendantes les unes des autres (actuellement seule la dernière fonction générée fonctionne correctement).Edit: sauvé 7 octets grâce à @Mego soulignant que j'avais oublié que le tableau transmis contient toujours les premiers
y
éléments du résultat.la source
Haskell,
5448 octetsla source
J, 43 octets
Étant donné une séquence initiale de termes A , calcule le terme suivant n fois en utilisant les paramètres de x , y , α et β . Ensuite, il sélectionne le n ème terme dans la séquence étendue et le sort comme résultat.
Usage
Étant donné que J ne prend en charge que 1 ou 2 arguments, je regroupe tous les paramètres sous forme de liste de listes encadrées. Les valeurs initiales de départ A sont d'abord, suivies des paramètres de x et y en tant que liste, suivies des paramètres de α et β en tant que liste, et se terminant par la valeur n .
la source