From b140ffa5bc4d035b46a2e9b33763baaa8cce58c7 Mon Sep 17 00:00:00 2001 From: Marvin Borner Date: Thu, 14 Dec 2023 13:36:56 +0100 Subject: lol --- 2023/14/solve.py | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 2023/14/solve.py 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() -- cgit v1.2.3