zsh, 603 594 566 561 548 440 415 399 378 370 बाइट्स
ec
ho \\n;ca t<<<$'\x20';exi t
d$c -e8BC6P
d0c -eKp
$'\172\163\150' $'\055\143' $'\146\157\162 v \151\156 \173\043\056\056\134\175\175\073\173 \146\147\162\145\160 \055\161 $\166 '$0$'\174\174\074\074\074$\166\073\175'
$'\145v\141\154' $':\073\072\046\046\145\170\151\164';#%&()*+,/9=>?@ADEFGHIJLMNOQRSTUVWXYZ[]^_`jklmsuwy
0# $#;for b in {$..z};{ fgrep -q $b $0||<<<$b;}
Coreutils + पर निर्भर करता है dc।
इसे ऑनलाइन आज़माएं!
वह था ... एक यात्रा।
इस उत्तर के तीन भाग हैं। पहली 4 लाइनें कुछ विशेष मामलों को संभालती हैं जो कोड को सरल बनाते हैं। अगली 2 पंक्तियाँ और अंतिम पंक्ति दोनों अनिवार्य रूप से एक ही चीज़ को पूरा करते हैं, लेकिन वास्तव में किसी भी चरित्र को हटाने के साथ चलाया जाता है। वे ज्यादातर पूरक चरित्र सेटों के साथ लिखे गए हैं, ताकि किसी भी चरित्र को हटाने से अधिकतम एक ही टूटता है, जिससे दूसरे को कार्य करना जारी रखने की अनुमति मिलती है।
पहले भाग को देखते हुए, हम पहले संभालते हैं
- साथ नई हटाने
ec\nho \\n
- अंतरिक्ष हटाने के साथ
ca t<<<$'\x20'(बाद में exi tचलने वाले कोड से बचने के लिए, जिसके परिणामस्वरूप बाहरी उत्पादन होगा)
$d$c -e8BC6P( 8BC6= 9226है 36*256 + 10, और 36 और 10 के साथ हटाने के $क्रमशः और newline वर्ण के बाइट मान हैं; हम लाइन 6 में बड़ी टिप्पणी में उन्हें शामिल करने से बचने के लिए दशमलव में हेक्स अंक का उपयोग करते हैं)
0हटाने के साथ d0c -eKp( Kदशमलव सटीक मिलता है, जो 0डिफ़ॉल्ट रूप से है)
अगले भाग में, उपयोग किए जाने वाले एकमात्र वर्ण (दूसरी पंक्ति के अंत में कचरे से अलग) $'\01234567v;, स्थान और नई रेखा हैं । इनमें से चार का हिसाब किया गया है, इसलिए शेष ( '\1234567v) अंतिम पंक्ति में नहीं हो सकता है। ऑक्टेल का विस्तार करना ( $'\123'मूल्य 123 8 के साथ ASCII वर्ण का प्रतिनिधित्व करता है ), हमें मिलता है:
zsh -c 'for v in {#..\}};{ fgrep -q $v '$0'||<<<$v;}'
eval ':;:&&exit'
पहली पंक्ति कार्यक्रम में उपयोग किए गए सभी वर्णों के माध्यम से लूप करती है और अपने स्वयं के स्रोत कोड में प्रत्येक को खोजती है ( $0जो स्क्रिप्ट का फ़ाइल नाम चलाया जा रहा है), किसी भी वर्ण को प्रिंट करना जो कि नहीं मिला है।
दूसरी पंक्ति थोड़ी अजीब लगती है, और ऐसा ही प्रतीत होता है जैसे कि exitनोड्स का एक गुच्छा। हालांकि, exitऑक्टल के रूप में सीधे एन्कोडिंग में परिणाम होता है $'\145\170\151\164', जिसमें शामिल नहीं है 2या 3। हमें वास्तव में इसे हटाने के लिए कम लचीला बनाने की आवश्यकता है । ऐसा इसलिए है क्योंकि यदि किसी '\014567vको हटा दिया जाता है, तो पहली पंक्ति को तोड़कर, दूसरी पंक्ति भी टूट जाती है, जिससे शेष कोड निष्पादित हो जाता है। हालांकि, हमें इसकी आवश्यकता है कि अगर इसे हटा दिया जाए 2या 3हटा दिया जाए ताकि 3 और 4 लाइनें चल सकें। इस में shoehorning द्वारा पूरा किया है :और ;, जो उनके अष्टाधारी प्रतिनिधित्व में क्रमश: एक 2 और 3 की है।
लाइन 2 के अंत में कबाड़ बस यह सुनिश्चित करने के लिए है कि प्रत्येक मुद्रण योग्य ASCII वर्ण कम से कम एक बार दिखाई देता है, जिस तरह से प्रत्येक के माध्यम से लूपिंग करके चेकिंग की आवश्यकता होती है।
यदि exitपहले खंड में नहीं बुलाया गया था (अर्थात यह एक को हटाने के द्वारा मंगाई गई थी '\01234567v), हम दूसरे पर चलते हैं, जिसमें हमें इन वर्णों का उपयोग किए बिना एक ही चीज़ को पूरा करना होगा। अंतिम पंक्ति डिकोड की गई पहली पंक्ति के समान है, सिवाय इसके कि हम कुछ बाइट्स को बचाने के लिए लूप की सीमा को अनुबंधित कर सकते हैं, क्योंकि हम पहले से ही जानते हैं कि सभी पात्रों को '\01234567vकवर किया गया है। इसके 0# $#पहले यह भी है , जो इसे टिप्पणी करता है और यदि इसे हटा दिया गया है 0या इसे बाहरी उत्पादन से रोकता $है।