7 , 9 बाइट्स, क्रैक
यह कार्यक्रम गैर-वर्णों से भरा है, इसलिए यहां एक हेक्सडंप है:
00000000: 2573 dc01 7e13 dcb6 1f %s..~....
नोट: यह एक संख्यात्मक इनपुट दिनचर्या का उपयोग करता है जो नकारात्मक संख्याओं को इनपुट करने में असमर्थ है, इसलिए यह सबमिशन केवल नॉनवेजेटिव पूर्णांक तक ही सीमित है।
पुलिस और लुटेरों की चुनौतियों के साथ एक समस्या यह है कि आप कोड के स्पष्टीकरण नहीं लिखते हैं (दरार करने के लिए इसे कठिन बनाने के लिए)। दूसरी ओर, इसका मतलब यह है कि मुझे यहाँ परेशानी में नहीं जाना है।
मैंने 7 को भाषा के रूप में चुना, क्योंकि विशेष रूप से इसकी संकुचित संकेतन में, यह पढ़ना बहुत कठिन है, और मैं यह नहीं देखता कि यह केवल मुझे ही क्यों होना चाहिए , जिसमें लिखे गए 8-बिट कार्यक्रमों को घूमने की परेशानी में जाना पड़ता है 3-बिट एन्कोडिंग। सौभाग्य!
व्याख्या
अब जब प्रोग्राम टूट गया है (जानवर बल से, दुर्भाग्य से; यह हमेशा इन छोटे समाधानों में एक खतरा है), मैं यह भी समझा सकता हूं कि मुझे क्या मिल रहा था। यह वास्तव में कार्यक्रम को पढ़ने के द्वारा काफी हल करने योग्य था; मैं इसे और अधिक कठिन बना सकता था, लेकिन यह एक बुरा विचार की तरह महसूस किया जब जानवर-बल दरारें मौजूद थीं।
हम अधिक प्राकृतिक एन्कोडिंग में प्रोग्राम का प्रतिनिधित्व करके शुरू करेंगे। ; हमेशा की तरह, बोल्ड संख्या आदेशों को तुरंत चलाने के (जिनमें से नहीं सब एक कार्यक्रम में प्रदर्शनीय हैं संकेत मिलता है 6और 7कर रहे हैं, लेकिन 2करने के लिए 5, unbolded संख्या उनके भाग निकले समकक्ष (का प्रतिनिधित्व नहीं कर रहे हैं) 0के लिए 5, जो सभी के मूल कार्यक्रम में प्रदर्शनीय हैं, टिप्पणी वह 0बच गया है 6और 1बच गया है 7):
112 7 1 7 34002 77 023 67 13303
7 प्रोग्राम स्रोत में उपलब्ध आदेशों के सेट का मतलब है कि यह मूल रूप से सिर्फ एक शाब्दिक है जो मूल स्टैक का प्रतिनिधित्व करता है (ऐसा कुछ नहीं है जो आप केवल बच गए आदेशों के साथ कर सकते हैं, 6और 7)। तो पहली बात यह है कि एक कार्यक्रम है स्टैक पर सामान का एक गुच्छा धक्का होगा। यहां बताया गया है कि कार्यक्रम के चलने के बाद स्टैक कैसा दिखता है ( |स्टैक तत्वों को अलग करता है, हमेशा की तरह 7 में):
772 | 7 | 34662 | 023 | 73,363
अंतिम स्टैक तत्व तब चलने के लिए कोड बनने के लिए कॉपी हो जाता है (स्टैक पर शेष रहते हुए)। जैसा कि ऐसा होता है, यह प्रोग्राम का एकमात्र हिस्सा है जो कोड है; बाकी सब सिर्फ डेटा है। यहां इसका अनुवाद किया गया है:
73,363
7 पुश ढेर पर एक खाली तत्व
3 आउटपुट शीर्ष ढेर तत्व, नीचे तत्व त्यागने
73 इन के संयुक्त प्रभाव: त्यागने शीर्ष ढेर तत्व
3 आउटपुट शीर्ष ढेर तत्व, त्यागने नीचे तत्व
6 शीर्ष ढेर तत्व एस्केप, तो 3 से नीचे के तत्व में जोड़ें
। शीर्ष स्टैक तत्व का उत्पादन करें, नीचे के तत्व को छोड़ दें
दूसरे शब्दों में, यह ज्यादातर I / O निर्देशों का एक गुच्छा है। आइए इसका विस्तार से विश्लेषण करें:
73को छोड़ देता है 73363ढेर के शीर्ष पर अभी भी बहुत कुछ है।
3आउटपुट 023और डिस्क्राइब करता है 34662। इस प्रकार यह देखा जा सकता है कि 34662एक टिप्पणी है, जिसका उपयोग कार्यक्रम के दूसरे संस्करण में आवश्यक बाइट्स को संग्रहीत करने के लिए किया गया था। 023जब आउटपुट क्या करता है, तो यह I / O प्रारूप 0 (पूर्णांक) का चयन करता है, तो 23एक निर्देश है जो किसी पूर्णांक को इनपुट करने के लिए कार्यान्वयन का अनुरोध करता है (7 में, आप इनपुट को आउटपुट करने वाले विशिष्ट कोड के माध्यम से इनपुट करते हैं)। इनपुट नीचे स्टैक तत्व की प्रतियां बनाकर किया जाता है, उदाहरण के लिए यदि इनपुट पूर्णांक 10 है, तो अगला स्टैक तत्व (वर्तमान में 7) बन जाएगा 7777777777। इस प्रकार, हम दशमलव में उपयोगकर्ता से इनपुट स्वीकार कर रहे हैं, लेकिन इसे यूरीरी के रूप में संग्रहीत किया जा रहा है।
6शीर्ष ढेर तत्व निकल जाता है (के प्रत्येक उदाहरण के बदलते 7करने के लिए 1, यह है कि कैसे की पूरी तरह से मिलकर तार 7रों भाग निकले कर रहे हैं), तो इससे पहले कि ढेर तत्व करने के लिए इसे संलग्न कर देता है ( 772)। तो हमारा डेटा अब कुछ ऐसा है 7721111111111।
- अंत में,
3प्रश्न में स्टैक तत्व को आउटपुट करता है (और एक खाली स्टैक तत्व को पॉप करता है जो डिफ़ॉल्ट प्रारंभिक स्टैक का हिस्सा है)। अपने मूल्य की संख्या निकालकर किया जाता है 1और 7है, और की संख्या को घटाकर 0और 6रों। ( 2बीच में ज्यादातर मामलों में नजरअंदाज कर दिया जाता है; अगर यह स्ट्रिंग के अंत में है, तो इसे नजरअंदाज किए जाने के बजाय एक नई रूपरेखा बन जाएगी, लेकिन PPCG के नियमों की परवाह नहीं है।) इस प्रकार, आउटपुट मूल है। इनपुट प्लस २
इस बिंदु पर, स्टैक पर कुछ भी उपयोगी नहीं है और प्रोग्राम में कुछ भी नहीं है, इसलिए प्रोग्राम बाहर निकलता है।
हम इसे कैसे उल्टा करते हैं? यह 11करने के लिए बदलने का एक सरल मामला है 00, ताकि हम पात्रों को इनपुट करने के लिए तैयार कर रहे हैं जो इसे 2 से कम करते हैं, बजाय 2 से अधिक। 00कार्यक्रम में आगे एक सुविधाजनक रूप से छिपे हुए आठ अष्टक अंक हैं (ताकि अष्टक अंक और बाइट्स एक दूसरे के साथ पंक्तिबद्ध हों), इसलिए हम इसे 11शुरू में ही स्वैप कर सकते हैं ।