]> git.friedersdorff.com Git - max/advent_of_code_2021.git/blob - 10_2.py
Try day 14
[max/advent_of_code_2021.git] / 10_2.py
1 """Find and score bothersome broken brackets and fix the damn things"""
2 import pprint
3
4 parens = {
5     ")": "(",
6     "]": "[",
7     "}": "{",
8     ">": "<"
9 }
10
11 parens_rev = {v: k for k, v in parens.items()}
12
13 scores = {
14     ")": 1,
15     "]": 2,
16     "}": 3,
17     ">": 4,
18 }
19
20 line_scores = []
21 with open("10_input.txt") as f:
22     for line in f:
23         stack = []
24         broken = False
25         for char in line.strip():
26             if char in "(<[{":
27                 stack.append(char)
28             else:
29                 if len(stack) == 0 or parens[char] != stack.pop():
30                     broken = True
31                     break
32
33         if not broken:
34             line_score = 0
35             for i in range(len(stack) - 1, -1, -1):
36                 open_char = stack[i]
37                 close_char = parens_rev[stack[i]]
38                 line_score *= 5
39                 line_score += scores[parens_rev[stack[i]]]
40             line_scores.append(line_score)
41
42 line_scores.sort()
43 middle_i = (len(line_scores) - 1)//2
44 print(line_scores[middle_i])