aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarvin Borner2023-12-14 13:36:56 +0100
committerMarvin Borner2023-12-14 13:36:56 +0100
commitb140ffa5bc4d035b46a2e9b33763baaa8cce58c7 (patch)
tree8cb221d7ac441b4084c7006e04c4100ce70cf354
parentca4f6e6c45e9d3eab854309fa379de71289ab99c (diff)
lol
-rw-r--r--2023/14/solve.py54
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()