हर मिलीसेकंड में पृथ्वी और पड़ोसी आकाशगंगाओं के बीच अरबों-खरबों संदेश आते-जाते हैं। लेकिन इतनी लंबी दूरियों तक संदेश भेजना आसान नहीं है। संदेश भेजते समय परेशान करने वाली सौर ज्वालाएँ, समय की विकृतियाँ, भटके हुए बल, और यहाँ तक कि अंतरिक्ष की किसी तितली के पंख की एक फड़फड़ाहट भी किसी भी बिट को बेतरतीब ढंग से बदल सकती हैं।
अब सोचिए, इसके क्या नतीजे हो सकते हैं:
बिगड़े हुए संदेशों को पकड़ना सिर्फ़ महत्वपूर्ण नहीं है, यह अत्यंत ज़रूरी है। कुछ गड़बड़ होने पर कोई आपदा आने से पहले प्राप्तकर्ता को अवश्य ही पता चलना चाहिए।
लेकिन कैसे? पूरे ब्रह्मांड के वैज्ञानिक और इंजीनियर युगों से इस समस्या से जूझ रहे हैं। पूरे ब्रह्मांडीय AI सुपरक्लस्टर डेटा को खंगालते रहते हैं। और फिर, एक दिन, एक किंवदंती फिर से सामने आती है। एक पुराना, शक्तिशाली तरीका, जिसकी चर्चा डीबगिंग फोरम में फुसफुसाहट में होती है, और जिसे ऐसे इंजीनियर बड़बड़ाते हैं जिन्होंने बहुत कुछ देख लिया है...
पैरिटी बिट!
इतना आसान, इतना शक्तिशाली तरीका, कि यह अंतरतारकीय संचार को शायद बचा ही ले।
आपको इन दो चीज़ों को बनाने में मदद करनी है:
पैरिटी बिट ट्रांसमिशन में होने वाली एरर पकड़ने का एक आसान तरीका है।
ट्रांसमीटर और रिसीवर एक बार में ठीक आठ बिट ही भेज और प्राप्त कर सकते हैं (पैरिटी बिट समेत)।
पैरिटी बिट इस तरह सेट किया जाता है कि हर ट्रांसमिशन में 1 बिट की संख्या सम हो, और पैरिटी बिट हमेशा दाएँ से पहला बिट होता है।
तो अगर रिसीवर को 11000001, 01110101 या 01000000 मिलता है (यानी ऐसा ट्रांसमिशन जिसमें 1 बिट की संख्या विषम है), तो उसे पता चल जाता है कि कोई एरर है।
लेकिन संदेश इतने छोटे कम ही होते हैं, और जब वे लंबे होते हैं तो उन्हें एक सीक्वेंस में भेजना पड़ता है।
उदाहरण के लिए, इस संदेश को देखिए: 11000000 00000001 11000000 11011110 (या हेक्स में C0 01 C0 DE)।
चूँकि हर ट्रांसमिशन में ठीक आठ बिट होते हैं, इसमें केवल सात बिट डेटा और पैरिटी बिट ही हो सकते हैं। इसलिए डेटा के हर सात बिट के बाद एक पैरिटी बिट डालना ज़रूरी है:
11000000 00000001 11000000 11011110
↑ ↑ ↑ ↑ (7th bits)
इस संदेश का ट्रांसमिशन सीक्वेंस ऐसा दिखता है:
1100000_ 0000000_ 0111000_ 0001101_ 1110
↑ ↑ ↑ ↑ (parity bits)
सीक्वेंस के पहले ट्रांसमिशन का डेटा (1100000) दो 1 बिट रखता है (सम संख्या), इसलिए पैरिटी बिट 0 है।
पहला ट्रांसमिशन 11000000 बन जाता है (या हेक्स में C0)।
अगले ट्रांसमिशन का डेटा (0000000) शून्य 1 बिट रखता है (फिर से सम संख्या), इसलिए पैरिटी बिट फिर 0 है।
इस तरह दूसरा ट्रांसमिशन 00000000 बन जाता है (या हेक्स में 00)।
अगले दो ट्रांसमिशन का डेटा (0111000 और 0001101) तीन 1 बिट रखता है।
इनके पैरिटी बिट 1 सेट किए जाते हैं ताकि ट्रांसमिशन में 1 बिट की संख्या सम हो।
इन्हें 01110001 और 00011011 के रूप में भेजा जाता है (या हेक्स में 71 और 1B)।
अंतिम ट्रांसमिशन (1110) में केवल चार बिट डेटा है।
चूँकि एक बार में ठीक आठ बिट भेजे जाते हैं और पैरिटी बिट सबसे दाएँ बिट होता है, तीन 0 बिट और उसके बाद पैरिटी बिट जोड़कर आठ बिट पूरे किए जाते हैं।
अब यह ऐसा दिखता है (जहाँ _ पैरिटी बिट है):
1110 000_
↑↑↑ (added 0 bits)
यहाँ फिर 1 बिट की संख्या विषम है, इसलिए पैरिटी बिट 1 है।
सीक्वेंस का अंतिम ट्रांसमिशन 11100001 बन जाता है (या हेक्स में E1)।
इस संदेश का पूरा ट्रांसमिशन सीक्वेंस 11000000 00000000 01110001 00011011 11100001 है (या हेक्स में C0 00 71 1B E1)।
Exercism पर साइन अप कीजिए और ARM64 Assembly को 78 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।