diff options
author | Marvin Borner | 2023-12-14 14:10:49 +0100 |
---|---|---|
committer | Marvin Borner | 2023-12-14 14:10:49 +0100 |
commit | 9c60589f7a051664f211727d9d28068210fe813a (patch) | |
tree | 77182e8dae0e0d49e70adb36823037354d27017a /2023/14/solve.py | |
parent | b140ffa5bc4d035b46a2e9b33763baaa8cce58c7 (diff) |
Added hyper cycle detection system
Diffstat (limited to '2023/14/solve.py')
-rw-r--r-- | 2023/14/solve.py | 31 |
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") |