Files
aocpy/2017/d22.py
2024-06-03 12:06:02 -04:00

72 lines
1.5 KiB
Python

from lib import Grid2D, add2
def part_1(data):
steps = 10_000
g = Grid2D(data)
# g.print()
dirs = [g.N, g.E, g.S, g.W]
pos = (g.n_rows // 2, g.n_cols // 2)
dir = g.N
inf = set(g.find("#"))
burst_inf = 0
for _ in range(steps):
if pos in inf:
# turn right
dir = dirs[(dirs.index(dir) + 1) % len(dirs)]
inf.remove(pos)
else:
# turn left
dir = dirs[(dirs.index(dir) - 1) % len(dirs)]
inf.add(pos)
burst_inf += 1
pos = add2(pos, dir)
print(burst_inf)
def part_2(data):
steps = 10000000
g = Grid2D(data)
dirs = [g.N, g.E, g.S, g.W]
pos = (g.n_rows // 2, g.n_cols // 2)
dir = g.N
weak = set()
inf = set(g.find("#"))
flagged = set()
burst_inf = 0
for _ in range(steps):
if pos in weak:
weak.remove(pos)
inf.add(pos)
burst_inf += 1
elif pos in inf:
dir = dirs[(dirs.index(dir) + 1) % len(dirs)]
inf.remove(pos)
flagged.add(pos)
elif pos in flagged:
dir = dirs[(dirs.index(dir) + 2) % len(dirs)]
flagged.remove(pos)
else:
dir = dirs[(dirs.index(dir) - 1) % len(dirs)]
weak.add(pos)
pos = add2(pos, dir)
print(burst_inf)
def main():
data = open(0).read()
part_1(data)
part_2(data)
if __name__ == "__main__":
main()