sed, 367 (स्रोत कोड बाइट्स) + 532 (स्रोत कोड के लिए मैचस्टिक्स की राशि) = 899
s/[^0-9a-jln-suxyz]//Ig;/^$/{s/.*/0/;b};s/.+/&; %1ir %%7lnu %%%4cfhjoy %%%%235bdegpqsxz %%%%%069a %%%%%%8/;:1;s/([^% ])(.+ (%+)[^ ]*\1)/%\3 \2/I;/ ;/!b1;s/;.+//;s/^/,;/;:2;s/(;[^%]*)(%+)/\2\1/;:3;s/,%{10}/%,/;s/^%/,&/;/%{10}/b3;/;.*%/b2;:4;s/,[;,]/,0,/;/,[;,]/b4;s/%{9}/9/g;s/%{8}/8/g;s/%{7}/7/g;s/%{6}/6/g;s/%{5}/5/g;s/%%%%/4/g;s/%%%/3/g;s/%%/2/g;s/%/1/g;s/[^0-9]//g
इसे ऑनलाइन आज़माएं
बहु-पंक्ति संस्करण:
s/[^0-9a-jln-suxyz]//Ig
/^$/{s/.*/0/;b}
s/.+/&; %1ir %%7lnu %%%4cfhjoy %%%%235bdegpqsxz %%%%%069a %%%%%%8/
:1
s/([^% ])(.+ (%+)[^ ]*\1)/%\3 \2/I
/ ;/!b1
s/;.+//
s/^/,;/
:2
s/(;[^%]*)(%+)/\2\1/
:3
s/,%{10}/%,/
s/^%/,&/
/%{10}/b3
/;.*%/b2
:4
s/,[;,]/,0,/
/,[;,]/b4
s/%{9}/9/g
s/%{8}/8/g
s/%{7}/7/g
s/%{6}/6/g
s/%{5}/5/g
s/%%%%/4/g
s/%%%/3/g
s/%%/2/g
s/%/1/g
s/[^0-9]//g
स्पष्टीकरण:
उपरोक्त स्क्रिप्ट लाइन द्वारा मानक इनपुट लाइन पढ़ती है (पैटर्न स्पेस में - सामान्य "sed तरीका") और, प्रत्येक पंक्ति के लिए, यह उस लाइन में सभी माचिस-प्रतिनिधित्व योग्य वर्णों का प्रतिनिधित्व करने के लिए आवश्यक मैचस्टिक्स की मात्रा को आउटपुट करता है। इनपुट की प्रत्येक पंक्ति के लिए गणना निम्नानुसार होती है:
s/[^0-9a-jln-suxyz]//Ig
सबसे पहले, हम प्रत्येक वर्ण को हटाते हैं, जिसके लिए हमारे पास पैटर्न स्पेस से एक समान माचिस का प्रतिनिधित्व (जैसा कि प्रश्न पर दिया गया है) नहीं है। यही है, हम प्रत्येक वर्ण को हटाते हैं जो या तो "0" से "9" तक का अंक नहीं है, "a" से "j", "n" से "s", "l", "u" से एक अक्षर है। "x", "y" या "z"। अपरकेस और लोअरकेस अक्षरों को एक समान माना जाता है।
/^$/{s/.*/0/;b}
यदि हम एक खाली पैटर्न स्थान के साथ समाप्त होते हैं, तो हम 0 प्रिंट करते हैं (स्वचालित रूप से एक नई पंक्ति का अनुसरण करते हैं, जैसे कि sed हमेशा करता है जब तक कि आप इसके लिए एक विशेष ध्वज पास नहीं करते हैं), स्क्रिप्ट के सभी पीछे की रेखाओं को छोड़ दें और अगले "sed साइकिल" में आगे बढ़ें ( यानी, इनपुट की अगली लाइन पढ़ें और पहले कमांड से फिर से प्रोसेसिंग को दोहराएं जब तक कि इनपुट की कोई और लाइन प्रोसेस न हो जाए)।
s/.+/&; %1ir %%7lnu %%%4cfhjoy %%%%235bdegpqsxz %%%%%069a %%%%%%8/
अन्यथा, यदि पैटर्न स्पेस खाली नहीं है, तो हम इसे दो "सब-स्पेस" में विभाजित करते हैं , जो अर्धविराम द्वारा अलग होता है: सबसे पहले इनपुट स्पेस आता है , जो शुरू में उन सभी कैरेक्टर द्वारा बनता है, जिन्हें पैटर्न स्पेस से हटाने के बाद नहीं निकाला गया था। लाइन 1 का निष्पादन; इसके बाद अर्धविराम आता है, और इसके बाद मानचित्र स्थान ।
मैप स्पेस हमें बताता है कि प्रत्येक प्रासंगिक अल्फ़ान्यूमेरिक चरित्र का प्रतिनिधित्व करने के लिए 1 के बगल में कितने मैचस्टिक्स हैं। यदि हम यह जानना चाहते हैं कि मानचित्र अंतरिक्ष में किसी भी अल्फ़ान्यूमेरिक वर्ण का प्रतिनिधित्व करने के लिए कितने माचिस आवश्यक हैं, तो हम उस वर्ण के बाईं ओर सन्निहित% s के पहले क्रम की तलाश करते हैं, और उत्तर% s की संख्या का होगा। वह अनुक्रम प्लस 1. तो, उदाहरण के लिए, "b" का प्रतिनिधित्व करने के लिए आवश्यक माचिस की संख्या 4 + 1 = 5 है; "y", 3 + 1 = 4 का प्रतिनिधित्व करने के लिए "4", 3 + 1 = 4 का प्रतिनिधित्व करना; और इसी तरह।
:1
s/([^% ])(.+ (%+)[^ ]*\1)/%\3 \2/I
/ ;/!b1
यह एक पाश है। अब हम हर वर्ण को% (जिसके पूर्ण) अनुक्रम के इनपुट स्पेस में बदल देंगे, जिसकी संख्या उस वर्ण का प्रतिनिधित्व करने के लिए आवश्यक राशि से मेल खाती है, और एक सफेद स्थान वर्ण (फिर, अपरकेस और लोअरकेस अक्षर) द्वारा उस अनुक्रम का पालन करें वैसा ही उपचार)। यह निर्धारित करने की कसौटी कि क्या लूप का अंत होना चाहिए, यह जांचने के लिए कि क्या पैटर्न स्पेस में अर्धविराम के तत्काल बाईं ओर एक सफेद स्थान वर्ण है: यदि वह स्थिति रखती है, तो हम लूप को समाप्त करते हैं और अगली पंक्ति में जारी रखते हैं।
s/;.+//
s/^/,;/
वे दो पंक्तियाँ पैटर्न स्पेस से अर्धविराम और उसके बाद की सभी चीजों को हटा देती हैं और फिर पैटर्न स्पेस की शुरुआत में एक कॉमा और एक अर्धविराम सम्मिलित करती हैं। अब हमारे पास पैटर्न स्पेस एक बार फिर से दो नए उप-स्पेस में विभाजित है: सेमीकोलन से पहले एनालॉग रिजल्ट स्पेस और एनालॉग इनपुट स्पेस बाद ।
एनालॉग इनपुट स्पेस वह है जिसे हमने पहले "इनपुट स्पेस" कहा है, लेकिन एक अलग रूप में: इसमें अब सफेद स्थान द्वारा अलग किए गए%% के अनुक्रम शामिल हैं। एनालॉग इनपुट स्पेस में इस तरह के% की कुल संख्या प्रारंभिक इनपुट चरित्र स्ट्रिंग का प्रतिनिधित्व करने के लिए आवश्यक मैचस्टिक्स की समान संख्या है, अर्थात, वह संख्या परिणाम है। लेकिन हमें उस परिणाम को दशमलव संकेतन में छापना चाहिए, न कि प्रतिशत संकेतों के अनुक्रम के रूप में। एनालॉग रिजल्ट स्पेस का उद्देश्य रिजल्ट के प्रत्येक अंक का एनालॉग रिप्रेजेंटेशन रखना होता है, जबकि हम एक दूसरे के एनालॉग इनपुट स्पेस में% के प्रत्येक सन्निहित अनुक्रम को जोड़कर उस परिणाम की गणना करते हैं। अगला लूप उस राशि का प्रदर्शन करता है:
:2
s/(;[^%]*)(%+)/\2\1/
:3
s/,%{10}/%,/
s/^%/,&/
/%{10}/b3
/;.*%/b2
सबसे पहले, लेबल 2 के बाद , हम एनालॉग इनपुट स्पेस से सेमीकोलोन के तत्काल बाईं ओर के सेमीफाइनल के बाद के% रिग्रेसिव सीक्वेंस को ले जाते हैं, एनालॉग रिजल्ट स्पेस में;
अगला, हम एक उप-लूप (लेबल 3 ) में जाते हैं जो निम्नलिखित गणना करता है:
यदि अनुरूप परिणाम स्थान में अल्पविराम के बाद दस% का सन्निहित अनुक्रम होता है, तो हम उन% को हटा देते हैं और अल्पविराम के बाईं ओर तुरंत एक% लगाते हैं। इसे सीधे शब्दों में कहें, तो यह इंगित करता है कि परिणाम में दशमलव स्थानों में से एक ने 9 से अधिक इकाइयों का अधिग्रहण किया है, इसलिए हम उस दशमलव स्थान से 10 यूनिट दूर ले जाते हैं और अगले बड़े दशमलव स्थान में 1 इकाई जोड़ते हैं;
यदि पैटर्न स्पेस में "%" पहला वर्ण है, तो हम इसके ठीक पहले एक नया अल्पविराम सम्मिलित करते हैं। यह इंगित करता है कि राशि एक मूल्य पर पहुंच गई है, जिसका दशमलव प्रतिनिधित्व पिछले मूल्य की तुलना में बाईं ओर एक और दशमलव स्थान है;
यदि अभी भी एनालॉग रिजल्ट स्पेस में दस% का कोई सन्निहित अनुक्रम है, तो हम 3 लेबल पर वापस जाते हैं और इस प्रक्रिया को दोहराते हैं। अन्यथा, हम इस उप-लूप से बाहर निकलते हैं और अगली पंक्ति में कदम रखते हैं।
अब, अगर एनालॉग इनपुट स्पेस (यानी अर्धविराम के बाद) में अभी भी कोई "%" है, तो इसका मतलब है कि कुल योग में अभी भी कुछ संख्या में मैचस्टिक्स हैं - इसलिए हम लेबल 2 पर वापस जाते हैं ।
एक बार योग पूरा होने पर, हम कोड के अंतिम लूप में कदम रखते हैं:
:4
s/,[;,]/,0,/
/,[;,]/b4
यहां, हम बाईं ओर अल्पविराम या अर्धविराम या दाईं ओर एक अल्पविराम द्वारा बनाए गए वर्ण के प्रत्येक जोड़े की जांच करते हैं। हम ऐसे सभी पात्रों को दो कॉमा के अंदर "0" से बदल देते हैं।
s/%{9}/9/g
s/%{8}/8/g
s/%{7}/7/g
s/%{6}/6/g
s/%{5}/5/g
s/%%%%/4/g
s/%%%/3/g
s/%%/2/g
s/%/1/g
कोड का उपरोक्त टुकड़ा काफी सरल है: हम दशमलव परिणाम वर्ण के अनुरूप परिणाम स्थान में% के प्रत्येक सन्निहित अनुक्रम को बदलते हैं जो प्रत्येक विशेष क्रम में% s की संख्या से मेल खाता है।
s/[^0-9]//g
अंत में, हम हर गैर-अंक वाले चरित्र को पैटर्न स्पेस से हटाते हैं और जो परिचित रहता है वह अंतिम परिणाम है। उस मान को मानक आउटपुट पर मुद्रित किया जाता है और अगले sed चक्र शुरू होता है, अगर संसाधित करने के लिए कोई और इनपुट लाइनें हैं।
|_\n|_
(लोअरकेसt
) के रूप में लिखा जाता है