aboutsummaryrefslogtreecommitdiff
path: root/2023/14/solve.py
diff options
context:
space:
mode:
authorMarvin Borner2023-12-14 14:10:49 +0100
committerMarvin Borner2023-12-14 14:10:49 +0100
commit9c60589f7a051664f211727d9d28068210fe813a (patch)
tree77182e8dae0e0d49e70adb36823037354d27017a /2023/14/solve.py
parentb140ffa5bc4d035b46a2e9b33763baaa8cce58c7 (diff)
Added hyper cycle detection system
Diffstat (limited to '2023/14/solve.py')
-rw-r--r--2023/14/solve.py31
1 files changed, 25 insertions, 6 deletions
diff --git a/2023/14/solve.py b/2023/14/solve.py
index cedaf8f..ae8f674 100644
--- a/2023/14/solve.py
+++ b/2023/14/solve.py
@@ -24,26 +24,45 @@ def tilt(mp, d):
return mp
-def part1():
+def load(mp):
res = 0
-
- mp = tilt(L, 0)
-
for i, l in enumerate(mp):
res += (len(mp) - i) * l.count("O")
- print(res)
+ return res
+
+
+def part1():
+ res = 0
+ mp = tilt(L, 0)
+ print(load(mp))
def part2():
res = 0
+ hist = {}
+ cycle = 0
+
mp = L
- for i in range(100):
+ i = 0
+ while True:
mp = tilt(mp, 0)
mp = tilt(mp, 1)
mp = tilt(mp, 2)
mp = tilt(mp, 3)
+ if cycle:
+ if i % cycle == 0:
+ break
+ else:
+ key = tuple(tuple(l) for l in mp)
+ if key in hist:
+ cycle = i - hist[key] - 1
+ else:
+ hist[key] = i
+
+ i += 1
+
res = 0
for j, l in enumerate(mp):
res += (len(mp) - j) * l.count("O")