fundo
Uma sequência fractal é uma sequência inteira, na qual é possível remover a primeira ocorrência de cada número inteiro e terminar com a mesma sequência de antes.
Uma sequência muito simples é chamada de paráfrases de Kimberling . Você começa com os números naturais positivos:
1, 2, 3, 4, 5, 6, 7, 8, 9, ...
Então você riffle em alguns espaços em branco:
1, _, 2, _, 3, _, 4, _, 5, _, 6, _, 7, _, 8, _, 9, ...
E então você preenche repetidamente os espaços em branco com a própria sequência (incluindo os espaços em branco):
1, 1, 2, _, 3, 2, 4, _, 5, 3, 6, _, 7, 4, 8, _, 9, ...
1, 1, 2, 1, 3, 2, 4, _, 5, 3, 6, 2, 7, 4, 8, _, 9, ...
1, 1, 2, 1, 3, 2, 4, 1, 5, 3, 6, 2, 7, 4, 8, _, 9, ...
1, 1, 2, 1, 3, 2, 4, 1, 5, 3, 6, 2, 7, 4, 8, 1, 9, ...
Essa é a nossa sequência fractal! Agora vamos pegar as somas parciais:
1, 2, 4, 5, 8, 10, 14, 15, 20, 23, 29, 31, 38, 42, 50, 51, 60, ...
Mas e se iterarmos esse processo? "Fractalize" a nova sequência (ou seja, as somas parciais obtidas nas etapas acima):
1, _, 2, _, 4, _, 5, _, 8, _, 10, _, 14, _, 15, _, 20, _, 23, ...
1, 1, 2, _, 4, 2, 5, _, 8, 4, 10, _, 14, 5, 15, _, 20, 8, 23, ...
1, 1, 2, 1, 4, 2, 5, _, 8, 4, 10, 2, 14, 5, 15, _, 20, 8, 23, ...
1, 1, 2, 1, 4, 2, 5, 1, 8, 4, 10, 2, 14, 5, 15, _, 20, 8, 23, ...
1, 1, 2, 1, 4, 2, 5, 1, 8, 4, 10, 2, 14, 5, 15, 1, 20, 8, 23, ...
E pegue as somas parciais novamente:
1, 2, 4, 5, 9, 11, 16, 17, 25, 29, 39, 41, 55, 60, 75, 76, 96, ...
Enxágüe, repita. Acontece que esse processo converge. Sempre que você repetir esse processo, um prefixo maior da sequência permanecerá fixo. Após uma quantidade infinita de iterações, você terminaria com o OEIS A085765 .
Curiosidade: esse processo convergiria para a mesma sequência, mesmo que não partíssemos dos números naturais, desde que a sequência original comece 1
. Se a sequência original começar com qualquer outrox
, x*A085765
obteríamos.
O desafio
Dado um número inteiro positivo N
, produza o N
th elemento da sequência convergida.
Você pode escrever um programa ou função, recebendo entrada via STDIN (ou alternativa mais próxima), argumento da linha de comando ou argumento da função e emitindo o resultado via STDOUT (ou alternativa mais próxima), valor de retorno da função ou parâmetro da função (saída).
Você pode escolher se o índice N
é baseado em 0 ou 1.
Casos de teste
A sequência começa com:
1, 2, 4, 5, 9, 11, 16, 17, 26, 30, 41, 43, 59, 64, 81, 82, 108, 117, 147, 151, 192, 203, 246, 248, 307, 323, 387, 392, 473, 490, 572, 573, 681, 707, 824, 833, 980, 1010, 1161, 1165, 1357, 1398, 1601, 1612, 1858, 1901, 2149, 2151, 2458, 2517
Portanto, a entrada 5
deve resultar em saída 9
.
Aqui está uma implementação de referência ingênua do CJam que gera os primeiros N
números (fornecidos N
no STDIN). Observe que seu código deve retornar apenas o N
elemento th, não o prefixo inteiro.
N
termo th de A085765 , correto?