Uma convolução binária é descrita por um número M
e aplicada a um número N
. Para cada bit na representação binária de M
, se o bit estiver definido ( 1
), o bit correspondente na saída é dado por XORing nos dois bits adjacentes ao bit correspondente N
(contornando quando necessário). Se o bit não estiver definido ( 0
), o bit correspondente na saída será fornecido pelo bit correspondente in N
.
Um exemplo trabalhado (com valores de 8 bits):
- Vamos
N = 150
,M = 59
. Suas representações binárias são (respectivamente)10010110
e00111011
. - Com base na
M
representação binária de, os bits 0, 1, 3, 4 e 5 são convoluídos.- O resultado do bit 0 é dado pelos bits 1 e 7 do XOR (já que envolvemos), produzindo
1
. - O resultado para o bit 1 é dado pelos bits 0 e 2 do XOR, produzindo
0
. - O resultado para o bit 2 é dado pelo bit 2 original, produzindo
1
. - O resultado para o bit 3 é dado pelos bits 2 e 4 do XOR, produzindo
0
. - O resultado para o bit 4 é dado pelos bits 3 e 5 do XOR, produzindo
0
. - O resultado para o bit 5 é dado pelos bits 4 e 6 do XOR, produzindo
1
. - Os resultados para os bits 6 e 7 são dados pelos bits 6 e 7 originais, produzindo
0
e1
.
- O resultado do bit 0 é dado pelos bits 1 e 7 do XOR (já que envolvemos), produzindo
- A saída é assim
10100110
(166
).
O desafio
Dado N
e M
, produza o resultado da execução da convolução binária descrita por M
upon N
. A entrada e a saída podem estar em qualquer formato conveniente, consistente e inequívoco. N
e M
sempre estará no intervalo (inclusive) [0, 255]
(números inteiros não assinados de 8 bits) e suas representações binárias devem ser aumentadas para 8 bits para realizar a convolução binária.
Casos de teste
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