| @@ -0,0 +1,23 @@ | |||
| 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] | |||