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 ...
0est le premier élément. 1est 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 2donc le deuxième élément de la séquence. Maintenant, les nombres restants sont 1,3,4,5,6,..., mais comme les deux 1et 3sont voisins de 2, 4est le troisième membre de la séquence. Comme il 1n'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.