এটি একটি ক্ষমাশীল HTML পার্সারের একটি মডেল of এইচটিএমএল পার্সিং এবং বৈশিষ্ট্যগুলি বের করার পরিবর্তে এই কোড গল্ফে ট্যাগ পার্সারটি সহজ হবে simple
একটি ফাংশন লিখুন যা কোনও ট্যাগ কাঠামোকে বিশ্লেষণ করে এবং এর প্রথম বন্ধনী ফর্মটি দেয়। একটি খোলার ট্যাগটিতে একটি ছোট হাতের অক্ষর থাকে এবং একটি ক্লোজিং ট্যাগে একটি বড় হাতের অক্ষর থাকে। উদাহরণস্বরূপ, বা এইচটিএমএল মধ্যে aAbaAB
পার্স ,। অবশ্যই, ট্যাগগুলি জুস্টপজিশন এবং নীড়ের মধ্যে থাকতে পারে।(a)(b(a))
<a></a><b><a></a></b>
"অসময়ে" বদ্ধ ট্যাগগুলি অবশ্যই পরিচালনা করতে হবে। উদাহরণস্বরূপ, মধ্যে abcA
, A
বাহ্যতমতম বন্ধ করে a
, তাই এটি পার্স করে (a(b(c)))
।
অতিরিক্ত সমাপ্তি ট্যাগগুলি কেবল উপেক্ষা aAB
করা হয়: এতে পার্স করা (a)
।
ওভারল্যাপিং ট্যাগগুলি পরিচালনা করা হয় না। উদাহরণস্বরূপ, abAB
মধ্যে পার্স (a(b))
, না (a(b))(b)
, অতিরিক্ত ক্লোজিং ট্যাগের পূর্ববর্তী নিয়ম দ্বারা ( abAB
-> abA
( (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))