summary refs log tree commit diff stats
path: root/day23.py
diff options
context:
space:
mode:
Diffstat (limited to 'day23.py')
-rw-r--r--day23.py44
1 files changed, 44 insertions, 0 deletions
diff --git a/day23.py b/day23.py
new file mode 100644
index 0000000..5e0763b
--- /dev/null
+++ b/day23.py
@@ -0,0 +1,44 @@
+#!/usr/bin/env python
+
+with open('day23.txt') as data:
+    program = [tuple(line.strip().replace(',', '').split()) for line in data]
+
+def execute_program(insts, a_reg = 0):
+    registers = {
+        'a': a_reg,
+        'b': 0,
+        'pc': 0
+    }
+
+    def exec_inst(inst):
+        match inst:
+            case 'hlf', reg:
+                registers[reg] /= 2
+                registers['pc'] += 1
+            case 'tpl', reg:
+                registers[reg] *= 3
+                registers['pc'] += 1
+            case 'inc', reg:
+                registers[reg] += 1
+                registers['pc'] += 1
+            case 'jmp', offset:
+                registers['pc'] += int(offset)
+            case 'jie', reg, offset:
+                if registers[reg] % 2 == 0:
+                    registers['pc'] += int(offset)
+                else:
+                    registers['pc'] += 1
+            case 'jio', reg, offset:
+                if registers[reg] == 1:
+                    registers['pc'] += int(offset)
+                else:
+                    registers['pc'] += 1
+    while True:
+        exec_inst(insts[registers['pc']])
+        if registers['pc'] >= len(insts):
+            print(registers['b'])
+            break
+# part 1
+execute_program(program, 0)
+# part 2
+execute_program(program, 1)