पृष्ठभूमि
1870 में Bamile Baudot ने Baudot Code का आविष्कार किया , टेलीग्राफी के लिए एक निश्चित लंबाई का वर्ण एन्कोडिंग। उन्होंने कोड को केवल पांच कुंजी के साथ एक मैनुअल कीबोर्ड से दर्ज किया गया था; दो बाएं हाथ से संचालित हैं और तीन दाहिने हाथ से:
दाईं तर्जनी, मध्य और अनामिका क्रमशः I , II और
III कुंजी संचालित करती हैं, और बाईं तर्जनी और मध्य अंगुलियाँ IV और Ⅴ का संचालन
करती हैं । (इसके बाद मैं उनके पश्चिमी अरबी अंकों का उपयोग करूंगा, अर्थात
1 , 5 के माध्यम से ।) वर्णों को जीवा के रूप में दर्ज किया गया है। उदाहरण के लिए, "C" अक्षर दर्ज करने के लिए, ऑपरेटर 1 , 3 और 4 दबाता हैएक साथ चाबियाँ, जिसमें एक घूर्णन ब्रश हाथ अनुक्रम में प्रत्येक कुंजी को पढ़ता है और एक वर्तमान को प्रसारित करता है या, कुंजी के लिए उदास नहीं, वर्तमान नहीं। परिणाम, आधुनिक शब्दों में, 5-बिट कम-महत्वपूर्ण-बिट-पहले बाइनरी एन्कोडिंग है, जिसमें हमारा उदाहरण, "C," के रूप में एन्कोड किया गया है 10110
।
5 बिट्स ??
आप सोच रहे होंगे कि 5 बिट्स, जो कि अधिकांश 32 अद्वितीय प्रतीकों को व्यक्त कर सकते हैं, विराम चिह्न के बिना कुछ भी कहने के लिए सभी अंग्रेजी अक्षरों और अंकों के लिए पर्याप्त नहीं है। Baudot ने अपनी आस्तीन ऊपर चलाई थी, हालांकि: उनका चरित्र सेट वास्तव में दो अलग-अलग सेट हैं: पत्र और
आंकड़े , और उन्होंने उनके बीच स्विच करने के लिए दो विशेष कोड परिभाषित किए।
लेटर शिफ्ट , जो लेटर्स मोड में बदल जाता है, अकेले 5 कुंजी ( 00001
) दबाकर सक्रिय हो जाता है , और चित्रा शिफ्ट 4 कुंजी ( 00010
) के साथ सक्रिय हो जाती है
।
चुनौती
आपकी चुनौती एक प्रोग्राम या फ़ंक्शन लिखना है जो बॉडोट कोड प्रसारण को डिकोड करता है।
एक असली ट्रांसमिशन कुछ इनिशियलाइज़ेशन बिट्स के साथ शुरू होगा, साथ ही प्रत्येक कैरेक्टर के पहले और बाद में एक शुरुआत और थोड़ा सा रुक जाएगा, लेकिन हम उन्हें छोड़ देंगे और केवल प्रत्येक कैरेक्टर के लिए 5 यूनीक बिट्स की चिंता करेंगे। इनपुट और आउटपुट प्रारूप नीचे चर्चा की गई है।
बॉडोट का कोड
बॉडोट कोड के दो अलग-अलग संस्करण हैं: कॉन्टिनेंटल और यूके हम यूके संस्करण का उपयोग कर रहे हैं, जिसमें बॉडोट के मूल फ्रेंच से "ud" जैसे अक्षर शामिल नहीं हैं। हम यूके संस्करण के सभी प्रतीकों को भी छोड़ने जा रहे हैं जो मुद्रण योग्य ASCII वर्णों में से नहीं हैं। आपको केवल नीचे दी गई तालिका में पात्रों को डीकोड करना होगा, जिनमें से सभी मुद्रण योग्य ASCII वर्ण हैं अंतिम तालिका नियंत्रण वर्णों को छोड़कर जो तालिका के नीचे बताए गए हैं।
"Ltr" कॉलम वर्ण मोड में वर्ण दिखाता है और "Fig" चित्र मोड वर्ण दिखाता है:
Encoding Encoding
Ltr Fig 12345 Ltr Fig 12345
--- --- -------- --- --- --------
A 1 10000 P + 11111
B 8 00110 Q / 10111
C 9 10110 R - 00111
D 0 11110 S 00101
E 2 01000 T 10101
F 01110 U 4 10100
G 7 01010 V ' 11101
H 11010 W ? 01101
I 01100 X 01001
J 6 10010 Y 3 00100
K ( 10011 Z : 11001
L = 11011 - . 10001
M ) 01011 ER ER 00011
N 01111 FS SP 00010
O 5 11100 SP LS 00001
/ 11000
दाहिने कॉलम में अंतिम तीन पंक्तियाँ नियंत्रण वर्ण हैं:
ER
है मिटाना । Baudot की टेलीग्राफी मशीनें पाठक को यह बताने के लिए कि इस चरित्र के लिए तारांकन चिह्न जैसा प्रतीक प्रिंट करेगा कि पूर्ववर्ती चरित्र को अनदेखा कर दिया जाना चाहिए, लेकिन हम पाठक के लिए भी अच्छे होंगे और वास्तव में पूर्ववर्ती चरित्र को छोड़ना (प्रिंट नहीं करना) चाहते हैं । यह लेटर और फिगर मोड दोनों में समान है।FS
है चित्रा शिफ्ट । यह लेटर्स से लेकर फिगर तक सेट किए गए कैरेक्टर को स्विच करता है। यदि डिकोडर पहले से ही चित्रा मोड में है, तो एफएस को एक स्पेस (SP
"Ltr" कॉलम में एर्गो) के रूप में माना जाता है । जब डिकोडर फिगर मोड में होता है तो यह एलएस कैरेक्टर मिलने तक फिगर मोड में रहता है।LS
है पत्र शिफ्ट । यह फिगर से लेटर्स पर सेट कैरेक्टर को स्विच करता है। यदि डिकोडर पहले से ही लेटर मोड में है, तो एलएस को स्पेस के रूप में माना जाता है । जब लेटर मोड में डिकोडर लेटर मोड में रहता है जब तक कि FS वर्ण प्राप्त नहीं होता है।
डिकोडर हमेशा लेटर मोड में शुरू होता है।
यहाँ चित्र शिफ्ट, लेटर शिफ्ट और स्पेस के साथ एक उदाहरण दिया गया है:
01011 10000 00100 00001 00010 10000 11100 00001 10101 11010
M A Y LS/SP FS/SP 1 5 LS/SP T H
इससे संदेश मिलता है MAY 15TH
। जैसा कि आप देख सकते हैं, पहला 00001
(लेटर शिफ्ट / स्पेस) वर्ण स्पेस के रूप में कार्य करता है, क्योंकि डिकोडर पहले से ही लेटर मोड में है। अगला वर्ण, 00010
(चित्रा शिफ्ट / स्पेस) डिकोडर को प्रिंट करने के लिए चित्रा मोड में स्विच करता है 15
। फिर फिर से 00001
प्रकट होता है, लेकिन इस बार यह डिकोडर शिफ्ट के रूप में कार्य करता है ताकि डिकोडर को लेटर मोड में वापस रखा जा सके।
आपकी सुविधा के लिए, यहाँ एक प्रारूप में वर्ण हैं जो किसी संपादक में पचाने के लिए आसान है, कोड द्वारा क्रमबद्ध किया गया है:
A,1,10000|E,2,01000|/,,11000|Y,3,00100|U,4,10100|I,,01100|O,5,11100|FS,SP,00010|J,6,10010|G,7,01010|H,,11010|B,8,00110|C,9,10110|F,,01110|D,0,11110|SP,LS,00001|-,.,10001|X,,01001|Z,:,11001|S,,00101|T,,10101|W,?,01101|V,',11101|ER,ER,00011|K,(,10011|M,),01011|L,=,11011|R,-,00111|Q,/,10111|N,,01111|P,+,11111
इनपुट
इनपुट कम से कम महत्वपूर्ण-बिट-पहले क्रम में एक स्ट्रिंग, सरणी, या बिट्स की सूची होगी। प्रत्येक चरित्र को 5 बिट्स के एक पंचक द्वारा दर्शाया जाएगा। बिट्स किसी भी उचित प्रारूप में हो सकते हैं, उदाहरण के लिए, एक द्विआधारी स्ट्रिंग, 0
एस और 1
एस की एक सरणी , "0"
और "1"
पात्रों की एक स्ट्रिंग , एक बहुत बड़ी संख्या, आदि, जब तक यह सीधे प्रसारण के बिट्स के लिए मैप करता है।
प्रत्येक प्रसारण में कम से कम एक मुद्रण योग्य पंचक और अधिकतम 255 पंचक (मुद्रण योग्य या अन्यथा), यानी 5–1,275 बिट्स सम्मिलित होंगे।
इनपुट में केवल दो अनुमत अपवादों के साथ ट्रांसमिशन के बिट्स हो सकते हैं : 0
स्ट्रिंग इनपुट के लिए किसी भी संख्या में अग्रणी या अनुगामी बिट्स और / या, ट्रांसमिशन के लिए एक एकल अनुगामी न्यूलाइन जोड़ा जा सकता है। प्रत्येक पंचक के पहले या बाद में अग्रणी या अनुगामी बिट्स या वर्ण जोड़े नहीं जा सकते हैं , अर्थात आप प्रत्येक पंचक को 8 बिट्स में नहीं रख सकते हैं (या प्रत्येक पंचक को एक संख्या में एकल संख्या के रूप में ले सकते हैं - जब तक कि आपकी भाषा में 5-बिट पूर्णांक प्रकार या अलग नहीं है किसी भी अतिरिक्त बिट्स के साथ पंचक, जैसे "01111\n11100"
।
नोट और किनारे के मामले
ट्रांसमिशन में ऊपर तालिका में केवल "Ltr" और "अंजीर" कॉलम के पात्र होंगे। आप कभी भी उदाहरण
01110
के लिए चित्रा मोड में प्राप्त नहीं करेंगे , क्योंकि यह "अंजीर" कॉलम से अनुपस्थित है।यह माना जाता है कि डिकोडर हमेशा एक ट्रांसमिशन की शुरुआत में लेटर मोड में होगा। हालाँकि, पहला वर्ण चित्र मोड में तुरंत स्विच करने के लिए FS वर्ण हो सकता है।
जब डिकोडर लेटर मोड में होता है, तो वह एक LS कैरेक्टर प्राप्त कर सकता है, और जब वह फिगर मोड में होता है, तो वह FS कैरेक्टर प्राप्त कर सकता है। या तो घटना में एक स्पेस कैरेक्टर प्रिंट होना चाहिए (आउटपुट देखें)।
ईआर चरित्र एक ट्रांसमिशन में पहला चरित्र कभी नहीं होगा, न ही यह कभी भी एक एलएस, एफएस, या किसी अन्य ईआर का तुरंत पालन करेगा।
एक एफएस चरित्र तुरंत एक एलएस चरित्र का पालन कर सकता है और इसके विपरीत।
किसी भी ट्रांसमिशन में न तो एलएस और न ही एफएस चरित्र अंतिम चरित्र होगा।
/
और-
वर्ण या तो पत्र मोड (कोड में प्राप्त किया जा सकता है11000
और10001
, क्रमशः) या चित्रा मोड (10111
और00111
)।
उत्पादन
आउटपुट किसी भी उचित प्रारूप में हो सकता है, सबसे उचित ASCII (या UTF-8, जिसके लिए सभी प्रस्तुत वर्ण ASCII के समान हैं)। यदि आपका आउटपुट किसी अन्य एन्कोडिंग या स्वरूप में है, तो कृपया अपने उत्तर में इंगित करें।
टिप्पणियाँ
- अंतरिक्ष चरित्र (देखें 3. ऊपर) एक ASCII स्थान (0x20) या आपके एन्कोडिंग के समतुल्य होना चाहिए, अर्थात जब आप स्पेस बार दबाते हैं तो आपको क्या मिलता है।
जीतना
यह कोड-गोल्फ है । बाइट्स में सबसे छोटा कोड जीतता है।
प्रतिबंध
मानक खामियों को मना किया जाता है।
अनुगामी रिक्त स्थान और / या एकल अनुगामी न्यूलाइन की अनुमति है। रिक्त स्थान या अन्य वर्ण (जो संचरण का हिस्सा नहीं हैं) अस्वीकृत हैं।
आप किसी भी अंतर्निहित या लाइब्रेरी फ़ंक्शंस का उपयोग नहीं कर सकते हैं जो बॉडोट कोड (या इसके किसी वंशज, जैसे मरे कोड, आईटीए -1, आदि) को डिकोड करता है।
परीक्षण के मामलों
Input: 001101000010100111101110010101
Output: BAUDOT
Input: 11010010001001100011110111101111100
Output: HELLO
Input: 01011100000010000001000101000011100000011010111010
Output: MAY 15TH
Input: 0001000100010000001000001011101110011100101010010110101010001111100101
Output: 32 FOOTSTEPS
Input: 10110000110101011100111100001111011010000001101110
Output: GOLF
Input: 000100011000001111100000100010110111001100010110010000111111
Output: 8D =( :P
Input: 0000100001000010000100010001111011111011000011100010001
Output (4 leading spaces): -/=/-
00010
को SP
पत्र मोड, और FS
आंकड़ा मोड में सूचीबद्ध किया गया है । विवरण के अनुसार, यदि हम लेटर मोड में हैं और हमें कोड प्राप्त होता है 00010
, तो हमें फिगर मोड में शिफ्ट हो जाना चाहिए, लेकिन तालिका में मान दूसरे तरीके से प्रतीत होते हैं। इसके अलावा, इसके विपरीत 00001
।