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
शुरू में ही स्वैप कर सकते हैं ।