56 lines
1012 B
Python
56 lines
1012 B
Python
from lib import *
|
|
|
|
EXAMPLE = """
|
|
...........
|
|
.....###.#.
|
|
.###.##..#.
|
|
..#.#...#..
|
|
....#.#....
|
|
.##..S####.
|
|
.##..#...#.
|
|
.......##..
|
|
.##.#.####.
|
|
.##..##.##.
|
|
...........
|
|
"""
|
|
|
|
def solve(i: Input, second=False):
|
|
res = 0
|
|
g = i.grid2()
|
|
s = g.find('S')[0]
|
|
g[s] = 'O'
|
|
# steps = 64
|
|
steps = 26501365
|
|
seen = set()
|
|
for i in range(steps):
|
|
os = tuple(g.find('O'))
|
|
if os in seen:
|
|
seen.add(os)
|
|
print(f"SEEN {i}")
|
|
break
|
|
|
|
for o in os:
|
|
g[o] = '.'
|
|
|
|
for o in os:
|
|
for nb in g.neighbors_ort(o):
|
|
if not g[nb] == "#":
|
|
g[nb] = 'O'
|
|
return len(g.find('O'))
|
|
|
|
def main():
|
|
DAY_INPUT = "i21.txt"
|
|
|
|
print("Example 1:", solve(Input(EXAMPLE)))
|
|
print("Solution 1:", solve(Input(DAY_INPUT)))
|
|
return
|
|
|
|
print("Example 2:", solve(Input(EXAMPLE), True))
|
|
return
|
|
|
|
print("Solution 2:", solve(Input(DAY_INPUT), True))
|
|
return
|
|
|
|
if __name__ == "__main__":
|
|
main()
|