Les entiers non négatifs s'ennuient d'avoir toujours les mêmes deux * voisins, ils décident donc de mélanger un peu les choses. Cependant, ils sont également paresseux et veulent rester aussi près que possible de leur position d'origine.
Ils proposent l'algorithme suivant:
- Le premier élément est 0.
- L' élément est le plus petit nombre qui n'est pas encore présent dans la séquence et qui n'est pas un voisin de l' élément .
Cela génère la séquence infinie suivante:
0,2,4,1,3,5,7,9,6,8,10,12,14,11,13,15,17,19,16,18,20,22,24,21,23,25,27,29,26,28 ...
0
est le premier élément. 1
est le plus petit nombre qui n'est pas encore dans la séquence, mais c'est un voisin de 0
. Le plus petit nombre suivant est 2
donc le deuxième élément de la séquence. Maintenant, les nombres restants sont 1,3,4,5,6,...
, mais comme les deux 1
et 3
sont voisins de 2
, 4
est le troisième membre de la séquence. Comme il 1
n'est pas voisin de 4
, il peut enfin prendre sa place de quatrième élément.
La tâche
Écrivez une fonction ou un programme en aussi peu d'octets que possible, ce qui génère la séquence ci-dessus.
Tu peux
- produire la séquence à l'infini,
- prendre une entrée et renvoyer l' élément de la séquence, ou
- prendre une entrée et renvoyer les premiers éléments de la séquence.
L'indexation à zéro ou à une seule est correcte si vous choisissez l'une des deux dernières options.
Vous n'avez pas besoin de suivre l'algorithme donné ci-dessus, toute méthode qui produit la même séquence est très bien.
Inspiré par Code golf la meilleure permutation . Il s'avère que c'est A277618 .
* Zero n'a littéralement qu'un seul voisin et ne s'en soucie pas vraiment.