Você provavelmente já ouviu falar dos números de Fibonacci. Você sabe, aquela sequência inteira que começa com 1, 1
, e então cada novo número é a soma dos dois últimos?
1 1 2 3 5 8 13...
E assim por diante. Os desafios sobre os números de Fibonacci são bastante populares por aqui . Mas quem disse que os números de Fibonacci precisam começar 1, 1
? Por que eles não podiam começar 0, 1
? Tudo bem, vamos redefini-los para começar em 0:
0 1 1 2 3 5 8 13...
Mas ... Nós também não temos que parar por aí! Se pudermos adicionar os dois últimos números para obter o próximo, também podemos subtrair o primeiro número do segundo número para adicionar um novo número. Então, pode começar com 1, 0
:
1 0 1 1 2 3 5 8 13...
Podemos até acabar com negativos:
-1 1 0 1 1 2 3 5 8 13...
E esta série também continua para sempre. Eu acho interessante como isso acaba refletindo os números regulares de Fibonacci, apenas com todos os outros números negativos:
13 -8 5 -3 2 -1 1 0 1 1 2 3 5 8 13...
Vamos chamar essa série de "Número Estendido de Fibonacci", ou EFN . Como não há realmente um número negativo óbvio para iniciar esta série, diremos que 0 aparece em 0 , os números regulares de Fibonacci se estendem aos índices positivos e os números negativos (meio-negativos?) De Fibonacci se estendem para os índices negativos, assim:
Indices: ...-7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 ...
Values: ...13 -8 5 -3 2 -1 1 0 1 1 2 3 5 8 13...
Isso leva ao desafio de hoje:
Dado um número inteiro N , retorne todos os índices nos quais N aparece na série EFN .
Algumas observações aleatórias sobre esta tarefa:
1 aparece mais vezes no EFN do que qualquer outro número:
[-1, 1, 2]
. Nenhum número aparecerá em mais de 3 lugares.Todo número de Fibonacci> 1 será exibido uma vez (3, 8, 21 etc.) ou duas vezes (2, 5, 13 etc.)
Esclarecimentos sobre as regras:
- Se
abs(N)
não for um número de Fibonacci, ele nunca aparecerá na série EFN ; portanto, você não deve produzir nada / uma coleção vazia, se possível, ou se isso não for possível no seu idioma, você poderá gerar algum valor não numérico constante. - Se N aparecer em vários locais no EFN , sua saída não precisará ser classificada. Embora cada índice deva aparecer exatamente uma vez.
- Embora a maioria dos desafios de sequência permita que você escolha se deseja usar a indexação com base em 1 ou em 0, esse desafio deve usar a indexação descrita (onde 0 aparece em 0).
- Você pode levar a E / S através de qualquer formato padrão.
Casos de teste
-13: []
-12: []
-11: []
-10: []
-9: []
-8: [-6]
-7: []
-6: []
-5: []
-4: []
-3: [-4]
-2: []
-1: [-2]
0: 0
1: [-1, 1, 2]
2: [-3, 3]
3: [4]
4: []
5: [-5, 5]
6: []
7: []
8: [6]
9: []
10: []
11: []
12: []
13: [-7, 7]
E alguns casos de teste maiores:
89: [-11, 11]
1836311903: [46]
10000: []
-39088169: [-38]
Como sempre, a resposta mais curta em bytes vence!