バイナリ畳み込み


15

バイナリ畳み込みは数値Mで記述され、数値に適用されNます。のバイナリ表現の各ビットについてM、ビットが設定されている場合(1)、出力の対応するビットは、対応するビットに隣接する2ビットを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)です。

チャレンジ

とが与えられたときN、on 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

タイトルが間違っていると思います。「バイナリ革命」である必要があります:)
ルドルフジェリン

回答:



9

Python 2、35バイト

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

うまくいかないようn=255ですか?
ニール

@ニール良いキャッチ。私は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と同じスコアを
とる

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バイト)、関数を任意の符号なし整数データ型で動作させます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.