समस्या
मेरे पास नियमित अभिव्यक्ति का एक गुच्छा है जिसे मुझे कुछ कोड में उपयोग करने की आवश्यकता है, लेकिन मैं एक प्रोग्रामिंग भाषा का उपयोग कर रहा हूं जो रेगेक्स का समर्थन नहीं करता है! सौभाग्य से, मुझे पता है कि परीक्षण स्ट्रिंग की अधिकतम लंबाई होगी और केवल मुद्रण योग्य ASCII से बना होगा।
चुनौती
आपको एक regex और एक नंबर इनपुट करना चाहिए n
, और मुद्रण योग्य ASCII (ASCII कोड 32 से 126 समावेशी, से
~
, कोई टैब या newlines) से बना हर स्ट्रिंग जो n
उस रेगेक्स से मेल खाता है या उससे कम नहीं है । आप अपने कोड में बिल्ट-इन रेगुलर एक्सप्रेशन या रेगेक्स मैचिंग फंक्शन का इस्तेमाल बिलकुल नहीं कर सकते । नियमित अभिव्यक्तियाँ निम्नलिखित तक सीमित रहेंगी:
- शाब्दिक वर्ण (और बच जाते हैं, जो एक चरित्र को शाब्दिक होने के लिए मजबूर करते हैं, इसलिए
\.
एक शाब्दिक है.
,\n
एक शाब्दिक हैn
(केवल के बराबरn
), और\w
इसके बराबर हैw
। आपको भागने के दृश्यों का समर्थन करने की आवश्यकता नहीं है।) .
- वाइल्डकार्ड (कोई भी वर्ण)- चरित्र वर्ग, का
[abc]
अर्थ है "ए या बी या सी" और[d-f]
इसका मतलब डी से लेकर एफ (इसलिए, डी या ई या एफ) है। केवल चरित्र वर्ग में विशेष अर्थ रखने वाले हैं[
और]
(जो हमेशा बच जाएंगे, इसलिए उन लोगों के बारे में चिंता न करें),\
(चरित्र का पलायन), निश्चित रूप^
से, चरित्र वर्ग की शुरुआत में (जो एक नकारात्मकता है) ), और-
(जो एक सीमा है)। |
- OR ऑपरेटर, अल्टरनेशन। याfoo|bar
तोfoo
या का मतलब हैbar
, या(ab|cd)e
मेल खाता हैabe
याcde
।*
- पिछले टोकन को दोहराए गए शून्य या अधिक बार मैच करें, लालची (यह यथासंभव कई बार दोहराने की कोशिश करता है)+
- एक या एक से अधिक बार, लालची दोहराया?
- शून्य या एक बार- कोष्ठकों के साथ समूहन, के लिए समूह टोकन के लिए
|
,*
।+
, या?
इनपुट regex हमेशा मान्य होगा (यानी, आप की तरह इनपुट संभाल करने की जरूरत नहीं है ?abc
या (foo
या किसी अमान्य इनपुट)। आप किसी भी क्रम में स्ट्रिंग्स को आउटपुट कर सकते हैं, लेकिन प्रत्येक स्ट्रिंग को केवल एक बार दिखाई देना चाहिए (किसी भी डुप्लिकेट को आउटपुट न करें)।
टेस्ट मामलों
इनपुट: .*
, 1
आउटपुट: (रिक्त स्ट्रिंग), ,
!
, "
, ..., }
,~
इनपुट: w\w+
, 3
आउटपुट: ww
,www
इनपुट: [abx-z][^ -}][\\]
, 3
आउटपुट: a~\
, b~\
, x~\
, y~\
,z~\
इनपुट: ab*a|c[de]*
, 3
आउटपुट: c
, cd
, ce
, aa
, cde
, ced
, cdd
, cee
,aba
इनपुट: (foo)+(bar)?!?
, 6
आउटपुट: foo
, foo!
, foofoo
,foobar
इनपुट: (a+|b*c)d
, 4
आउटपुट: ad
, cd
, aad
, bcd
, aaad
,bbcd
इनपुट: p+cg
, 4
आउटपुट: pcg
,ppcg
इनपुट: a{3}
, 4
आउटपुट:a{3}
विजेता
यह कोड-गोल्फ है , इसलिए बाइट्स में सबसे छोटा कोड जीत जाएगा!
|
बहुत कम समझ में आती है। यह नेस्टेड समूहों को संभालने के लिए प्रतीत नहीं होता है या a|b|c
। मानक स्पष्टीकरण का उपयोग करने के मामले में क्या गलत है कितना दृढ़ता से और वैकल्पिक रूप से बांधना? (और आपके पास सैंडबॉक्स का उपयोग न करने के लिए कोई बहाना नहीं है)