डक्ट टेप एक रेगेक्स डिसाइडर


11

आपका कार्य एक ऐसा प्रोग्राम बनाना है जो यह निर्धारित करता है कि क्या एक दिए गए स्ट्रिंग एक वैध नियमित अभिव्यक्ति है या नहीं StackExchange नेटवर्क पर साइटों से लिए गए कोड स्निपेट का उपयोग कर रहा है।

इस चुनौती के उद्देश्यों के लिए, नियमित अभिव्यक्ति बोली एक छीन ली जाएगी और मेटा-वर्णों का अधिकतर न्यूनतम सेट ()*?|\:। जैसे, आप बिल्ट-इन regex पार्सर का उपयोग नहीं कर पाएंगे।

  • \मेटा-पात्रों से बचने के लिए उपयोग किया जाता है। यह एक मेटा-चरित्र द्वारा पीछा किया जाना चाहिए।
  • अनुपस्थित कोष्ठक संतुलित होना चाहिए
  • *और ?पहले से ही एक गैर-मेटा-चरित्र, एक कोष्ठक समूह, या एक एस्केपेड मेटा-चरित्र से पहले होना चाहिए।
  • अन्य सभी मुद्रण योग्य ASCII वर्णों के साथ-साथ नईलाइन, टैब और स्थान को गैर-मेटा वर्णों के रूप में समर्थित किया जाना चाहिए। एक स्ट्रिंग के साथ क्या होता है जिसमें अन्य वर्ण अपरिभाषित होते हैं।
  • इस चुनौती के लिए रेगेक्स का वास्तविक अर्थ महत्वपूर्ण नहीं है।

उदाहरण

Truthy:
  abc
  a?
  (a|)*
  ()
  a|b*
  \*
  \\
  \\*
  a*b?(cd|e)
  +
  [
  }
  (123\))*
  \|
  (a(b(c|d)*e)*f)*
  (|\)*)
  (abc)+*
  (abc)+
  +abc

^ last test case is an actual newline

Falsy:
  ?abc
  *
  **
  \
  (
  a*?
  a?*
  ?
  a)
  (\)
  (|\)*
  \()
  |*
  (?:abc)
  \\**
  \n

स्कोरिंग

आपका समग्र स्कोर StackExchange के आसपास प्रश्नों और उत्तरों से लिए गए स्निपेट्स की संख्या है।

  • बार-बार स्निपेट जितनी बार उपयोग किए जाते हैं, उतनी बार गिनते हैं।
  • व्हाट्सएप को स्वतंत्र रूप से जोड़ा और हटाया जा सकता है (क्योंकि पायथन, हास्केल, और अन्य व्हाट्सएप-संवेदनशील भाषाओं के कारण) और आपके स्निपेट की गिनती नहीं करता है।
    • यदि आपका कोड वास्तव में व्हॉट्सएप में लिखा गया है तो अपवाद होगा ।
  • किसी भी StackExchange साइट से स्निपेट की अनुमति तब तक दी जाती है जब तक वे प्रश्न, उत्तर और टिप्पणियों से आते हैं जो पुराने हैं (संपादन समय द्वारा - यदि आवश्यक हो तो पुराने संशोधन का उपयोग करें)। (24 सितंबर, 2019 @ 3:30 अपराह्न यूटीसी)
  • स्निपेट्स एक प्रश्न, उत्तर या टिप्पणी बॉडी में कहीं से भी आ सकते हैं, चाहे वह प्रीफ़ॉर्मेट कोड ब्लॉक में हो या न हो।
  • एक स्निपेट को दूसरे के बीच में विभाजित करने से बाहरी स्निपेट को दो स्निपेट के रूप में गिना जाता है

सबसे कम स्कोर जीत!


1
@ रॉबिनडर हाँ, परिवर्तित
बीफ़स्टर

