二进制卷积


15

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

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

  1. N = 150M = 59。它们的二进制表示形式分别为1001011000111011
  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给出,得出01
  3. 因此,输出为10100110166)。

挑战

给定NM,输出执行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(88##:,和:]

用法

   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.