非负整数总是无聊的拥有两个相同的邻居,所以他们决定将它们混为一谈。但是,他们也很懒惰,想尽可能地靠近自己的原始位置。
他们提出了以下算法:
- 第一个元素是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。
*零实际上只有一个邻居,并不在乎。