]> git.friedersdorff.com Git - max/advent_of_code_2021.git/commitdiff
Do day 10
authorMaximilian Friedersdorff <max@friedersdorff.com>
Fri, 10 Dec 2021 20:55:01 +0000 (20:55 +0000)
committerMaximilian Friedersdorff <max@friedersdorff.com>
Fri, 10 Dec 2021 20:55:01 +0000 (20:55 +0000)
10_1.py [new file with mode: 0644]
10_2.py [new file with mode: 0644]

diff --git a/10_1.py b/10_1.py
new file mode 100644 (file)
index 0000000..a6391b2
--- /dev/null
+++ b/10_1.py
@@ -0,0 +1,29 @@
+"""Find and score bothersome broken brackets"""
+
+parens = {
+    ")": "(",
+    "]": "[",
+    "}": "{",
+    ">": "<"
+}
+scores = {
+    ")": 3,
+    "]": 57,
+    "}": 1197,
+    ">": 25137,
+}
+
+broken_chars = []
+with open("10_input.txt") as f:
+    for line in f:
+        stack = []
+        for char in line.strip():
+            if char in "(<[{":
+                stack.append(char)
+            else:
+                if len(stack) == 0 or parens[char] != stack.pop():
+                    broken_chars.append(char)
+                    break
+
+print(broken_chars)
+print(sum([scores[char] for char in broken_chars]))
diff --git a/10_2.py b/10_2.py
new file mode 100644 (file)
index 0000000..c785b85
--- /dev/null
+++ b/10_2.py
@@ -0,0 +1,44 @@
+"""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])