|
@@ -0,0 +1,25 @@
|
|
1
|
+import re
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+def set_register(r, v):
|
|
5
|
+ global registers
|
|
6
|
+ registers[r] = v
|
|
7
|
+
|
|
8
|
+registers = {'a': 1, 'b': 0, 'pc': 0}
|
|
9
|
+program = [re.split(',? ', line) for line in open('23.txt', 'r').read().splitlines()]
|
|
10
|
+instructions = {
|
|
11
|
+ 'hlf': lambda args: set_register(args[0], registers[args[0]] / 2),
|
|
12
|
+ 'tpl': lambda args: set_register(args[0], registers[args[0]] * 3),
|
|
13
|
+ 'inc': lambda args: set_register(args[0], registers[args[0]] + 1),
|
|
14
|
+ 'jmp': lambda args: set_register('pc', registers['pc'] + (int(args[0]) - 1)),
|
|
15
|
+ 'jie': lambda args: set_register('pc', registers['pc'] + (int(args[1]) - 1 if registers[args[0]] % 2 == 0 else 0)),
|
|
16
|
+ 'jio': lambda args: set_register('pc', registers['pc'] + (int(args[1]) - 1 if registers[args[0]] == 1 else 0))
|
|
17
|
+}
|
|
18
|
+
|
|
19
|
+try:
|
|
20
|
+ while True:
|
|
21
|
+ line = program[registers['pc']]
|
|
22
|
+ instructions[line[0]](line[1:])
|
|
23
|
+ registers['pc'] += 1
|
|
24
|
+except LookupError:
|
|
25
|
+ print(registers['b'])
|