简介(可以忽略)
将所有正数按其常规顺序(1、2、3,...)有点无聊,不是吗?因此,这是围绕所有正数的排列(重新排列)的一系列挑战。这是本系列的第二个挑战。第一个挑战可以在这里找到。
在此挑战中,我们使用格雷码重新排列自然数。格雷码或“反射二进制码”是以这样的方式进行二进制编码的,即两个连续的值仅相差一位。这种编码的一个实际应用是在旋转编码器中使用它,因此我对“ Turn My Way”的引用。
注意,这种编码留下了一定程度的自由度。例如,以下这些二进制1100,存在四种可能的以下代码:1101,1110,1000和0100。这就是为什么我将定义为最小,而不是先前使用的值,该值不同之处仅在二进制编码一个字符。该序列与A163252相对应。
由于这是一个“纯序列”质询,因此任务是针对给定的输出作为输入,其中是A163252。
任务
给定一个整数输入,以整数格式(而不是二进制格式)输出)。
被定义为至少正整数不早的顺序,使得在发生和写入二进制时仅在一个位相差。
注意:此处假定基于1的索引;您可以使用基于0的索引,因此,等等。如果您选择使用它,请在答案中提及。
测试用例
Input | Output
--------------
1 | 1
5 | 4
20 | 18
50 | 48
123 | 121
1234 | 1333
3000 | 3030
9999 | 9997
规则
- 输入和输出是整数(您的程序至少应支持1到32767之间的输入和输出)
- 无效的输入(0,浮点数,字符串,负值等)可能导致无法预测的输出,错误或(未定义的)行为。在A163252中,定义为0。对于此挑战,我们将忽略它。
- 默认的I / O规则适用。
- 禁止默认漏洞。
- 这是代码高尔夫球,因此最短的答案以字节为单位
最后说明
请参阅以下相关(但不相等)的PP&CG问题: