अपने टैग बंद करें!


13

यह उसी नाम के साथ मेरी एक पिछली हटाई गई चुनौती पर आधारित है

परिचय

आपको एक प्रोग्राम लिखने का काम सौंपा जाता है, जो इनपुट के सभी XML-जैसे 1 टैग्स को उचित रूप से खोला और बंद किया गया हो और सही क्रम में हो, इसके आधार पर एक सत्य या गलत मूल्य देता है । इनपुट के रूप में निम्नलिखित पर विचार करें:

<Apple>

यह एक गलत मान लौटाएगा क्योंकि टैग सही ढंग से बंद नहीं हुआ है। इस:

<Apple></Apple>

इसके विपरीत, एक सत्य मान देता है क्योंकि यह सही ढंग से बंद है। कार्यक्रम को यह सुनिश्चित करने के लिए नेस्टेड टैग की भी जांच करनी चाहिए कि वे सही स्थिति में हैं। उदाहरण के लिए, इसे इनपुट के रूप में लें:

<mango><Apple></mango></Apple>

सभी टैग सही तरीके से बंद हैं, लेकिन सही क्रम में नहीं । आपका प्रोग्राम सही टैग पदानुक्रम और नेस्टिंग के लिए जाँचना चाहिए।

परिभाषाएं

नियमों और मान्यताओं में आने से पहले मुझे कुछ चीजों को परिभाषित करने दें।

टैग

एक बेसिक XML- स्टाइल टैग। उदाहरण के लिए <Apple>:। उनके पास अधिकतम, एक अग्रणी और अनुगामी स्थान हो सकता है (या फिर यह अमान्य और गलत है), इसलिए < Apple >और <Apple>समान हैं। ये टैग भी जैसी विशेषताओं के शामिल कर सकते हैं foo="bar" (अपेक्षित डबल कोट, या किसी और अवैध और falsey के साथ) , और विशेषता नाम केवल किसी भी अक्षरांकीय चरित्र या शामिल कर सकते हैं _, :, -, और .। विशेषता नामों को भी एक विशेषता मान की आवश्यकता नहीं होती है, और "समापन दोहरे उद्धरण से पहले मूल्यों में कुछ भी हो सकता है । समापन टैग में विशेषताएँ नहीं होनी चाहिए, और किसी भी टैग में नई लिंक नहीं होनी चाहिए।

टैग नाम

टैग नाम टैग के नाम हैं। उदाहरण के लिए, <Apple>टैग का नाम है Apple। टैग नामों में विशेषता नाम के समान वर्ण हो सकते हैं, और केस-संवेदी होते हैं। इसका मतलब <Apple>यह नहीं है <apple>

सेल्फ-क्लोजिंग टैग

एक नियमित टैग जो स्वयं को बंद कर देता है जैसे <Apple />या <Apple/>(वे समान हैं)। स्लैश और टैग नाम के बीच की जगह की अनुमति है।

सादे पाठ

पात्रों में से एक स्ट्रिंग है कि कुछ भी शामिल कर सकते हैं और में संलग्न नहीं कर रहे हैं <और >

"सरल" टैग

या तो एक उद्घाटन, समापन, या स्व-समापन टैग।

नियम

  • आउटपुट लौटाया या मुद्रित किया जा सकता है, और इनपुट को किसी भी तरह से लिया जा सकता है
  • इनपुट एक स्ट्रिंग है, जिसमें टैग, सादा पाठ या दोनों शामिल हैं
  • आपका कार्यक्रम एक कार्य या संपूर्ण कार्य कार्यक्रम हो सकता है

  • सादा पाठ कहीं भी हो सकता है; यदि इनपुट में केवल सादे पाठ होते हैं , तो प्रोग्राम को एक सत्य मान वापस करना चाहिए।

  • नेस्टेड टैग की मान्यता कार्यक्रम के लिए आवश्यक है। यदि किसी टैग में टैग लगा हुआ है, तो माता-पिता के बंद होने से पहले, नेस्टेड टैग को बंद कर दिया जाना चाहिए, नियमित एक्सएमएल की तरह, वरना एक फाल्सी वैल्यू वापस आनी चाहिए

