2024 day 6, brute force.
This commit is contained in:
parent
cd6f97cd7e
commit
2c1a0b919b
@ -1,10 +1,106 @@
|
|||||||
import sys
|
import sys
|
||||||
|
from typing import TypeAlias
|
||||||
|
|
||||||
|
|
||||||
|
def move(
|
||||||
|
lines: list[str], pos: tuple[int, int], dir: tuple[int, int]
|
||||||
|
) -> tuple[tuple[int, int] | None, list[tuple[int, int]]]:
|
||||||
|
n_rows, n_cols = len(lines), len(lines[0])
|
||||||
|
row, col = pos
|
||||||
|
marked: list[tuple[int, int]] = []
|
||||||
|
|
||||||
|
while True:
|
||||||
|
marked.append((row, col))
|
||||||
|
|
||||||
|
if not (0 <= row + dir[0] < n_rows and 0 <= col + dir[1] < n_cols):
|
||||||
|
pos = None
|
||||||
|
break
|
||||||
|
|
||||||
|
if lines[row + dir[0]][col + dir[1]] != ".":
|
||||||
|
pos = (row, col)
|
||||||
|
break
|
||||||
|
|
||||||
|
row += dir[0]
|
||||||
|
col += dir[1]
|
||||||
|
|
||||||
|
return pos, marked
|
||||||
|
|
||||||
|
|
||||||
|
def print_grid(
|
||||||
|
lines: list[str], marked: set[tuple[int, int]], current_pos: tuple[int, int] | None
|
||||||
|
):
|
||||||
|
chars = list(map(list, lines))
|
||||||
|
|
||||||
|
for i, j in marked:
|
||||||
|
chars[i][j] = "X"
|
||||||
|
|
||||||
|
if current_pos:
|
||||||
|
chars[current_pos[0]][current_pos[1]] = "T"
|
||||||
|
|
||||||
|
for line in chars:
|
||||||
|
print("".join(line))
|
||||||
|
print()
|
||||||
|
|
||||||
|
|
||||||
|
ROTATE = {(-1, 0): (0, 1), (0, 1): (1, 0), (1, 0): (0, -1), (0, -1): (-1, 0)}
|
||||||
|
|
||||||
|
|
||||||
lines = sys.stdin.read().splitlines()
|
lines = sys.stdin.read().splitlines()
|
||||||
|
n_rows, n_cols = len(lines), len(lines[0])
|
||||||
|
start_pos = next(
|
||||||
|
(i, j) for i in range(n_rows) for j in range(n_cols) if lines[i][j] == "^"
|
||||||
|
)
|
||||||
|
lines[start_pos[0]] = lines[start_pos[0]].replace("^", ".")
|
||||||
|
|
||||||
answer_1 = ...
|
# part 1
|
||||||
|
marked: set[tuple[int, int]] = set()
|
||||||
|
|
||||||
answer_2 = ...
|
current_pos: tuple[int, int] | None = start_pos
|
||||||
|
current_dir = (-1, 0)
|
||||||
|
|
||||||
|
while current_pos is not None:
|
||||||
|
# print_grid(lines, marked, current_pos)
|
||||||
|
new_pos, new_marked = move(lines, current_pos, current_dir)
|
||||||
|
|
||||||
|
marked = marked.union(new_marked)
|
||||||
|
|
||||||
|
current_pos = new_pos
|
||||||
|
current_dir = ROTATE[current_dir]
|
||||||
|
|
||||||
|
# print_grid(lines, marked, current_pos)
|
||||||
|
|
||||||
|
answer_1 = len(marked)
|
||||||
|
|
||||||
|
answer_2 = 0
|
||||||
|
for row in range(n_rows):
|
||||||
|
for col in range(n_cols):
|
||||||
|
if (row, col) == start_pos or lines[row][col] != ".":
|
||||||
|
continue
|
||||||
|
|
||||||
|
chars = list(map(list, lines))
|
||||||
|
|
||||||
|
chars[row][col] = "#"
|
||||||
|
|
||||||
|
current_pos = start_pos
|
||||||
|
current_dir = (-1, 0)
|
||||||
|
|
||||||
|
found: set[tuple[tuple[int, int], tuple[int, int]]] = set()
|
||||||
|
|
||||||
|
while current_pos is not None:
|
||||||
|
if current_pos != start_pos:
|
||||||
|
found.add((current_pos, current_dir))
|
||||||
|
|
||||||
|
new_pos, new_marked = move(
|
||||||
|
["".join(line) for line in chars], current_pos, current_dir
|
||||||
|
)
|
||||||
|
|
||||||
|
current_pos = new_pos
|
||||||
|
current_dir = ROTATE[current_dir]
|
||||||
|
|
||||||
|
if (current_pos, current_dir) in found:
|
||||||
|
print(row, col)
|
||||||
|
answer_2 += 1
|
||||||
|
break
|
||||||
|
|
||||||
print(f"answer 1 is {answer_1}")
|
print(f"answer 1 is {answer_1}")
|
||||||
print(f"answer 2 is {answer_2}")
|
print(f"answer 2 is {answer_2}")
|
||||||
|
@ -0,0 +1,130 @@
|
|||||||
|
..............................#....#..........................................#....................#...........#..##..............
|
||||||
|
.......#............................#..........#...................................................#...................#........#.
|
||||||
|
......................................#..................#.................#....................................#...#............#
|
||||||
|
........#...................#.....................................................................................#...............
|
||||||
|
.............................#........................#.......................#........#............................#.............
|
||||||
|
........................##......................................#...............#...................................#.............
|
||||||
|
...#................#.......................#....#........................#.............................#.........................
|
||||||
|
..............................................................#............##......#.......#..#.....................#.....#.......
|
||||||
|
.........................#..#............##.......#.........#....................#.......................##...............#....#..
|
||||||
|
..............#....................................................................#....#........................................#
|
||||||
|
.................#............#.....#.....#............................................................#......................#...
|
||||||
|
.#.................#.................#.....................................#......................................................
|
||||||
|
...........##..#.......#.........#.#......#..................#.....................#.....#........................................
|
||||||
|
....................................................#........#........#....................................#......................
|
||||||
|
........#........#..........#..........................................................#.##.........#..........................#..
|
||||||
|
...........#............................#............##.............................#...............................#............#
|
||||||
|
............#......#...............#...........#................................................#.................................
|
||||||
|
............#..#.#......#............................................................................#.##....#............#.......
|
||||||
|
................#..............#......#...#........................#.......#.........................#............................
|
||||||
|
..........................................................................#............#........#......#.#......#.............#...
|
||||||
|
..........#...#...........................................................#......#..........................................#.....
|
||||||
|
.......................................#....#..............#...............#....#............#.............#......................
|
||||||
|
...........#............................................#................................#..............#.........................
|
||||||
|
..##...............#.................................................................................#.......#.........#.........#
|
||||||
|
..........#......#......#.........................................#..........#...##.................................#........#....
|
||||||
|
..........#.......................................................................#..........#...............##.#....#............
|
||||||
|
....#.............#..#......#..........................................................#......................#...................
|
||||||
|
.......................................................................#.............##......................#............#.......
|
||||||
|
............#..#.........#...............................................................................#........................
|
||||||
|
...............##..#..................#....#....................................................................#......#..........
|
||||||
|
......#...............................................................................#..#...............#........................
|
||||||
|
.....#............................................................................#...............#......#........................
|
||||||
|
#.......................#.........................#...........#....#...#.......#..................................................
|
||||||
|
.#....................#..............#........................#....................#........###............#.#.#............#.....
|
||||||
|
.......#...#...................#................................................................................#........##.......
|
||||||
|
............#.................#.........................................#.....................................#...................
|
||||||
|
..................#...........#...................................................................................................
|
||||||
|
......................#.......#...............................#......#...........................#..................#.............
|
||||||
|
...#..........#......#..........#.....................................................#.....#.................................#...
|
||||||
|
......#.......#..............................#..............#...............................#...............................#.....
|
||||||
|
....................................................................#..........#.....#.#...#................................#.....
|
||||||
|
..............................#...#.....................##.........................................#.#...................#........
|
||||||
|
........................#....#..............#....................................................................................#
|
||||||
|
............................#......##...........................#...........#...............................#.....................
|
||||||
|
.....................................................................................#............................................
|
||||||
|
#.....................#.................#...#.......##....................#.##.....#.#.......................#....................
|
||||||
|
....................#............................#.............................................................................#..
|
||||||
|
........................#.....................................#.............#..............#......................................
|
||||||
|
...............#....#...................#............................#..#...#.....................................................
|
||||||
|
.#...........#......#...........##.#...........^.....#........................#..........#.................#......................
|
||||||
|
...#.##.........#.#......................................#...............#............#......#....................................
|
||||||
|
.....................................................#......................#.........#.......................#...................
|
||||||
|
............................................##............#....................#............................#.....................
|
||||||
|
.............................#.........................##.............#...........................................................
|
||||||
|
........................................#.............................................................................#...........
|
||||||
|
.........................................#...............#........#..........................#.#........................#.........
|
||||||
|
............................................#.................#...............................#...........#.#.......#.............
|
||||||
|
....................#.............#.........................#..........................#............................#.............
|
||||||
|
.#.................................#..........#..#.......................................................#........................
|
||||||
|
..................#..............................................#............##.....#......................................#..#..
|
||||||
|
.......#...........................................#..................#...........................................................
|
||||||
|
.#.................................................................#....................................................#.........
|
||||||
|
...........#.#........#....#...............#.........................................#........................#.........#.........
|
||||||
|
...............#......#...........#....#....#...............................#..#......#........#.....................#......#.....
|
||||||
|
.......................................................#.........#.............................#..................#...............
|
||||||
|
#........................#.........#..........................#................................#...#.....................#.......#
|
||||||
|
.............................#....................................................................................................
|
||||||
|
...#..................#....#.............................................................................................#........
|
||||||
|
..................#........#...............#............................................#..........#..#........................#..
|
||||||
|
..#...................#..................................#.......#......................#.................................#......#
|
||||||
|
.........................................#.#......##..........................#.........#..#....................................#.
|
||||||
|
..........#....#............#.....##....................................................................................#.........
|
||||||
|
.....#.........##.................................................................................................................
|
||||||
|
.............................................................................................................#.............#......
|
||||||
|
...........#.......#..............#...#............#.......................#...#......#.....................................#.....
|
||||||
|
.......#...................#...........#.....#...#..........................#...........#.........#.............................#.
|
||||||
|
..............#.....................#..........................................................#..................................
|
||||||
|
..#............#.................................................#.....#.....................#....#.............................#.
|
||||||
|
.................#..................................#....#...............................#........................................
|
||||||
|
.......#..#...........#.#..........##.#.#......................................##.#.....................................#....#....
|
||||||
|
.....#.#...#......#.............................................................#.........#..#.....................#.............#
|
||||||
|
.....................................................#..........................................#.......................#.........
|
||||||
|
........................#....................#................................#......#...........................#......#.........
|
||||||
|
..........#...........................................................#.....#.#....#...............................#...........#..
|
||||||
|
........#...............#..............#......#..............................................................#.............#......
|
||||||
|
...................................................................................................................#..............
|
||||||
|
.....#..................................................................................##...................#.......#.....#......
|
||||||
|
...#..#..............#....................................#..#.#..........#.......................................................
|
||||||
|
#..................#......##.......#..............................................................................................
|
||||||
|
........................................#....#.........................................................................#..........
|
||||||
|
#.................................#...................................................#.........#.#...............................
|
||||||
|
..........................#.....#.#.....................#..........#...................#..#...........................#.....#.....
|
||||||
|
..........................#..............................#.......#................................................................
|
||||||
|
.........................#............................#.........#.........#............#............#.#..........................#
|
||||||
|
.#.#.....................#.....................................#............#.........#..........#.............#.................#
|
||||||
|
.........#..........................................#.........................................................#...................
|
||||||
|
..........................................................#.........................#....#...#......#........................#....
|
||||||
|
.......#.#.........#.............................................#.................#...................#.................#.#......
|
||||||
|
............#..#........#..#...........#.........................................................#..............#...#.............
|
||||||
|
..........................#..............#...................................................................#....................
|
||||||
|
......#.....................#...............#......................................#......#.................#.....................
|
||||||
|
.........................................................................#.#...........................#..#....#..................
|
||||||
|
...........#.............................#...#....#...............................................................................
|
||||||
|
.................................#.....#...............#....#.#.....................................#.........................#...
|
||||||
|
.#.......#..............#....#..............................................................................#...............##....
|
||||||
|
.................................#............................#................#...#.........#...................................#
|
||||||
|
...........#......#.......#..............#.........................#.#.....................................#.......#..............
|
||||||
|
.....................#....................................#...................#...................................................
|
||||||
|
...........#...................#.....................................................................................#........#...
|
||||||
|
..................#...#....................................................................................#..#.........#.........
|
||||||
|
.............#.................................................#.........#.#.#...............................................#....
|
||||||
|
..................#............................................#.......................................................#..........
|
||||||
|
..#......#...........#............................................#...........#............#......#.....................#.........
|
||||||
|
......#.......................##..........#................................................#...................................#..
|
||||||
|
.......................................................................#.........#........#....#........................#......#..
|
||||||
|
..........#...........#...#....................................#.#.............#.#............................#...#.....#.........
|
||||||
|
.##...............................#......#.....................................................#.........................#......#.
|
||||||
|
.#.#...#.................................................#......#....................#...........................................#
|
||||||
|
.........................#..................#.............................#......................................#................
|
||||||
|
...................................#.......................#..................................#.........#.........................
|
||||||
|
.........................#...........#...............#........#..................................#...........#..............#.....
|
||||||
|
...............................#.......................................#.......#.....#.................#....#..............#......
|
||||||
|
...#...........#.....#................................................#..................#........#.............................#.
|
||||||
|
..............#........#................................#...#................................#.......#.......#........#........#..
|
||||||
|
......#....#...................................#............#.........#..#.##..................##....................#......#.....
|
||||||
|
.....#...........................#................##.............#.#...........................................#..................
|
||||||
|
#....................................................................#..#......................#..........#.......................
|
||||||
|
...........#...#..............#.........#....................#.....................#........#.......#...#.#............#..........
|
||||||
|
.......#..............#........#..##............#...............#.............#.#.......................#.#......#....#...........
|
||||||
|
....#........#..................#...............#....................#...#...............................#..........#....#..##....
|
@ -0,0 +1,10 @@
|
|||||||
|
....#.....
|
||||||
|
.........#
|
||||||
|
..........
|
||||||
|
..#.......
|
||||||
|
.......#..
|
||||||
|
..........
|
||||||
|
.#..^.....
|
||||||
|
........#.
|
||||||
|
#.........
|
||||||
|
......#...
|
Loading…
Reference in New Issue
Block a user