mirror of
https://github.com/bertptrs/adventofcode.git
synced 2025-12-27 05:40:32 +01:00
Implement day 25, in python
This commit is contained in:
62
2017/day-25/input.txt
Normal file
62
2017/day-25/input.txt
Normal file
@@ -0,0 +1,62 @@
|
||||
Begin in state A.
|
||||
Perform a diagnostic checksum after 12399302 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 right.
|
||||
- Continue with state C.
|
||||
|
||||
In state B:
|
||||
If the current value is 0:
|
||||
- Write the value 0.
|
||||
- Move one slot to the left.
|
||||
- Continue with state A.
|
||||
If the current value is 1:
|
||||
- Write the value 0.
|
||||
- Move one slot to the right.
|
||||
- Continue with state D.
|
||||
|
||||
In state C:
|
||||
If the current value is 0:
|
||||
- Write the value 1.
|
||||
- Move one slot to the right.
|
||||
- Continue with state D.
|
||||
If the current value is 1:
|
||||
- Write the value 1.
|
||||
- Move one slot to the right.
|
||||
- Continue with state A.
|
||||
|
||||
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 0.
|
||||
- Move one slot to the left.
|
||||
- Continue with state D.
|
||||
|
||||
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 left.
|
||||
- Continue with state B.
|
||||
|
||||
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.
|
||||
56
2017/day-25/solution.py
Executable file
56
2017/day-25/solution.py
Executable file
@@ -0,0 +1,56 @@
|
||||
#!/usr/bin/python
|
||||
import fileinput
|
||||
import re
|
||||
|
||||
def read_action(it):
|
||||
to_write = 1 if "1" in next(it) else 0
|
||||
offset = 1 if "right" in next(it) else -1
|
||||
goto = next(it).strip()[-2]
|
||||
|
||||
return (to_write, offset, goto)
|
||||
|
||||
def read_input():
|
||||
in_iter = fileinput.input()
|
||||
|
||||
initial = next(in_iter).strip()[-2]
|
||||
runs = int(next(in_iter).split(" ")[-2])
|
||||
states = {}
|
||||
|
||||
for line in in_iter:
|
||||
line = line.strip()
|
||||
|
||||
if not line:
|
||||
continue
|
||||
|
||||
state = line[-2]
|
||||
next(in_iter)
|
||||
|
||||
if_0 = read_action(in_iter)
|
||||
next(in_iter)
|
||||
|
||||
if_1 = read_action(in_iter)
|
||||
|
||||
states[state] = (if_0, if_1)
|
||||
|
||||
return initial, runs, states
|
||||
|
||||
state, steps, states = read_input()
|
||||
|
||||
ones = set()
|
||||
pos = 0
|
||||
|
||||
for _ in range(steps):
|
||||
if pos in ones:
|
||||
instr = states[state][1]
|
||||
else:
|
||||
instr = states[state][0]
|
||||
|
||||
if instr[0] == 1:
|
||||
ones.add(pos)
|
||||
else:
|
||||
ones.discard(pos)
|
||||
|
||||
pos += instr[1]
|
||||
state = instr[2]
|
||||
|
||||
print(len(ones))
|
||||
Reference in New Issue
Block a user