मान्यताओं

  • आप मान सकते हैं कि इनपुट हमेशा एक या अधिक "सरल" टैग होगा
  • आप मान सकते हैं कि इनपुट हमेशा ऊपर परिभाषित टैग के लिए प्रारूप का पालन करेगा

परीक्षण के मामलों

Falsey

<apple>

<apple></Apple>

<apple></mango>

<apple><mango>

<a><b></a></b>

Text<ul><li></li><ul />

<pear attr=foo></pear attr=foo>

<Ketchup flavor=spicy></Ketchup>

<Ap ple></Apple>

Truthy

Text 

<Apple />

<Apple></Apple>

< Apple ></ Apple>

<mango><Apple/></mango>

<mango>Text<div class="bar">More text \o/</div></mango>

<food group="fruit">Fruits:<orange :fruit-variety="clementine" /><pear _fruit.type="asian" /></food>

<example foo="abcdefghijklmnopqrstuvwxyz1234567890-/:;()$&@.,?!'" noValue>Any characters allowed! (0.0)</example>

स्कोरिंग

यह , इसलिए बाइट्स में सबसे छोटा कोड जीत जाता है। मानक कमियां हमेशा की तरह निषिद्ध हैं।


1 नोट : यह असली XML नहीं है, लेकिन चुनौती के लिए अलग-अलग नियमों के साथ एक छद्म-XML है। टैग और विशेषता नाम विनिर्देश से भिन्न होते हैं।


यदि किसी टैग में पहले या बाद में एक से अधिक स्थान हैं, तो क्या हमें इसे गलत चिह्नित करना होगा?
JayDepp

@JayDepp हां - मुझे स्पष्ट करना चाहिए कि मेरी पोस्ट में
एंड्रयू ली

क्या हम उन बिल्डिंग्स का उपयोग कर सकते हैं जो एक्सएमएल के तार तार करते हैं?
ओलिवर

@obarakon समस्या यह है कि जरूरी XML मान्य नहीं है। फुटनोट देखें।
एंड्रयू ली

यह कहना सही है, कि यह एक है truthy इनपुट : < : : :><:/><: :=":=:" ::></:>< /:>?
सम्मिलित करें

जवाबों:


2

रेटिना , 76 74 बाइट्स

+`< ?([-.:\w]+)( ?[-.:\w]+(="[^"]*")?)* ?(/>|>[^<>]*< ?/ ?\1 ?>)

^[^<>]*$

जब से मैंने देखा है कि रेटिना वास्तव में गोल्फिंग रेगीक्स के लिए अच्छा है, मुझे लगा कि मैं इसे आज़माऊंगा। मेरे रूबी जवाब और 0 या 1 प्रिंट के समान तर्क का अनुसरण करता है।

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


1
आप की जरूरत नहीं है M`। यदि अंतिम चरण में केवल एक ही भाग होता है, तो मैच मोड निहित होता है।
मार्टिन एंडर

1

रूबी (2.3.1), 103 101 100 बाइट्स

->s{s.sub!(/< ?([-.:\w]+)( ?[-.:\w]+(="[^"]*")?)* ?(\/>|>[^<>]*< ?\/ ?\1 ?>)/,'')&&redo;!(s=~/<|>/)}

अनाम फ़ंक्शन को जोड़कर कहा जाता है .call("<Apple></Apple>")। तब तक मेल या सेल्फ क्लोजिंग टैग्स मिलते हैं, जब तक कि किसी भी तरह का कोई बंटवारा न हो जाए, और फिर वापस लौटा दिया जाता है।

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


यह <p title="This is a \"test\"."></p>फाल्सी के रूप में चिह्नित है, लेकिन यह नहीं होना चाहिए।
orlp

@orlp के मान में "बंद होने वाले दोहरे उद्धरण से पहले" के अलावा कुछ भी हो सकता है।
JayDepp

ओह, यह असली XML नहीं है ...
orlp

1
रियल XML को regex के साथ कभी भी पार्स नहीं किया जाना चाहिए :)
JayDepp
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.