pts = {')': 3, ']': 57, '}': 1197, '>': 25137} | |||||
objs = '()[]{}<>' | |||||
fam = lambda c: objs.index(c) // 2 | |||||
val = lambda c: objs.index(c) % 2 | |||||
ans1 = 0 | |||||
scores = [] | |||||
for ln in text.splitlines(): | |||||
stack = [] | |||||
for c in ln: | |||||
if val(c) == 0: | |||||
stack.append(c) | |||||
elif fam(c) == fam(stack[-1]) and val(c) == 1: | |||||
stack.pop() | |||||
else: | |||||
ans1 += pts[c] | |||||
break | |||||
else: | |||||
score = 0 | |||||
while stack: | |||||
score *= 5 | |||||
score += fam(stack.pop()) + 1 | |||||
scores.append(score) | |||||
ans2 = sorted(scores)[len(scores) // 2] |