मार्क माय मेल चैलेंज में आपकी मदद के लिए धन्यवाद , PPCG-Post ने अपने सभी पार्सल को उत्पन्न बारकोड के साथ सफलतापूर्वक बंद कर दिया है!
अब, उन्हें डिकोड करने का समय आ गया है।
इस चुनौती में आपके प्रोग्राम ने मार्क माय मेल चैलेंज से उत्पन्न बारकोड दिया , इसे डिकोड किया और एन्कोडेड पूर्णांक वापस लौटाया।
लेकिन बाहर देखो! बारकोड उल्टा हो सकता है ...
4-राज्य बारकोड
मामले में आप एन्कोडिंग चुनौती से चूक गए, आपको यह जानना होगा कि हम किस तरह के बारकोड के बारे में बात कर रहे हैं। 4-राज्य बारकोड चार संभावित राज्यों के साथ बार की एक पंक्ति है, प्रत्येक आधार -4 पूर्णांक का प्रतिनिधित्व करता है:
| |
Bar: | | | |
| |
Digit: 0 1 2 3
ASCII में रेंडर किया गया, बारकोड पाठ के तीन पंक्तियों को उठाएगा, |
एक बार के भाग का प्रतिनिधित्व करने के लिए पाइप ( ) वर्ण और एक खाली खंड का प्रतिनिधित्व करने के लिए एक स्थान ( ) का उपयोग करेगा। प्रत्येक बार के बीच एक एकल स्थान होगा। एक उदाहरण बारकोड इस तरह दिख सकता है:
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
बारकोड को पूर्णांक में परिवर्तित करने के लिए जो इसे एनकोड करता है, प्रत्येक बार को इसके संबंधित बेस -4 अंक पर मैप करें, इन्हें संक्षिप्त करें, और इसे दशमलव में बदलें।
जैसा कि प्रत्येक बारकोड उल्टा होने पर एक अलग बारकोड का भी प्रतिनिधित्व करता है, हम एक स्टार्ट / स्टॉप सीक्वेंस को लागू करते हैं ताकि ऑरिजन की गणना की जा सके। इस चुनौती के उद्देश्य के लिए, हम ऑस्ट्रेलिया पोस्ट द्वारा निर्दिष्ट स्टार्ट / स्टॉप अनुक्रम का उपयोग करेंगे: प्रत्येक बारकोड एक 1 0
अनुक्रम के साथ शुरू और समाप्त होता है ।
चुनौती
आपका कार्य, ASCII 4-स्टेट बारकोड दिया गया है, इसे पार्स करें और पूर्णांक को एनकोड करें - अनिवार्य रूप से मार्क माय मेल के पीछे ।
लेकिन चीजों को मसाला देने के लिए, एक पकड़ है - बारकोड को उल्टा दिया जा सकता है। वास्तविक दुनिया की तरह, यह बारकोड रीडर (आपका प्रोग्राम) पर छोड़ दिया जाएगा ताकि स्टार्ट / स्टॉप सीक्वेंस का उपयोग करके सही ओरिएंटेशन निर्धारित किया जा सके ।
उदाहरण:
निम्नलिखित बारकोड को देखते हुए:
| | | | | | | | | | | | | | | | | | | |
हम स्पष्ट रूप से देख सकते हैं कि अंकों के पहले और अंतिम जोड़े हैं 0, 2
और नहीं 1, 0
। इसका मतलब है कि बारकोड उल्टा है - इसलिए हमें सही ओरिएंटेशन प्राप्त करने के लिए इसे 180 डिग्री (प्रत्येक बार फ्लिप न करें) से घुमाना चाहिए :
| | | | | | | | | | | | | | | | | | | |
अब, हम डिकोडिंग शुरू कर सकते हैं। हम प्रत्येक बार को उसके संबंधित आधार -4 अंक पर मैप करते हैं, जो स्टार्ट / स्टॉप दृश्यों को अनदेखा करते हैं क्योंकि वे डेटा को एनकोड नहीं करते हैं।
| | | | | | | | | | | | | | | | | | | | - - 2 1 0 3 0 2 3 - -
हम इसे आधार -4 पूर्णांक तक पहुंचाते हैं 2103023
, फिर 9419
अंतिम परिणाम के लिए इसे अपने दशमलव प्रतिनिधित्व में परिवर्तित करते हैं ।
नियम
- इनपुट हमेशा एक मान्य, 4-स्टेट बारकोड होगा, जो एएससीआईआई में प्रदान किया गया है, जैसा कि ऊपर बताया गया है, वर्णित शुरुआत / स्टॉप सीक्वेंस के साथ।
- आप अनुगामी रिक्त स्थान, या छीनी गई लाइनों के साथ-साथ एक अनुगामी न्यूलाइन - जो भी प्रारूप आपके गोल्फ के अनुरूप हो, का अनुरोध कर सकते हैं।
- यह सही अभिविन्यास में हो सकता है या नहीं भी हो सकता है - आपके कार्यक्रम को निर्धारित करना चाहिए कि क्या इसे उल्टा पढ़ना है, प्रारंभ / रोक अनुक्रम का उपयोग करके।
- यह आधार -4 पूर्णांक में प्रमुख शून्य अंकों को एनकोड नहीं करेगा।
- आप इनपुट को लाइनों की एक सूची के रूप में ले सकते हैं, या न्यूलाइन्स के साथ एक स्ट्रिंग।
- आउटपुट आपकी भाषा के मानक पूर्णांक आधार में एक पूर्णांक होना चाहिए, बारकोड द्वारा एन्कोड किए गए डेटा का प्रतिनिधित्व करता है।
- जैसा कि डाक टिकट छोटे होते हैं और उन पर बहुत कम कोड फिट कर सकते हैं, आपके कोड को यथासंभव छोटा होना होगा: यह एक कोड-गोल्फ है - इसलिए सबसे छोटा प्रोग्राम (बाइट्स में) जीतता है!
परीक्षण के मामलों
| | | | | | | | | | | | | |
= 4096 (फ़्लिप)
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
= 7313145 (फ़्लिप)
| | | | | | | | | | | | | | | | | | | |
= 9419 (फ़्लिप)
| | | | | | | | | | | | | | | | | | |
= 990 (फ़्लिप नहीं)
| | | | | | | | | | | | | | | | | | |
= 12345 (फ़्लिप नहीं)
[String]
, [{#Char}]
, [{Char}]
, [[Char]]
?, यह देखते हुए कि String
बराबर करने के लिए है{#Char}