यह उसी नाम के साथ मेरी एक पिछली हटाई गई चुनौती पर आधारित है
परिचय
आपको एक प्रोग्राम लिखने का काम सौंपा जाता है, जो इनपुट के सभी 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 है। टैग और विशेषता नाम विनिर्देश से भिन्न होते हैं।
< : : :><:/><: :=":=:" ::></:>< /:>
?