| 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] |