Неотрицательные целые числа устали от того, что у них всегда одни и те же два соседа, поэтому они решают немного перемешать. Тем не менее, они также ленивы и хотят оставаться как можно ближе к своей исходной позиции.
Они придумали следующий алгоритм:
- Первый элемент 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 .
* Ноль имеет буквально одного соседа и ему все равно.