이진 컨벌루션


15

이진 컨벌루션은 숫자로 설명되며 숫자 M에 적용됩니다 N. 의 이진 표현에서 각 비트에 대해 M, 비트가 설정되면 ( 1), 출력의 대응하는 비트는 대응하는 비트에 인접한 2 개의 비트를 XOR 링함으로써 N(필요할 때 랩핑 ) 주어진다 . 비트가 설정되지 않은 경우 ( 0), 출력의 해당 비트는 해당 비트 in로 제공 N됩니다.

효과적인 예제 (8 비트 값) :

  1. 보자 N = 150, M = 59. 이진 표현은 (각각) 1001011000111011입니다.
  2. M의 이진 표현을 기반으로 비트 0, 1, 3, 4 및 5가 관련됩니다.
    1. 비트 0에 대한 결과는 XORing 비트 1과 7 (래핑 한 이후)에 의해 제공됩니다 1.
    2. 비트 1에 대한 결과는 XORing 비트 0과 2에 의해 주어지고를 산출 0합니다.
    3. 비트 2에 대한 결과는 원래 비트 2에 의해 주어지고를 산출 1합니다.
    4. 비트 3에 대한 결과는 XORing 비트 2 및 4에 의해 제공되며을 산출 0합니다.
    5. 비트 4에 대한 결과는 XORing 비트 3 및 5에 의해 제공되며을 산출 0합니다.
    6. 비트 5에 대한 결과는 XORing 비트 4 및 6에 의해 제공되며을 산출 1합니다.
    7. 비트 6 및 7에 대한 결과를 원래의 비트 6 및 7에 의해 수득 부여 0하고 1.
  3. 따라서 출력은 10100110( 166)입니다.

도전

주어 NM설명 이진 컨벌루션 행하는 출력 결과 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

제목이 잘못되었다고 생각합니다. "이진 혁명"이어야한다 :)
RudolfJelin

답변:


4

자바 스크립트 (ES6), 31 바이트

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

9

파이썬 2, 35 바이트

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

작동하지 않는 것 같 n=255습니까?
Neil

@Neil Good catch. 나는 mod를 사용하여 그 주위에 좋은 방법을 보지 못하고 여분의 바이트를 대신 이동합니다.
xnor

2

J, 34 바이트

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

당면 과제에 정의 된 프로세스를 적용하는 간단한 접근 방식입니다. 배열로 입력을받습니다[n, m] 받습니다.

양식 일곱 스마일, [:, :(, :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

하스켈, 66 바이트

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

Word8데이터를 호출 할 때 의도 한대로 작동 합니다. 교체 (255-m)complement m어떤 부호 없음 정수 데이터 유형 기능 작동하도록 (5 바이트).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.