From b5c1d850bb10e6c14e908766b1429f1c297ca573 Mon Sep 17 00:00:00 2001 From: mhsn Date: Sat, 21 Dec 2024 11:39:25 +0000 Subject: 2024-15 python p1 --- 2024/15/python/main.py | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 2024/15/python/main.py 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) -- cgit v1.2.3