aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarvin Borner2024-12-06 12:23:26 +0100
committerMarvin Borner2024-12-06 12:23:26 +0100
commit016c9244ac904ebc19d05b02adbced07a669a1d4 (patch)
treea4f23b636c3f47f39077318e3c7b8917b1caf386
parent6e53c274e8106f3c88ab9ac1cad40cfc2e9e28cb (diff)
no timeeeee
-rwxr-xr-x2024/06/solve.py59
1 files changed, 59 insertions, 0 deletions
diff --git a/2024/06/solve.py b/2024/06/solve.py
new file mode 100755
index 0000000..9239aa9
--- /dev/null
+++ b/2024/06/solve.py
@@ -0,0 +1,59 @@
+#!/bin/env python
+
+
+L = [l.strip() for l in open("input").readlines()]
+
+UP = 0
+RIGHT = 1
+DOWN = 2
+LEFT = 3
+
+YLEN = len(L)
+XLEN = len(L[0])
+
+
+def start():
+ for y, row in enumerate(L):
+ for x, col in enumerate(row):
+ if col == "^":
+ L[y] = "".join(map(lambda c: "." if c == "^" else c, L[y]))
+ return (y, x, UP)
+
+
+def get(y, x):
+ if 0 <= y < YLEN and 0 <= x < XLEN:
+ return L[y][x]
+ return "#"
+
+
+def move(y, x, d):
+ if d == UP and get(y - 1, x) == ".":
+ return (y - 1, x, UP)
+ if d == RIGHT and get(y, x + 1) == ".":
+ return (y, x + 1, RIGHT)
+ if d == DOWN and get(y + 1, x) == ".":
+ return (y + 1, x, DOWN)
+ if d == LEFT and get(y, x - 1) == ".":
+ return (y, x - 1, LEFT)
+
+ # else: rotate right
+ return (y, x, (d + 1) % 4)
+
+
+def part1():
+ visits = set()
+ y, x, d = start()
+ visits.add((y, x))
+ while not (
+ (d == UP and y == 0)
+ or (d == RIGHT and x == XLEN - 1)
+ or (d == DOWN and y == YLEN - 1)
+ or (d == LEFT and x == 0)
+ ):
+ y, x, d = move(y, x, d)
+ visits.add((y, x))
+
+ print(len(visits))
+
+
+part1()