Introdução
Obviamente, temos muitos desafios de sequência , então aqui está outro.
A sequência de Kimberling ( A007063 ) é a seguinte:
1, 3, 5, 4, 10, 7, 15, 8, 20, 9, 18, 24, 31, 14, 28, 22, ...
Isso é produzido baralhando a iteração normal:
[1] 2 3 4 5 6 7 8
O primeiro termo da sequência é 1
. Depois disso, reorganizamos a sequência até que todos os termos à esquerda sejam usados. O embaralhamento tem o padrão right - left - right - left - ...
. Como não há termos à esquerda do 1
, não há embaralhamento. Temos o seguinte:
2 [3] 4 5 6 7 8 9
No i th iteração, descartar o i th item e colocar isso na nossa seqüência. Esta é a segunda iteração, então descartamos o segundo item. A sequência torna-se: 1, 3
. Para a nossa próxima iteração, vamos embaralhar a iteração atual com o padrão acima. Tomamos o primeiro item não utilizado à direita do i- ésimo item. Isso acontece ser 4
. Vamos anexar isso à nossa nova iteração:
4
Agora, pegaremos o primeiro item não utilizado à esquerda do i- ésimo item. Isto é 2
. Vamos anexar isso à nossa nova iteração:
4 2
Como não há itens à esquerda do i- ésimo item, apenas anexaremos o restante da sequência à nova iteração:
4 2 [5] 6 7 8 9 10 11 ...
Esta é a nossa terceira iteração, então vamos descartar o terceiro item, que é 5
. Este é o terceiro item da nossa sequência:
1, 3, 5
Para obter a próxima iteração, basta repetir o processo. Eu fiz um gif se não estiver claro:
O gif me levou mais tempo do que escrever a postagem real
Tarefa
- Dado um número inteiro não negativo n , produza os primeiros n termos da sequência
- Você pode fornecer uma função ou um programa
- Isso é código-golfe , então a submissão com a menor quantidade de bytes ganha!
Casos de teste:
Input: 4
Output: 1, 3, 5, 4
Input: 8
Output: 1, 3, 5, 4, 10, 7, 15, 8
Input: 15
Output: 1, 3, 5, 4, 10, 7, 15, 8, 20, 9, 18, 24, 31, 14, 28
Nota: As vírgulas na saída não são necessárias. Você pode, por exemplo, usar novas linhas ou gerar uma lista, etc.