/
day25.py
135 lines (121 loc) 路 3.4 KB
/
day25.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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#AoC Day 25 -- The Halting Problem
# !!!
import collections
file = """
Begin in state A.
Perform a diagnostic checksum after 12261543 steps.
In state A:
If the current value is 0:
- Write the value 1.
- Move one slot to the right.
- Continue with state B.
If the current value is 1:
- Write the value 0.
- Move one slot to the left.
- Continue with state C.
In state B:
If the current value is 0:
- Write the value 1.
- Move one slot to the left.
- Continue with state A.
If the current value is 1:
- Write the value 1.
- Move one slot to the right.
- Continue with state C.
In state C:
If the current value is 0:
- Write the value 1.
- Move one slot to the right.
- Continue with state A.
If the current value is 1:
- Write the value 0.
- Move one slot to the left.
- Continue with state D.
In state D:
If the current value is 0:
- Write the value 1.
- Move one slot to the left.
- Continue with state E.
If the current value is 1:
- Write the value 1.
- Move one slot to the left.
- Continue with state C.
In state E:
If the current value is 0:
- Write the value 1.
- Move one slot to the right.
- Continue with state F.
If the current value is 1:
- Write the value 1.
- Move one slot to the right.
- Continue with state A.
In state F:
If the current value is 0:
- Write the value 1.
- Move one slot to the right.
- Continue with state A.
If the current value is 1:
- Write the value 1.
- Move one slot to the right.
- Continue with state E.
""".strip().split('\n')
def main(file):
tape = collections.defaultdict(bool)
cursor = 0
state = 'A'
for _ in range(12261543):
if state == 'A':
if not tape[cursor]:
tape[cursor] = True
cursor += 1
state = 'B'
else:
tape[cursor] = False
cursor -= 1
state = 'C'
elif state == 'B':
if not tape[cursor]:
tape[cursor] = True
cursor -= 1
state = 'A'
else:
tape[cursor] = True
cursor += 1
state = 'C'
elif state == 'C':
if not tape[cursor]:
tape[cursor] = True
cursor += 1
state = 'A'
else:
tape[cursor] = False
cursor -= 1
state = 'D'
elif state == 'D':
if not tape[cursor]:
tape[cursor] = True
cursor -= 1
state = 'E'
else:
tape[cursor] = True
cursor -= 1
state = 'C'
elif state == 'E':
if not tape[cursor]:
tape[cursor] = True
cursor += 1
state = 'F'
else:
tape[cursor] = True
cursor += 1
state = 'A'
elif state == 'F':
if not tape[cursor]:
tape[cursor] = True
cursor += 1
state = 'A'
else:
cursor += 1
state = 'E'
return sum(tape.values())
print(main(file))