二进制卷积


15

二进制卷积由数字描述M,并应用于数字N。对于的二进制表示形式中的每个位M,如果将该位设置为(1),则通过将与相应位中的相应位相邻的两个位进行XOR N(在必要时进行环绕)来给出输出中的相应位。如果未设置该位(0),则输出中的相应位由中的相应位给出N。

一个有效的示例(具有8位值):

  1. 让N = 150,M = 59。它们的二进制表示形式分别为10010110和00111011。
  2. 根据M的二进制表示形式,卷积0、1、3、4和5。
    1. 位0的结果由对位1和7进行XOR运算得出(因为我们进行了环绕),得出1。
    2. 位1的结果由位0和2的XOR运算得出0。
    3. 位2的结果由原始位2给出,即1。
    4. 第3位的结果由第2位和第4位的XOR运算得出0。
    5. 位4的结果由位3和5的XOR运算得出0。
    6. 第5位的结果由第4位和第6位的XOR运算得出1。
    7. 位6和7的结果由原始位6和7给出,得出0和1。
  3. 因此,输出为10100110(166)。

挑战

给定N和M,输出执行Mon上描述的二进制卷积的结果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

Answers:


4

JavaScript(ES6),31个字节

(n,m)=>n^m&(n^(n*=257)>>1^n>>7)

9

Python 2,35个字节

lambda m,n:n^m&(n^n*257/2^n*2^n>>7)

似乎不适合n=255?
— 尼尔

@Neil好抓住。我看不到用mod解决这个问题的好方法,而是转移了一个额外的字节。
— xnor

2

J,34个字节

2#.[:({"_1],._1&|.~:1&|.)/(8#2)#:]

运用挑战中定义的流程的简单方法。将输入作为数组[n, m]。

表格7表情,[:,:(,:1,(8,8#,#:,和:]。

用法

   f =: 2#.[:({"_1],._1&|.~:1&|.)/(8#2)#:]
   f 150 59
171
   f 59 150
166
   f 209 242
178
   f 17 1
0
   f 139 189
181

如果J得分与Python得分相同,那一定是错误的:D
— PurkkaKoodari

2

x64机器码,17个字节

88CD88C8D0C9D0C530E930C120D130C8C3

拆解:

0:  88 cd                   mov    ch,cl
2:  88 c8                   mov    al,cl
4:  d0 c9                   ror    cl,1
6:  d0 c5                   rol    ch,1
8:  30 e9                   xor    cl,ch
a:  30 c1                   xor    cl,al
c:  20 d1                   and    cl,dl
e:  30 c8                   xor    al,cl
10: c3                      ret

适用于Win64调用约定(rcx,rdx中的参数)。


1

Haskell,66个字节

import Data.Bits
n%m=n.&.(255-m)+(rotate n 1`xor`rotate n(-1)).&.m

与Word8数据一起调用时按预期工作。替换(255-m)为complement m(+5个字节),以使该函数可与任何无符号整数数据类型一起使用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.