Binäre Faltung

15

Eine binäre Faltung wird durch eine Zahl beschrieben Mund auf eine Zahl angewendet N. Für jedes Bit in der Binärdarstellung von M, wenn das Bit gesetzt ist ( 1), wird das entsprechende Bit in der Ausgabe durch XOR-Verknüpfung der zwei neben dem entsprechenden Bit in liegenden Bits gegeben N(bei Bedarf umlaufend ). Ist das Bit nicht gesetzt ( 0), so wird das entsprechende Bit im Ausgang durch das entsprechende Bit in gegeben N.

Ein funktionierendes Beispiel (mit 8-Bit-Werten):

  1. Lassen Sie N = 150, M = 59. Ihre binären Darstellungen sind (bzw.) 10010110und 00111011.
  2. Basierend auf Mder Binärdarstellung werden die Bits 0, 1, 3, 4 und 5 zusammengefasst.
    1. Das Ergebnis für Bit 0 wird durch XOR-Verknüpfung der Bits 1 und 7 (da wir herumlaufen) gegeben, was ergibt 1.
    2. Das Ergebnis für Bit 1 wird durch XOR-Verknüpfung der Bits 0 und 2 erhalten 0.
    3. Das Ergebnis für Bit 2 wird durch das ursprüngliche Bit 2 gegeben, was ergibt 1.
    4. Das Ergebnis für Bit 3 wird durch XOR-Verknüpfung der Bits 2 und 4 erhalten 0.
    5. Das Ergebnis für Bit 4 wird durch XOR-Verknüpfung der Bits 3 und 5 erhalten 0.
    6. Das Ergebnis für Bit 5 wird durch XOR-Verknüpfung der Bits 4 und 6 erhalten 1.
    7. Die Ergebnisse für die Bits 6 und 7 sind durch die ursprünglichen Bits 6 und 7 gegeben und ergeben 0und 1.
  3. Die Ausgabe ist also 10100110( 166).

Die Herausforderung

Gegeben Nund der MAusgang des Ergebnis der Durchführung des binären Faltungs beschriebenen Mauf N. Die Ein- und Ausgabe kann in jedem geeigneten, konsistenten und eindeutigen Format erfolgen. Nund Mwird immer im Bereich (einschließlich) liegen [0, 255](8-Bit-Ganzzahlen ohne Vorzeichen), und ihre binären Darstellungen sollten auf 8 Bits aufgefüllt werden, um die binäre Faltung durchzuführen.

Testfälle

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
Mego
quelle
Ich denke der Titel ist falsch. es sollte "Binary Revolution" sein :)
RudolfJelin

Antworten:

4

JavaScript (ES6), 31 Byte

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

Python 2, 35 Bytes

lambda m,n:n^m&(n^n*257/2^n*2^n>>7)
xnor
quelle
Scheint nicht zu funktionieren n=255?
Neil
@ Neil Guter Fang. Ich sehe keinen guten Weg, das mit Mod zu umgehen, stattdessen um ein zusätzliches Byte zu verschieben.
Xnor
2

J, 34 Bytes

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

Einfacher Ansatz, der den in der Herausforderung definierten Prozess anwendet. Übernimmt die Eingabe als Array [n, m].

Formen sieben smileys, [:, :(, :1, (8, 8#,#: , und :].

Verwendung

   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
Meilen
quelle
Irgendwas muss falsch sein, wenn J das gleiche Ergebnis wie Python erzielt: D
PurkkaKoodari
2

x64-Maschinencode, 17 Byte

88CD88C8D0C9D0C530E930C120D130C8C3

Zerlegt:

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

Geeignet für die Win64-Aufrufkonvention (Argumente in rcx, rdx).

Harold
quelle
1

Haskell, 66 Bytes

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

Funktioniert beim Aufrufen mit Word8Daten wie vorgesehen . Ersetzen Sie (255-m)durch complement m(+5 Byte), damit die Funktion mit jedem vorzeichenlosen ganzzahligen Datentyp funktioniert.

Angs
quelle