-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathday08.py
98 lines (69 loc) · 2.05 KB
/
day08.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
import numpy as np
from copy import deepcopy
f = open("day08_input.txt", "r")
rules = []
for line in f:
line = line[:-1]
rules.append(line)
# print(rules[-1])
exec_order = []
acc = 0
acc_log = [0]
current_exec_index = 0
while len(exec_order) == len(set(exec_order)):
rule = rules[current_exec_index]
action = rule.split(' ')[0]
count = int(rule.split(' ')[1])
if action == 'nop':
current_exec_index += 1
elif action == 'acc':
current_exec_index += 1
acc += count
elif action == 'jmp':
current_exec_index += count
if current_exec_index == len(rules):
break
exec_order.append(current_exec_index)
acc_log.append(acc)
# print(rule, current_exec_index, acc)
print(acc_log[-1])
for idx in range(len(rules)):
rule = rules[idx]
action = rule.split(' ')[0]
count_str = rule.split(' ')[1]
count = int(rule.split(' ')[1])
''' change rule '''
if action == 'acc':
continue
elif action == 'nop':
rules[idx] = 'jmp ' + count_str
elif action == 'jmp':
rules[idx] = 'nop ' + count_str
exec_order = []
acc = 0
acc_log = [0]
# print(rules)
current_exec_index = 0
while len(exec_order) == len(set(exec_order)):
while_rule = rules[current_exec_index]
while_action = while_rule.split(' ')[0]
while_count = int(while_rule.split(' ')[1])
if while_action == 'nop':
current_exec_index += 1
elif while_action == 'acc':
current_exec_index += 1
acc += while_count
elif while_action == 'jmp':
current_exec_index += while_count
if current_exec_index == len(rules):
break
exec_order.append(current_exec_index)
acc_log.append(acc)
if current_exec_index == len(rules):
break
''' change rule back '''
if action == 'nop':
rules[idx] = 'nop ' + count_str
elif action == 'jmp':
rules[idx] = 'jmp ' + count_str
print(acc)