Na sequência alternada de Fibonacci, você começa com 1
e 1
como de costume.
No entanto, em vez de sempre adicionar os dois últimos valores para obter o próximo número, você alterna entre começar e adicionar e, em todas as outras vezes, subtrai.
A sequência começa assim:
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.
Observe que, depois que ele recomeça, quando ele chega 1
e 1
novamente.
Dado um número N , imprimir o N ° termo da sequência alternada de Fibonacci.
Lembre-se de que isso é código-golfe , portanto o código com o menor número de bytes vence.
true
para1
?1
valores contam como valores iniciais para a saída? Ou começamos diretamente com o2
?Respostas:
JavaScript (ES6), 25 bytes
Indexado a 0. Você pode encurtar a string com uma versão ligeiramente recursiva, embora adicione 6 bytes:
Isso ainda é mais curto que a fórmula recursiva definitiva:
fonte
Python, 31 bytes
Não se incomoda em tentar calcular o valor. Apenas aparece na lista peroidic length-12
[1, 1, 2, -1, 1, -2, -1, -1, -2, 1, -1, 2]
, que é compactada na base 5.Compare com uma solução recursiva (37 bytes) com
True
's para 1:ou para armazenamento de strings
ou uma tentativa de expressão aritmética.
fonte
Oásis , 10 bytes
Lembra-me de implementar mais alguns recursos internos: p. A entrada é indexada em 0 .
Código:
Versão traduzida:
E calcula o n º prazo.
Experimente online!
fonte
05AB1E , 10 bytes
Usa a codificação CP-1252 . Experimente online!
fonte
Pitão - 13 bytes
Base codificada uma vez série de ciclo, indexada modular.
Experimente online aqui .
fonte
Gelatina, 12 bytes
TryItOnline!
1, dado que o primeiro e o segundo valores são
1
.Não tenho certeza se isso é mais curto ainda, mas por isso observei que a série tem um período de 12:
[1, 1, 2, -1, 1, -2, -1, -1, -2, 1, -1, 2]
Então, eu peguei isso e adicionei
2
para dar e[3, 3, 4, 1, 3, 0, 1, 1, 0, 3, 1, 4]
depois converti isso como um
5
número base para base250
, para dar:[11, 197, 140, 84]
(que é
184222584
).fonte
Haskell,
3326 bytesAbordagem recursiva. Indexado a 0. Experimente em Ideone.
Economizou 7 bytes graças ao xnor .
Uso:
fonte
a!b=a:b:(a+b)!(-a)
.Mathematica, 40 bytes
Apenas cria uma tabela de pesquisa e a acessa ciclicamente, como na resposta da ETHproductions. Função sem nome, indexada em 1.
fonte
MATL ,
171615 bytesA entrada é baseada em 1.
Experimente online!
Explicação
A sequência tem período
[1 1 2 -1 1 -2 -1 -1 -2 1 -1 2]
.fonte
WinDbg, 26 bytes
A entrada é passada através do pseudo-registro
$t0
. Indexado a 0. +2 de cada termo na sequência é armazenado em três bits85824331b
.Como funciona:
Saída de amostra, um loop imprimindo os primeiros 14 valores da sequência:
fonte
Java, 32 bytes
Como esse é Java, a resposta é indexada em 0.
Testando e não destruído:
Teste em Ideona
fonte
Mathematica,
454138 bytesObrigado a @MartinEnder por 3 bytes.
Indexado a 0.
Uso
fonte
±
vez de uma funçãoa
.Perl 6 ,
39 3532 bytesfonte
C #, 117 bytes
Golfe:
Ungolfed:
Teste:
fonte
public int A(int n)
como agoran=>
, você pode remover as chaves ao redor da instrução for economizando 2 bytes, você pode pré-incrementari
o loop, ou seja,++i <= n
e definir ai = 2
economia de 3 bytes porque remove oi++
no final da instruçãoR, 38 bytes
Usa a solução da tabela de pesquisa inspirada na resposta JS @ETHproductions.
Edit: Esqueci de mencionar que este é 1 indexado.
fonte
Na verdade , 22 bytes
Experimente online!
Explicação:
fonte
Java 7,
888279 bytesgolfed:
ungolfed:
Experimente online
fonte
int
como tipo de retorno. 2. você pode poupar bytes movendo a atribuição de 0 para a declaração de i:int c,i=0
efor(;i<n;){
. 3. Você pode remover parênteses em torno da condição do operador ternário.DC, 55 bytes
Indexado a 0.
O registro d armazena o índice do valor. Register n conta o número de iterações concluídas. Registrar r armazena a macro principal. O registro y armazena o valor posterior na sequência, enquanto a pilha contém o valor anterior na sequência.
Explicação visual do que está acontecendo no loop grande (assumindo a adição):
A verificação para determinar se você deseja adicionar ou subtrair usa o contador módulo dois e usa esse truque para criar uma construção if then else.
No final, a pilha contém um único número, o valor desejado, que é impresso com
p
.(Sou iniciante
dc
, então espero que haja algumas melhorias óbvias a serem feitas aqui.)fonte
ForceLang , 153 bytes
fonte
Turtlèd , 35 bytes
0 indexado
Explicação:
Experimente online!
fonte
ABCR, 43 bytes
Explicação: a primeira parte (
)AAB)ABB..A))A..A)AA(ABB.)A+A)))A
) configura a fila A para conter [1, 1, 2, -1, 1, -2, -1, -1, -2, 1, -1, 2], mantendo todas as outras filas vazias .iB
armazena o termo desejado e o loop5aAb(Bx
percorre a fila várias vezes.o
imprime a frente da fila como um número, que será nossa resposta desejada.fonte
Lote, 49 bytes
Recebe a entrada como um parâmetro da linha de comando. Explicação: O formulário fechado usa as seguintes observações:
Portanto, começamos reduzindo o módulo 12 (para economizar 2 bytes). Em seguida, reduzimos o módulo três e invertemos o resultado, que é 1 para múltiplos de 3 ou 0, caso contrário. Em seguida, bit a bit não é esse valor, fornecendo -2 para múltiplos de 3 ou -1 caso contrário. Reduzimos então o módulo 5 e dividimos separadamente por 4, dando zero para os termos 1, 2, 3, 5, 10 e 12 (0). Inverter e negar nos dá -1 para esses valores e zero para outros valores. Em seguida, bit a bit ou isso com 1 e multiplicamos pelo cálculo anterior.
fonte
TI-Basic, 26 bytes
Infelizmente, abordagem muito desinteressante. Não consegui encontrar nada mais curto. A lista é indexada em 1.
fonte
C #,
7371 bytesIsso usa valores indexados 0 de n.
Versão formatada:
fonte