二进制卷积由数字描述M
,并应用于数字N
。对于的二进制表示形式中的每个位M
,如果将该位设置为(1
),则通过将与相应位中的相应位相邻的两个位进行XOR N
(在必要时进行环绕)来给出输出中的相应位。如果未设置该位(0
),则输出中的相应位由中的相应位给出N
。
一个有效的示例(具有8位值):
- 让
N = 150
,M = 59
。它们的二进制表示形式分别为10010110
和00111011
。 - 根据
M
的二进制表示形式,卷积0、1、3、4和5。- 位0的结果由对位1和7进行XOR运算得出(因为我们进行了环绕),得出
1
。 - 位1的结果由位0和2的XOR运算得出
0
。 - 位2的结果由原始位2给出,即
1
。 - 第3位的结果由第2位和第4位的XOR运算得出
0
。 - 位4的结果由位3和5的XOR运算得出
0
。 - 第5位的结果由第4位和第6位的XOR运算得出
1
。 - 位6和7的结果由原始位6和7给出,得出
0
和1
。
- 位0的结果由对位1和7进行XOR运算得出(因为我们进行了环绕),得出
- 因此,输出为
10100110
(166
)。
挑战
给定N
和M
,输出执行M
on上描述的二进制卷积的结果N
。输入和输出可以采用任何方便,一致且明确的格式。N
并且M
将始终在(包括)范围内[0, 255]
(8位无符号整数),并且应将其二进制表示形式填充为8位以执行二进制卷积。
测试用例
150 59 -> 166
242 209 -> 178
1 17 -> 0
189 139 -> 181
215 104 -> 215
79 214 -> 25
190 207 -> 50
61 139 -> 180
140 110 -> 206
252 115 -> 143
83 76 -> 31
244 25 -> 245
24 124 -> 60
180 41 -> 181
105 239 -> 102
215 125 -> 198
49 183 -> 178
183 158 -> 181
158 55 -> 186
215 117 -> 198
255 12 -> 243
我认为标题是错误的。它应该是“二进制革命” :)
—
RudolfJelin