summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormhsn <mail@mhsn.net>2024-12-21 11:39:25 +0000
committermhsn <mail@mhsn.net>2024-12-21 11:39:25 +0000
commitb5c1d850bb10e6c14e908766b1429f1c297ca573 (patch)
tree80acb90e0f9ea1b64a2220c1747dc107a1f1f026
parentb21aae680d29698242e08991d90171f1fc2aeeaf (diff)
downloadaoc-b5c1d850bb10e6c14e908766b1429f1c297ca573.tar.gz
aoc-b5c1d850bb10e6c14e908766b1429f1c297ca573.zip
2024-15 python p1
-rw-r--r--2024/15/python/main.py38
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)