이것은 용서하는 HTML 파서의 모델입니다. 이 코드 골프에서 HTML을 파싱하고 속성을 추출하는 대신 태그 파서는 간단합니다.
태그 구조를 구문 분석하고 괄호 형식을 반환하는 함수를 작성하십시오. 여는 태그는 하나의 소문자로 구성되고 닫는 태그는 하나의 대문자로 구성됩니다. 예를 들어 aAbaAB로 (a)(b(a))또는 HTML 로 구문 분석 <a></a><b><a></a></b>합니다. 물론, 태그는 병치 및 중첩 될 수 있습니다.
"조기"닫힌 태그를 처리해야합니다. 예를 들어에서 abcA에서는 A가장 바깥 쪽을 닫으 a므로로 구문 분석됩니다 (a(b(c))).
추가 닫는 태그는 무시 aAB됩니다 (a).
겹치는 태그는 처리되지 않습니다. 예를 들어, 추가 닫는 태그 ( -> ( ) + (extra)) 의 이전 규칙에 따라 not 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))내 코드는 다음 경우를 제외하고 짧은 수 있었다..