diff options
author | mhsn <mail@mhsn.net> | 2025-09-12 20:20:58 +0100 |
---|---|---|
committer | mhsn <mail@mhsn.net> | 2025-09-12 20:36:09 +0100 |
commit | 6b733982f9f240c1c97f1fa705bfbe4cd93c640e (patch) | |
tree | dad623203c8bb40f372e0ea14479c2f564efda79 /2024/18/python.py | |
parent | 9299c4ef655b88eb8b571864c939c78b27f77723 (diff) | |
download | aoc-6b733982f9f240c1c97f1fa705bfbe4cd93c640e.tar.gz aoc-6b733982f9f240c1c97f1fa705bfbe4cd93c640e.zip |
simplify python file structure
Diffstat (limited to '2024/18/python.py')
-rwxr-xr-x | 2024/18/python.py | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/2024/18/python.py b/2024/18/python.py new file mode 100755 index 0000000..1f987c6 --- /dev/null +++ b/2024/18/python.py @@ -0,0 +1,47 @@ +#!/usr/bin/env python3 + +from bisect import bisect_left +from collections import deque +from fileinput import input + +coords = [line.strip().split(",") for line in input()] +grid = {complex(int(x), int(y)): t for t, [x, y] in enumerate(coords)} + + +def solve(size, delay): + q = deque([(0, 0)]) + seen = set() + while q: + curr, t = q.popleft() + if curr in seen: + continue + if curr == complex(size, size): + return t + seen.add(curr) + + for d in [1, -1, 1j, -1j]: + x = curr + d + if not (0 <= x.real <= size and 0 <= x.imag <= size): + continue + if x in grid and grid[x] < delay: + continue + q.append((x, t + 1)) + return None + + +silver = solve(70, 1024) +# silver = solve(6, 12) # test.txt + +gold = ",".join( + coords[ + bisect_left( + list(range(len(grid))), + True, + key=lambda x: solve(70, x) is None, + ) + - 1 + ] +) + +print("silver:", silver) +print("gold:", gold) |