क्या पद इस चुनौती से अधिक या इसके बराबर हो सकता है, क्या हम इस चुनौती के शरीर से स्निपेट का उपयोग कर सकते हैं?
जो किंग

1
"जैसा कि, आप बिल्ट-इन regex पार्सर का उपयोग नहीं कर पाएंगे" क्या यह कहना है कि इसका डिजाइन एक साधारण हां / nay के लिए उपयोग करने के लिए तैयार किया गया है, या कि हम अपने जवाबों में regex का उपयोग करने से मना कर रहे हैं?
user0721090601

@ डिजिफा को इस तरह डिजाइन किया गया है कि आप अपनी भाषा के रेगेक्स इंजन को नहीं ले सकते हैं और देख सकते हैं कि यह दिए गए रेक्स को संकलित करता है या नहीं। हर भाषा जो मुझे पता है कि मेटा-पात्रों और विशेष कैप्चर समूहों के एक बड़े सेट का समर्थन करता है, इसलिए वे सभी मामलों में वर्णों के इस सेट को सही ढंग से मेल नहीं खाते।
बीफस्टर

1
@ JL2210 यह दो स्निपेट बना देगा: एक शुरुआत के लिए और एक अंत के लिए। आप एक ही स्निपेट का उपयोग कर सकते हैं जब तक कि यह सभी परीक्षण मामलों को पास नहीं करता है और एक उत्तर / प्रश्न / पोस्ट से आता है जो इस चुनौती से अधिक पुराना है
बीफ़स्टर

जवाबों:


6

पर्ल 6 , 20 स्निपेट

{$_ eq m/[[<-[()*?|\\]>|\\<[()*?|\\]>|'(' <~~>* ')']<[*?]>?|\|]+/}

इसे ऑनलाइन आज़माएं!

स्निपेट से लिया गया है:

{$_ eq, m/[, <-[, ()*?, |\\, ]>, |\\, <[, ()*?, |\\, ]>, |, '(' <~~>* ')', <[, *?, ]>, ?|, \|, ]+/, }

यह ज्यादातर लालची दृष्टिकोण है (सभी एक या दो चरित्र स्निपेट द्वारा स्पष्ट किया गया है)। मैंने व्यक्तिगत पात्रों की खोज के लिए SymbolHound का उपयोग किया , और एकमात्र वास्तविक अनुकूलन '(' <~~>* ')'स्निपेट था , जो पुनरावर्ती पर्ल 6 रेगेक्स पर मेरे स्वयं के उत्तर से लिया गया है ।

स्पष्टीकरण:

यह मूल रूप से जांचता है कि इनपुट वैध रेगेक्स के लालची मैच के बराबर है या नहीं। कारण हम सिर्फ रेगेक्स का उपयोग नहीं कर सकते हैं और ^$सिरों को चिह्नित करने के लिए जोड़ सकते हैं क्योंकि हम एक पुनरावर्ती रेजेक्स का उपयोग कर रहे हैं, जो कि ^$मार्कर होते तो काम नहीं करते । रेगेक्स ही है:

m/[                             ]+/   # Match one or more times
   [              ]  # Any of 
    <-[()*?|\\]> |     # Not a metacharacter
    \\<[()*?|\\]>      # A metacharacter preceded by a \
    '(' <~~>* ')'      # Brackets surrounding a valid regex
                   <[*?]>?  # Optionally followed by a ? or *
                           | \|    # Or just the | metacharacter

टीआईएल ~~, धन्यवाद!
user0721090601 4

@guifa हाँ, मुझे पता चला कि P6 विनिर्देशन के माध्यम से , जिसमें बहुत सारी चीज़ें हैं जिन्हें अभी तक ठीक से प्रलेखित नहीं किया गया है। मुझे संदेह ~~नहीं है क्योंकि यह अभी तक पूरी तरह से लागू नहीं हुआ है (उदाहरण के लिए <~~0>), हालांकि वहाँ अन्य छिपे हुए रत्न हैं।
जो किंग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.