बराबर लंबाई के टुकड़ों में बंटवारे n
जैसा कि अधिकांश "सामान्य" भाषाओं में TMTOWTDI (इसे करने का एक से अधिक तरीका है)। मैं यहाँ मान रहा हूँ कि इनपुट में लाइनफ़ीड नहीं है, और यह कि "विभाजन" का अर्थ है इसे लाइनों में विभाजित करना। लेकिन दो अलग-अलग लक्ष्य हैं: यदि स्ट्रिंग की लंबाई कई हिस्सा नहीं है, तो क्या आप अपूर्ण अनुगामी चंक को रखना चाहते हैं या आप इसे छोड़ना चाहते हैं?
अधूरी अनुगामी चुस्कियाँ लेते रहे
सामान्य तौर पर, रेटिना में विभाजन के बारे में जाने के तीन तरीके हैं। मैं तीनों दृष्टिकोणों को यहाँ प्रस्तुत कर रहा हूँ, क्योंकि जब आप उन्हें संबंधित समस्या के अनुकूल बनाने का प्रयास करते हैं तो वे बहुत बड़ा बदलाव ला सकते हैं। आप एक प्रतिस्थापन का उपयोग कर सकते हैं और प्रत्येक मैच के लिए एक लाइनफेड जोड़ सकते हैं:
.{n}
$&¶
यह 8 बाइट्स (या थोड़ा कम है अगर n = 2
या n = 3
फिर तब आप उपयोग कर सकते हैं ..
या ...
क्रमशः)। यह एक अतिरिक्त linefeed संलग्न कर देता है, तो स्ट्रिंग लंबाई: हालांकि यह एक मुद्दा है है हिस्सा लंबाई की एक बहु।
आप एक स्प्लिट स्टेज का भी उपयोग कर सकते हैं, और इस तथ्य का उपयोग कर सकते हैं कि स्प्लिट्स में कैप्चर बरकरार रहे:
S_`(.{n})
_
विकल्प खाली लाइनों है कि अन्यथा मैचों के साथ पूरे स्ट्रिंग को कवर से परिणाम होगा निकाल देता है। यह 9 बाइट्स है, लेकिन यह एक ट्रेलिंग लाइनफ़ीड नहीं जोड़ता है। इसके लिए n = 3
8 बाइट्स और इसके लिए n = 2
7 बाइट्स हैं। ध्यान दें कि आप कुल मिलाकर एक बाइट बचा सकते हैं यदि खाली रेखाएं मायने नहीं रखती हैं (जैसे कि क्योंकि आप केवल गैर-रिक्त लाइनों को संसाधित करेंगे और बाद में लाइनफीड से छुटकारा पा सकते हैं): तो आप निकाल सकते हैं _
।
तीसरा विकल्प एक मैच का उपयोग करना है। !
विकल्प के साथ हम सभी मैचों को प्रिंट कर सकते हैं। हालाँकि, अनुगामी भाग को शामिल करने के लिए, हमें एक चर मिलान लंबाई की अनुमति देने की आवश्यकता है:
M!`.{1,n}
यह भी 9 बाइट्स है, और एक अनुगामी लाइनफीड भी शामिल नहीं होगी। यह भी के लिए 8 बाइट्स हो जाता है n = 3
ऐसा करने से ..?.?
। हालाँकि ध्यान दें कि यह 6 बाइट्स के लिए कम हो जाता है n = 2
क्योंकि अब हमें केवल आवश्यकता है ..?
। यह भी ध्यान दें कि M
गिराया जा सकता है यदि यह आपके कार्यक्रम का अंतिम चरण है, तो किसी भी मामले में एक बाइट की बचत होगी।
अधूरी अनुगामी चुस्कियों का निर्वहन
यह वास्तव में लंबा हो जाता है यदि आप इसे प्रतिस्थापन के साथ करने की कोशिश करते हैं, क्योंकि आपको अनुगामी चंक को कुछ भी नहीं बदलने की आवश्यकता है (यदि यह मौजूद है) और एक विभाजन के साथ भी। इसलिए हम उन लोगों को सुरक्षित रूप से अनदेखा कर सकते हैं। दिलचस्प है, मैच दृष्टिकोण के लिए यह विपरीत है: यह छोटा हो जाता है:
M!`.{n}
यही कारण है कि 7 बाइट्स, या के लिए कम है n = 2
, n = 3
। फिर से, ध्यान दें कि आप M
कोड में अंतिम चरण होने पर इसे छोड़ सकते हैं ।
यदि आप एक अनुगामी लाइनफीड यहाँ चाहते हैं, तो आप |$
regex में संलग्न करके प्राप्त कर सकते हैं ।
बोनस: ओवरलैपिंग विखंडू
याद रखें कि M
है &
विकल्प जो ओवरलैपिंग मैचों (जो आम तौर regex के साथ संभव नहीं है) देता है। यह आपको दी गई लंबाई के तार के सभी अतिव्यापी विखंडू (सबस्ट्रिंग) प्राप्त करने की अनुमति देता है:
M!&`.{n}