diff options
author | Marvin Borner | 2024-12-06 12:23:26 +0100 |
---|---|---|
committer | Marvin Borner | 2024-12-06 12:23:26 +0100 |
commit | 016c9244ac904ebc19d05b02adbced07a669a1d4 (patch) | |
tree | a4f23b636c3f47f39077318e3c7b8917b1caf386 | |
parent | 6e53c274e8106f3c88ab9ac1cad40cfc2e9e28cb (diff) |
no timeeeee
-rwxr-xr-x | 2024/06/solve.py | 59 |
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() |