diff options
author | mhsn <mail@mhsn.net> | 2024-12-21 11:39:25 +0000 |
---|---|---|
committer | mhsn <mail@mhsn.net> | 2024-12-21 11:39:25 +0000 |
commit | b5c1d850bb10e6c14e908766b1429f1c297ca573 (patch) | |
tree | 80acb90e0f9ea1b64a2220c1747dc107a1f1f026 | |
parent | b21aae680d29698242e08991d90171f1fc2aeeaf (diff) | |
download | aoc-b5c1d850bb10e6c14e908766b1429f1c297ca573.tar.gz aoc-b5c1d850bb10e6c14e908766b1429f1c297ca573.zip |
2024-15 python p1
-rw-r--r-- | 2024/15/python/main.py | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/2024/15/python/main.py b/2024/15/python/main.py new file mode 100644 index 0000000..9ea386a --- /dev/null +++ b/2024/15/python/main.py @@ -0,0 +1,38 @@ +from fileinput import input +from itertools import takewhile + +inp = map(str.strip, input()) + +grid = { + complex(x, y): c + for y, line in enumerate(takewhile(bool, inp)) + for x, c in enumerate(line) +} +moves = "".join(inp) + +bot = next(p for p, c in grid.items() if c == "@") + + +def push(x, v): + match grid[x]: + case ".": + return True + case "#": + return False + case _ if push(x + v, v): + grid[x + v] = grid[x] + return True + + +dirs = {">": 1, "v": 1j, "<": -1, "^": -1j} +for m in map(dirs.get, moves): + if push(bot, m): + grid[bot] = "." + bot += m + + +silver = int(sum(p.real + 100 * p.imag for p, c in grid.items() if c == "O")) +gold = 0 + +print("silver:", silver) +print("gold:", gold) |