Бинарная свертка описывается числом M
и применяется к числу N
. Для каждого бита в двоичном представлении M
, если бит установлен ( 1
), соответствующий бит в выводе дается посредством XORing двух битов, смежных с соответствующим битом в N
(при необходимости оборачивая). Если бит не установлен ( 0
), то соответствующий бит на выходе задается соответствующим битом в N
.
Работающий пример (с 8-битными значениями):
- Пусть
N = 150
,M = 59
. Их двоичные представления представлены (соответственно)10010110
и00111011
. - Основываясь на
M
двоичном представлении, биты 0, 1, 3, 4 и 5 свернуты.- Результат для бита 0 дается XORing битами 1 и 7 (так как мы оборачиваемся), приводя к результату
1
. - Результат для бита 1 задается битами XOR 0 и 2, что приводит к результату
0
. - Результат для бита 2 задается исходным битом 2, уступая
1
. - Результат для бита 3 задается битами XORing 2 и 4, что дает результат
0
. - Результат для бита 4 задается битами XOR 3 и 5, что приводит к результату
0
. - Результат для бита 5 задается битами XOR 4 и 6, что приводит к результату
1
. - Результаты для битов 6 и 7 задаются исходными битами 6 и 7, уступая
0
и1
.
- Результат для бита 0 дается XORing битами 1 и 7 (так как мы оборачиваемся), приводя к результату
- Таким образом, вывод
10100110
(166
).
Соревнование
Учитывая N
и M
, выведите результат выполнения двоичной свертки, описанной M
при 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