Contexte
Une séquence fractale est une séquence entière où vous pouvez supprimer la première occurrence de chaque entier et vous retrouver avec la même séquence qu'auparavant.
Une telle séquence très simple s'appelle les paraphrases de Kimberling . Vous commencez avec les nombres naturels positifs:
1, 2, 3, 4, 5, 6, 7, 8, 9, ...
Ensuite, vous riffle dans quelques blancs:
1, _, 2, _, 3, _, 4, _, 5, _, 6, _, 7, _, 8, _, 9, ...
Et puis vous remplissez à plusieurs reprises les blancs avec la séquence elle-même (y compris les blancs):
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, ...
C'est notre séquence fractale! Prenons maintenant les sommes partielles:
1, 2, 4, 5, 8, 10, 14, 15, 20, 23, 29, 31, 38, 42, 50, 51, 60, ...
Mais que se passe-t-il si nous répétons ce processus? "Fractalise" la nouvelle séquence (ie les sommes partielles obtenues à partir des étapes ci-dessus):
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, ...
Et reprenons les sommes partielles:
1, 2, 4, 5, 9, 11, 16, 17, 25, 29, 39, 41, 55, 60, 75, 76, 96, ...
Rincez, répétez. Il s'avère que ce processus converge. Chaque fois que vous répétez ce processus, un préfixe plus grand de la séquence reste fixe. Après une quantité infinie d'itérations, vous vous retrouveriez avec OEIS A085765 .
Fait amusant: ce processus convergerait vers la même séquence même si nous ne partions pas des nombres naturels tant que la séquence d'origine commence par 1
. Si la séquence d'origine commence par une autre x
, nous l'obtiendrons à la x*A085765
place.
Le défi
Étant donné un entier positif N
, sortez le N
e élément de la séquence convergée.
Vous pouvez écrire un programme ou une fonction, en prenant une entrée via STDIN (ou l'alternative la plus proche), un argument de ligne de commande ou un argument de fonction et en sortant le résultat via STDOUT (ou l'alternative la plus proche), la valeur de retour de la fonction ou le paramètre de la fonction (out).
Vous pouvez choisir si l'indice N
est basé sur 0 ou 1.
Cas de test
La séquence commence par:
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
Donc, l'entrée 5
devrait se traduire par la sortie 9
.
Voici une implémentation de référence CJam naïve qui génère les premiers N
nombres (donnés N
sur STDIN). Notez que votre code ne doit renvoyer que le N
th élément, pas le préfixe entier.
N
le terme de A085765 , n'est -ce pas?