बाइनरी कन्वोक्यूशन


15

एक बाइनरी कन्वेंशन को एक संख्या द्वारा वर्णित किया जाता है M, और एक संख्या पर लागू किया जाता है N। प्रत्येक बिट के लिए बाइनरी प्रतिनिधित्व में M, यदि बिट सेट है ( 1), आउटपुट में संबंधित बिट को संबंधित बिट में समीपस्थ दो बिट्स XORing द्वारा दिया जाता है N(आवश्यक होने पर चारों ओर लपेटकर)। यदि बिट सेट नहीं है ( 0), तो आउटपुट में संबंधित बिट को संबंधित बिट द्वारा दिया जाता है N

काम किया उदाहरण (8-बिट मान के साथ):

  1. चलो N = 150, M = 59। उनके द्विआधारी प्रस्तुतिकरण (क्रमशः) 10010110और हैं 00111011
  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)।

चुनौती

दिया गया Nऔर 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

मुझे लगता है कि शीर्षक गलत है। यह "बाइनरी क्रांति" होना चाहिए :)
रुडोल्फजेलिन

जवाबों:


4

जावास्क्रिप्ट (ईएस 6), 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?
नील

@ नील अच्छा कैच। मैं एक अच्छा तरीका है कि आधुनिक के साथ, एक अतिरिक्त बाइट के बजाय स्थानांतरण के आसपास नहीं दिख रहा है।
xnor

2

जे, 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

disassembled:

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 कॉलिंग कन्वेंशन के लिए उपयुक्त (आरसीएक्स, आरडीएक्स में तर्क)।


1

हास्केल, 66 बाइट्स

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

जब Word8डेटा के साथ कहा जाता है, तब तक काम करता है । किसी भी अहस्ताक्षरित इंटीग्रल डेटाटाइप के साथ फ़ंक्शन को काम करने के लिए (+5 बाइट्स) के (255-m)साथ बदलें complement m

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.