7 , 2 बाइट्स
7 एक 3-बिट वर्ण सेट का उपयोग करता है, लेकिन इनपुट बाइट्स में पैक किया जाता है (और मेटा के अनुसार, उप-बाइट चरित्र सेट के साथ भाषाओं को डिस्क पर फ़ाइल के लिए बाइट्स का उपयोग करके गिना जाता है )। यहाँ xxdकार्यक्रम का एक डंप है:
00000000: 4cf4 L.
इस फ़ाइल को 7 दुभाषिया को देते समय, यह निम्न प्रोग्राम को आउटपुट करेगा:
00000000: 4fa6 7f O..
जो फिर से मूल कार्यक्रम को फिर से आउटपुट देगा।
तो यहाँ क्या हो रहा है? इसमें कोई स्रोत शामिल नहीं है (वास्तव में, मुझे नहीं लगता कि स्रोत को 7 में पढ़ना संभव है), हालांकि यकीनन कार्यक्रम दूसरे तरीके से धोखा दे रहा है; आप क्या सोचते हैं मुझे बताओ। यहां बताया गया है कि प्रोग्राम कैसे काम करता है। (ध्यान दें कि प्रत्येक 7 कमांड के दो संस्करण हैं, जिनमें से कुछ के नाम नहीं हैं और मूल कार्यक्रम में दिखाई नहीं दे सकते हैं। छह जोड़ों में कुल बारह कमांड हैं। मैं सक्रिय कमांड के लिए बोल्ड का उपयोग कर रहा हूं, निष्क्रिय के लिए नॉनबॉल्ड। आदेश, और ऐसे मामलों में जहां सक्रिय आदेश कोई नाम नहीं है, मैं इसे इसी निष्क्रिय आदेश के रूप में एक ही नाम दे रहा हूँ और बोल्ड भेद करने के लिए पर भरोसा करता है। इस मामले में जहां दोनों नाम हैं, जैसे में 7जिनमें से सक्रिय संस्करण है 1, प्रत्येक कमांड का अपना नाम है और बोल्ड सिंटैक्स हाइलाइटिंग है।)
231 7 23 मूल कार्यक्रम, ऑक्टल में अनपैकस्टैक पर
231 पुश 237
23 पुश 23 ढेर पर
(निहित) कार्यक्रम में स्टैक के शीर्ष की एक प्रति संलग्न करें
स्टैक के 2 डुप्लिकेट शीर्ष (वर्तमान में 23 )
3 स्टैक का आउटपुट टॉप, पॉप सेकंड स्टैक तत्व
इस बिंदु पर, 7 दुभाषिया देखता है कि स्टैक के शीर्ष में कमांड ( 2और 3) हैं जो प्रतिनिधित्व योग्य नहीं हैं, इसलिए यह स्टैक के शीर्ष से बच जाता है, उत्पादन 723(जो है)। पहला कमांड आउटपुट आउटपुट फॉर्मेट का चयन करता है; इस मामले में, यह प्रारूप 7 है, "आउटपुट को उसी तरह प्रारूपित करें जैसे प्रोग्राम"। इसलिए कमांड्स आउटपुट को बाइट्स में पैक करते हैं। फिर कार्यक्रम जारी है:
२३१ 7 २३ २३
(निहित) कार्यक्रम में स्टैक के शीर्ष की एक प्रति संलग्न करें
स्टैक के 2 डुप्लिकेट टॉप (वर्तमान में 237 )
स्टैक के 3 आउटपुट टॉप, पॉप सेकंड स्टैक एलिमेंट
7 स्टैक पर एक खाली तत्व पुश करें
इस बिंदु पर, स्टैक पर खाली स्टैक तत्वों के अलावा कुछ भी नहीं है, इसलिए प्रोग्राम बाहर निकलता है। हम 23पहले आउटपुट करते हैं । यदि हम बच जाते हैं 237(और हमें करना है, क्योंकि इसमें अप्रमाणित आदेश शामिल हैं), हमें मिलता है 7231। यह सीधे आउटपुट प्राप्त करता है, जिससे प्रोग्राम का अंतिम आउटपुट 237231( प्रोग्राम के रूप में उसी तरह स्वरूपित होता है, अर्थात बाइट में पैक किया जाता है)। वह है 4fa67f। (यह ध्यान दिया जा सकता है कि 1आउटपुट को प्रभावित करने के मामले में पूरी तरह से व्यर्थ था, केवल यही कारण है कि दोनों कार्यक्रमों को अलग-अलग बनाना है।)
रनिंग 237231लगभग उसी तरह से आगे बढ़ता है; अंतर यह है कि बेकार 1पहले प्रिंट के बाद ही चलता है (और खाली तत्व को दूसरी बार प्रोग्राम के वर्तमान छोर तक पहुंचने पर अंतर्निहित रूप से हटा दिया जाता है)। फिर से, 231समाप्त होता है खुद को outputting, 23समाप्त होता है outputting खुद को एक से पहले 7, और हम प्राप्त करते हैं 231723, मूल कार्यक्रम।
पर्यवेक्षक यह ध्यान दे सकते हैं कि भाषा के "मूल" अष्टक में समान लंबाई होने के बावजूद दोनों कार्यक्रम डिस्क पर अलग-अलग लंबाई के हैं। ऐसा इसलिए है क्योंकि एक 7 प्रोग्राम को 1 बिट्स की एक मनमानी संख्या के साथ गद्देदार किया जा सकता है, और पैक्ड प्रारूप अनुगामी पैडिंग को छोड़ देता है। यहां बताया गया है कि एन्कोडिंग कैसे होती है:
2 3 1 7 2 3
010011001111010011(1...)
4 c f 4 padding
दूसरे शब्दों में, दो बाइट्स, 4C F4कार्यक्रम का प्रतिनिधित्व करने के लिए पर्याप्त हैं, इसलिए यह सब मैंने उपयोग किया है।