2.}<@>%?<{>$"/\M!8;
पठनीय:
2 . }
< @ > %
? < { > $
" / \ M
! 8 ;
इसे ऑनलाइन आज़माएं!
यह शायद एक बाइट या दो द्वारा गॉकेटेड हो सकता है, लेकिन इसके लिए कुछ सही मायने में सरल लेआउट की आवश्यकता हो सकती है, जो कि ब्रूट बल के माध्यम से आसानी से मिल सकता है (भले ही इसे खोजने में लंबा समय लग सकता है)।
उच्च स्तरीय व्याख्या
कार्यक्रम ज्यादातर इस छद्मकोड का अनुसरण करता है:
while (read number is not zero)
{
if (number is even)
print number;
}
कौन सा दुरुपयोग करता है कि कैसे एक बार STDIN खाली होने पर हेक्सागोनी एक संख्या को पढ़ने की कोशिश करता है (यह एक शून्य देता है)। इस दृष्टिकोण के साथ आने में मदद के लिए मार्टिन का बड़ा धन्यवाद।
पूर्ण व्याख्या
मैं अभी भी टिमो की शानदार गूढ़ आईडीई पाने के लिए मोनो के साथ फिदा नहीं हुआ हूं हूं, इसलिए मैं मार्टिन पर कुछ उपयोगी सुंदर चित्रों के साथ प्रदान करने के लिए झुक गया हूं!
सबसे पहले, हेक्सागोनी में बुनियादी नियंत्रण प्रवाह पर थोड़ा प्राइमर। पहला निर्देश पॉइंटर (IP), जो इस कार्यक्रम में उपयोग किया जाने वाला एकमात्र है, षट्कोणीय स्रोत कोड के ऊपरी बाएँ से शुरू होता है, और दाईं ओर बढ़ना शुरू करता है। जब भी आईपी षट्भुज के किनारे को छोड़ता है, यह side_length - 1
पंक्तियों को षट्भुज के मध्य की ओर ले जाता है । चूँकि यह प्रोग्राम एक साइड लेंथ तीन षट्कोण का उपयोग करता है, ऐसा होने पर IP हमेशा दो पंक्तियों को आगे बढ़ाता है। एकमात्र अपवाद यह है कि यदि यह मध्य पंक्ति से हटता है, जहां यह सशर्त रूप से वर्तमान मेमोरी एज के मूल्य के आधार पर, षट्भुज के ऊपर या नीचे की ओर बढ़ता है।
अब सशर्त के बारे में थोड़ा सा। नियंत्रण प्रवाह के लिए हेक्सागोनी में केवल सशर्त हैं >
,<
और हेक्सागोन के मध्य किनारे। ये सभी एक निरंतर नियम का पालन करते हैं: यदि वर्तमान मेमोरी एज पर मान शून्य है या नकारात्मक नियंत्रण प्रवाह बाईं ओर चलता है और यदि सकारात्मक है तो नियंत्रण प्रवाह सही है। ब्रैकेट की तुलना में अधिक और कम आईपी साठ डिग्री के कोण पर पुनर्निर्देशित करता है, जबकि हेक्सागोन के किनारे आईपी को किस पंक्ति में नियंत्रित करते हैं।
हेक्सागोनी में एक विशेष मेमोरी मॉडल भी है, जहां सभी डेटा एक अनंत हेक्सागोनल ग्रिड के किनारों पर संग्रहीत किया जाता है। यह प्रोग्राम केवल तीन किनारों का उपयोग करता है: एक दो को स्टोर करने के लिए, एक वर्तमान में पढ़ी गई संख्या के लिए, और एक नंबर के लिए दो मोडुलो। यह कुछ इस तरह दिखता है:
Mod \ / Input
|
2
कार्यक्रम की व्याख्या के दौरान हम प्रत्येक बिंदु पर जहां हम स्मृति में हैं, ध्यान से बताने नहीं जा रहे हैं, इसलिए यदि आप स्मृति में हैं तो आप भ्रमित हो जाते हैं।
उस रास्ते से सभी के साथ, वास्तविक स्पष्टीकरण शुरू हो सकता है। सबसे पहले, हम 2 के साथ मेमोरी में "2" किनारे को आबाद करते हैं, फिर हम एक नो-ऑप को निष्पादित करते हैं और मेमोरी पॉइंटर को दाईं ओर ले जाते हैं ( 2.}
)।
अगला, हम मुख्य कार्यक्रम लूप शुरू करते हैं। हमने STDIN से पहला नंबर पढ़ा और फिर हमने एक सशर्त ( ?<
) मारा । यदि एसटीडीआईएन में कोई संख्या शेष नहीं है, तो यह वर्तमान मेमोरी एज में एक शून्य पढ़ता है, इसलिए हम बाईं ओर मुड़ते हैं @
, जो प्रोग्राम को समाप्त करता है। अन्यथा, हम एक दर्पण को उछाल देते हैं, मेमोरी पॉइंटर को पीछे की ओर ले जाते हैं और बाईं ओर, हेक्सागोन के चारों ओर लपेटते हैं ताकि इनपुट को 2 से विभाजित करने के शेष की गणना करें और फिर एक और सशर्त ( /"%>
) मारा ।
यदि शेष एक था (यानी संख्या विषम थी), हम नीले रास्ते का अनुसरण करते हुए ऊपर की ओर मुड़ते हैं और फिर से नो-ऑप को निष्पादित करके शुरू करते हैं, फिर हम षट्भुज के निचले भाग में लपेटते हैं, वर्तमान किनारे को 10 से गुणा करते हैं और फिर जोड़ते हैं आठ, एक जोड़े दर्पण से उछाल, एक ही गुणा और इसके अलावा फिर से करें, वर्तमान किनारे पर 188 प्राप्त करना, षट्भुज के शीर्ष पर वापस चारों ओर लपेटना, नो-ऑप को फिर से निष्पादित करना, और अंत में कार्यक्रम को समाप्त करना ( .8/\8.@
)। यह परिणामी परिणाम एक सुखद दुर्घटना थी, मैंने मूल रूप से बहुत सरल तर्क लिखा था, लेकिन ध्यान दिया कि मैं इसे नो-ऑप के पक्ष में हटा सकता था, जो मुझे लगा कि हेक्सागोनी की भावना में अधिक था।
यदि शेष शून्य था, तो हम इसके बजाय लाल पथ के ऊपर, बाएँ मुड़ते हैं। यह हमें मेमोरी पॉइंटर को बाईं ओर ले जाने का कारण बनता है, और फिर वहां मूल्य (इनपुट मान) को एक संख्या के रूप में प्रिंट करता है। जिस दर्पण से हमारा सामना होता है, वह उस दिशा के कारण नो-ऑप के रूप में कार्य करता है, जो हम चल रहे हैं ({/!
)। फिर हम षट्भुज के किनारे से टकराते हैं, जो केवल एक परिणाम के साथ एक सशर्त कार्य करता है, क्योंकि पहले से इनपुट मान सकारात्मक होने के लिए पहले से ही परीक्षण किया गया था, इसलिए हम हमेशा सही की ओर बढ़ते हैं (यदि आप खुद को आईपी की दिशा में सामना करने की कल्पना करते हैं) । हम 10 से कई इनपुट करते हैं और दो जोड़ते हैं, केवल दिशा बदलने के लिए, चारों ओर लपेटते हैं और कैपिटल लेटर M, 77 के एससीआई मूल्य के साथ नए मूल्य को ओवरवेट करते हैं। फिर हम कुछ दर्पणों को मारते हैं, और बीच के किनारे से बाहर निकलते हैं एक trampoline के साथ षट्भुज (2<M\>$
)। चूंकि 77 सकारात्मक है, हम सही हेक्सागोन के नीचे की ओर बढ़ते हैं और ट्रम्पोलिन के कारण पहला निर्देश छोड़ते हैं ( !
)। हम तब वर्तमान मेमोरी एज को 10 से गुणा करते हैं और 8 जोड़ते हैं, 778 हो रहे हैं। हम फिर एएससीआईआई कैरेक्टर के रूप में इस वैल्यू मॉड 256 (10) को आउटपुट करते हैं, जो न्यूलाइन होता है। अंत में हम षट्भुज से बाहर निकलते हैं और पहले के आसपास वापस लपेटते हैं ?
जो अगले इनपुट मूल्य के साथ 778 से आगे निकल जाता है ।