adventOfCode/2023/14/part2.py
2023-12-15 09:41:37 +01:00

83 lines
No EOL
1.8 KiB
Python

from functools import lru_cache
map: list[list[str]] = []
for line in open("./input1"):
map.append([x for x in line.strip()])
def printmap():
for line in map:
print("".join(line))
printmap()
# @lru_cache(maxsize=20)
def north(map):
moved = 1
while moved:
moved = 0
for i in range(1, len(map)):
for j in range(len(map[i])):
if map[i][j] == "O" and map[i-1][j] == ".":
map[i][j] = "."
map[i-1][j] = "O"
moved += 1
# @lru_cache(maxsize=20)
def west(map):
moved = 1
while moved:
moved = 0
for i in range(len(map)):
for j in range(1, len(map[i])):
if map[i][j] == "O" and map[i][j-1] == ".":
map[i][j] = "."
map[i][j-1] = "O"
moved += 1
# @lru_cache(maxsize=20)
def south(map):
moved = 1
while moved:
moved = 0
for i in range(len(map)-1):
for j in range(len(map[i])):
if map[i][j] == "O" and map[i+1][j] == ".":
map[i][j] = "."
map[i+1][j] = "O"
moved += 1
# @lru_cache(maxsize=20)
def east(map):
moved = 1
while moved:
moved = 0
for i in range(len(map)):
for j in range(len(map[i])-1):
if map[i][j] == "O" and map[i][j+1] == ".":
map[i][j] = "."
map[i][j+1] = "O"
moved += 1
def cycle():
north(map)
west(map)
south(map)
east(map)
for i in range(1_000_000_000):
cycle()
print()
printmap()
value = 0
for i in range(len(map)):
for j in range(len(map[i])):
if map[i][j] == "O":
value += len(map) - i
print(value)