from util import get_input input = get_input("10.input") corresp = { ')': '(', ']': '[', '}': '{', '>': '<', } def find_illegal(line): stack = [] for c in line: if c in ['(', '[', '{', '<']: stack.append(c) else: if len(stack) == 0: return None if stack[-1] != corresp[c]: return c else: stack.pop() return stack points = { ')': 3, ']': 57, '}': 1197, '>': 25137, } results = [find_illegal(line) for line in input] print("Part 1:", sum([points.get(c, 0) for c in results if type(c) == str])) remaining = [stack for stack in results if type(stack) == list] points = { '(': 1, '[': 2, '{': 3, '<': 4, } def get_score(stack): sum = 0 while len(stack) > 0: sum *= 5 sum += points[stack.pop()] return sum scores = [get_score(s) for s in remaining] scores.sort() print("Part 2:", scores[int(len(scores) / 2)])