मैं एक नए प्रकार के रेगेक्स गोल्फ चुनौती का प्रयास करना चाहता हूं, जो आपको नगण्य कम्प्यूटेशनल कार्यों को कुछ भी नहीं बल्कि रेगेक्स प्रतिस्थापन के साथ हल करने के लिए कहता है। इसे अधिक संभव और कमतर बनाने के लिए, आपको एक के बाद एक, कई प्रतिस्थापन लागू करने की अनुमति होगी।
चुनौती
हम सरल शुरू करेंगे: दो धनात्मक पूर्णांक युक्त एक स्ट्रिंग दी गई है, क्योंकि दशमलव संख्याओं को a से अलग किया जाता है ,
, एक स्ट्रिंग का निर्माण करते हैं, जिसमें दशमलव संख्या भी होती है। तो, बहुत सरलता से
47,987
में बदल जाना चाहिए
1034
आपका उत्तर मनमाने ढंग से सकारात्मक पूर्णांक के लिए काम करना चाहिए।
प्रारूप
प्रत्येक उत्तर में प्रतिस्थापन चरणों का क्रम होना चाहिए , प्रत्येक चरण में एक रेक्सक्स और एक प्रतिस्थापन स्ट्रिंग होता है। वैकल्पिक रूप से, अनुक्रम में उन चरणों में से प्रत्येक के लिए, आप प्रतिस्थापन को दोहराना चुन सकते हैं जब तक कि स्ट्रिंग बदलना बंद न हो जाए। यहाँ एक उदाहरण प्रस्तुत है (जो उपरोक्त समस्या को हल नहीं करता है):
Regex Modifiers Replacement Repeat?
\b(\d) g |$1 No
|\d <none> 1| Yes
\D g <empty> No
इनपुट को देखते हुए 123,456
, यह सबमिशन इनपुट को निम्नानुसार संसाधित करेगा: पहला प्रतिस्थापन एक बार लागू होता है और पैदावार होती है:
|123,|456
अब दूसरा प्रतिस्थापन लूप में लागू किया जाता है जब तक कि स्ट्रिंग बदलना बंद न हो जाए:
1|23,|456
11|3,|456
111|,|456
111|,1|56
111|,11|6
111|,111|
और अंत में, तीसरे प्रतिस्थापन को एक बार लागू किया जाता है:
111111
ध्यान दें कि लूप के लिए समाप्ति मानदंड है कि क्या स्ट्रिंग में परिवर्तन होता है, न कि रेगेक्स को एक मैच मिला। (अर्थात, यदि आप मैच पाते हैं तो यह भी समाप्त हो सकता है लेकिन प्रतिस्थापन मैच के समान है।)
स्कोरिंग
आपका प्राथमिक स्कोर आपके सबमिशन में प्रतिस्थापन चरणों की संख्या होगी। हर दोहराया प्रतिस्थापन 10 चरणों के लिए गणना करेगा । तो उपरोक्त उदाहरण स्कोर होगा 1 + 10 + 1 = 12
।
एक टाई के मामले में (बहुत कम संभावना नहीं), माध्यमिक स्कोर सभी चरणों के आकार का योग है। प्रत्येक चरण के लिए रेगेक्स ( बिना सीमांकक), संशोधक और प्रतिस्थापन स्ट्रिंग जोड़ें। उपरोक्त उदाहरण के लिए यह होगा (6 + 1 + 3) + (3 + 0 + 2) + (2 + 1 + 0) = 18
।
विविध नियम
आप किसी भी regex स्वाद का उपयोग कर सकते हैं (जिसे आपको संकेत करना चाहिए), लेकिन सभी चरणों को समान स्वाद का उपयोग करना चाहिए। इसके अलावा, आपको फ़्लेवर की होस्ट भाषा की किसी भी सुविधा का उपयोग नहीं करना चाहिए , जैसे कि प्रतिस्थापन कॉलबैक या पर्ल का e
संशोधक, जो पर्ल कोड का मूल्यांकन करता है। सभी हेरफेर विशेष रूप से रेगेक्स प्रतिस्थापन के माध्यम से होने चाहिए।
ध्यान दें कि यह आपके स्वाद और संशोधक पर निर्भर करता है कि क्या प्रत्येक एकल प्रतिस्थापन सभी घटनाओं को प्रतिस्थापित करता है या केवल एक ही। उदाहरण के लिए, यदि आप ECMAScript फ्लेवर चुनते हैं, तो एक एकल चरण डिफ़ॉल्ट रूप से केवल एक घटना को प्रतिस्थापित करेगा, जब तक कि आप g
संशोधक का उपयोग नहीं करते । दूसरी ओर, यदि आप .NET फ्लेवर का उपयोग कर रहे हैं, तो प्रत्येक चरण हमेशा सभी घटनाओं को प्रतिस्थापित करेगा।
एकल और वैश्विक प्रतिस्थापन के लिए अलग-अलग प्रतिस्थापन विधियाँ हैं (उदाहरण के लिए रूबी की sub
बनाम gsub
), मान लें कि एकल प्रतिस्थापन डिफ़ॉल्ट है और एक g
संशोधक की तरह वैश्विक प्रतिस्थापन का इलाज करता है ।
परिक्षण
यदि आपका चुना हुआ स्वाद या तो .NET या ECMAScript है, तो आप अपनी सबमिशन का परीक्षण करने के लिए रेटिना का उपयोग कर सकते हैं (मुझे बताया जा रहा है, यह मोनो पर भी काम करता है)। अन्य स्वादों के लिए, आपको संभवतः होस्ट भाषा में एक छोटा कार्यक्रम लिखना होगा जो क्रम में प्रतिस्थापन लागू करता है। यदि आप करते हैं, तो कृपया अपने उत्तर में इस परीक्षा कार्यक्रम को शामिल करें।