Uma sequência de recorrência binária é uma sequência definida recursivamente da seguinte forma:
Esta é uma generalização da x = 1, y = 2, a = [1, 1], alpha = 1, beta = 1
sequência de Fibonacci ( ) e da sequência de Lucas ( x = 1, y = 2, a = [2, 1], alpha = 1, beta = 1
).
O desafio
Dado n
, x
, y
, a
, alpha
, e beta
, em qualquer formato razoável, de saída do n
ésimo termo da sequência de recorrência binário correspondente.
Regras
- Você pode escolher que a sequência seja indexada 1 ou 0, mas sua escolha deve ser consistente em todas as entradas e você deve fazer anotações de sua escolha em sua resposta.
- Você pode assumir que nenhuma entrada inválida seria fornecida (como uma sequência que termina antes de
n
ou uma sequência que faz referência a termos indefinidos, comoF(-1)
ouF(k)
ondek > n
). Como resultado disso,x
ey
sempre será positivo. - As entradas e saídas sempre serão números inteiros, dentro dos limites do tipo inteiro natural do seu idioma. Se o seu idioma tiver números inteiros ilimitados, as entradas e saídas estarão dentro do intervalo
[2**31, 2**31-1]
(ou seja, o intervalo para um inteiro de complemento de dois com sinal de 32 bits). a
sempre conterá exatamentey
valores (conforme a definição).
Casos de teste
Nota: todos os casos de teste são indexados em 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
na contagem invertida ordem como razoável?Respostas:
Gelatina , 11 bytes
Experimente online! 1 | 2 | 3 | 4 | 5
Como funciona
fonte
Python 2, 62 bytes
Uma solução recursiva direta. Todas as entradas são obtidas do STDIN, exceto
n
como argumento de função, uma divisão que é permitida por padrão (embora contenciosa).Não parece haver uma maneira de salvar bytes
and/or
no lugarif/else
porquel[n]
poderia ser falsey como 0.fonte
Python 2, 59 bytes
Teste em Ideone .
fonte
JavaScript (ES6),
5144 bytesObserve que a função é parcialmente com curry, por exemplo,
f(1,2,[1,1],1,1)(8)
retorna 34. Custaria 2 bytes para tornar as funções intermediárias independentes umas das outras (atualmente, apenas a última função gerada funciona corretamente).Edit: Salvo 7 bytes graças ao @Mego, indicando que eu tinha esquecido que a matriz passada sempre contém os primeiros
y
elementos do resultado.fonte
Haskell,
5448 bytesfonte
J, 43 bytes
Dada uma sequência inicial dos termos A , calcula o próximo termo n vezes usando os parâmetros de x , y , α e β . Posteriormente, ele selecciona o n th prazo na sequência e saídas estendida-lo como o resultado.
Uso
Como J suporta apenas 1 ou 2 argumentos, agrupo todos os parâmetros como uma lista de listas em caixas. A semente inicial valores Um são em primeiro lugar, seguido pelos parâmetros de x e y , como uma lista, seguido por parâmetros de α e β como uma lista, e terminando com o valor de n .
fonte