"""Find and score bothersome broken brackets and fix the damn things""" import pprint parens = { ")": "(", "]": "[", "}": "{", ">": "<" } parens_rev = {v: k for k, v in parens.items()} scores = { ")": 1, "]": 2, "}": 3, ">": 4, } line_scores = [] with open("10_input.txt") as f: for line in f: stack = [] broken = False for char in line.strip(): if char in "(<[{": stack.append(char) else: if len(stack) == 0 or parens[char] != stack.pop(): broken = True break if not broken: line_score = 0 for i in range(len(stack) - 1, -1, -1): open_char = stack[i] close_char = parens_rev[stack[i]] line_score *= 5 line_score += scores[parens_rev[stack[i]]] line_scores.append(line_score) line_scores.sort() middle_i = (len(line_scores) - 1)//2 print(line_scores[middle_i])