diff options
author | Marvin Borner | 2023-12-14 13:36:56 +0100 |
---|---|---|
committer | Marvin Borner | 2023-12-14 13:36:56 +0100 |
commit | b140ffa5bc4d035b46a2e9b33763baaa8cce58c7 (patch) | |
tree | 8cb221d7ac441b4084c7006e04c4100ce70cf354 | |
parent | ca4f6e6c45e9d3eab854309fa379de71289ab99c (diff) |
lol
-rw-r--r-- | 2023/14/solve.py | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/2023/14/solve.py b/2023/14/solve.py new file mode 100644 index 0000000..cedaf8f --- /dev/null +++ b/2023/14/solve.py @@ -0,0 +1,54 @@ +L = [l.strip() for l in open("input").readlines()] + + +def tilt(mp, d): + transposed = d == 0 or d == 2 + if transposed: # north or south + mp = list(map(list, zip(*mp))) + + pat = ".O" if d == 0 or d == 1 else "O." + + done = False + while not done: + done = True + for l in mp: + for i in range(len(l) - 1): + if f"{l[i]}{l[i+1]}" != pat: + continue + l[i + 1], l[i] = l[i], l[i + 1] + done = False + + if transposed: # north or south + mp = list(map(list, zip(*mp))) + + return mp + + +def part1(): + res = 0 + + mp = tilt(L, 0) + + for i, l in enumerate(mp): + res += (len(mp) - i) * l.count("O") + print(res) + + +def part2(): + res = 0 + + mp = L + for i in range(100): + mp = tilt(mp, 0) + mp = tilt(mp, 1) + mp = tilt(mp, 2) + mp = tilt(mp, 3) + + res = 0 + for j, l in enumerate(mp): + res += (len(mp) - j) * l.count("O") + print(res) + + +part1() +part2() |