यह क्षमाशील HTML पार्सर का एक मॉडल है। HTML को पार्स करने और विशेषताओं को निकालने के बजाय, इस कोड गोल्फ में, टैग पार्सर सरल होगा।
एक फ़ंक्शन लिखें जो एक टैग संरचना को पार्स करता है और इसके पेरेंटाइज्ड फॉर्म को वापस करता है। एक उद्घाटन टैग में एक लोअरकेस अक्षर होता है, और एक समापन टैग में एक अपरकेस अक्षर होता है। उदाहरण के लिए, aAbaABपर्स में (a)(b(a))या HTML में <a></a><b><a></a></b>। बेशक, टैग juxtaposition और घोंसले में हो सकते हैं।
"समय से पहले" बंद टैग को संभाला जाना चाहिए। उदाहरण के लिए, में abcA, Aसबसे बाहरी को बंद कर देता है a, इसलिए यह पार्स करता है (a(b(c)))।
अतिरिक्त समापन टैग को केवल अनदेखा किया जाता है: aABपर्स में (a)।
ओवरलैपिंग टैग संभाले नहीं हैं। उदाहरण के लिए, अतिरिक्त समापन टैग ( -> ( ) + (अतिरिक्त)) के पिछले नियम के अनुसार , abABपर्स में (a(b))नहीं ।(a(b))(b)abABabA(a(b))B
इनपुट में कोई व्हाट्सएप और अन्य गैरकानूनी अक्षर नहीं मानते।
आपको किसी भी पुस्तकालय का उपयोग करने की अनुमति नहीं है।
यहाँ एक संदर्भ कार्यान्वयन और परीक्षण मामलों की एक सूची है:
#!/usr/bin/python
def pars(inpu):
outp = ""
stac = []
i = 0
for x in inpu:
lowr = x.lower()
if x == lowr:
stac.append(x)
outp += "(" + x
i = i + 1
else:
while len(stac) > 1 and stac[len(stac) - 1] != lowr:
outp += ")"
stac.pop()
i = i - 1
if len(stac) > 0:
outp += ")"
stac.pop()
i = i - 1
outp += ")" * i
return outp
tests = [
("aAaAbB", "(a)(a)(b)"),
("abBcdDCA", "(a(b)(c(d)))"),
("bisSsIB", "(b(i(s)(s)))"),
("aAabc", "(a)(a(b(c)))"),
("abcdDA", "(a(b(c(d))))"),
("abcAaA", "(a(b(c)))(a)"),
("acAC", "(a(c))"),
("ABCDEFG", ""),
("AbcBCabA", "(b(c))(a(b))")
]
for case, expe in tests:
actu = pars(case)
print "%s: C: [%s] E: [%s] A: [%s]" % (["FAIL", "PASS"][expe == actu], case, expe, actu)
सबसे छोटा कोड जीतता है।
AbcBCabA(के रूप में पार्स करना चाहिए (b(c))(a(b))। मेरा कोड इस मामले को छोड़कर छोटा हो सकता था।