Неотрицательные целые числа устали от того, что у них всегда одни и те же два соседа, поэтому они решают немного перемешать. Тем не менее, они также ленивы и хотят оставаться как можно ближе к своей исходной позиции.
Они придумали следующий алгоритм:
- Первый элемент 0.
- Элемент является наименьшим числом, которого еще нет в последовательности, и который не является соседом элемента.
Это создает следующую бесконечную последовательность:
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это первый элемент. 1наименьшее число еще не в последовательности, но это сосед 0. Следующее наименьшее число - 2это второй элемент последовательности. Теперь остальные цифры 1,3,4,5,6,..., но и как 1и 3являются соседями 2, 4является третьим членом последовательности. Поскольку 1он не является соседом 4, он, наконец, может занять свое место в качестве четвертого элемента.
Задание
Напишите функцию или программу как можно меньше байтов, которая генерирует вышеупомянутую последовательность.
Вы можете
- выводить последовательность бесконечно,
- взять вход и вернуть элемент последовательности, или
- возьмите вход и верните первые элементов последовательности.
И индексирование с нуля или с одной индексацией подойдет, если вы выберете один из двух последних вариантов.
Вам не нужно следовать приведенному выше алгоритму, любой метод, который производит ту же последовательность, вполне подойдет.
Вдохновленный Code Golf лучшая перестановка . Оказывается, это A277618 .
* Ноль имеет буквально одного соседа и ему все равно.