day 06
This commit is contained in:
parent
be46fa62dd
commit
436a73f410
|
|
@ -0,0 +1,130 @@
|
|||
#.............#.#...........................................................#..........#...........................#..........#...
|
||||
............#......................#.......#..#.........#...................##....................................................
|
||||
..............#...........#..#.......#.........#.#...........................#................................#......#............
|
||||
.....#......................................#......#..#...................#....................#......................#...........
|
||||
...#............................#................................#................................................................
|
||||
..........#..................#.....#......................................................#.......................................
|
||||
..#........#.......#.#...............................................................#......#.................................#...
|
||||
.#....#................#................#.....#...................#...............................................#..#............
|
||||
.......................................................................................#...#.#....#........##......#........#.#.##
|
||||
............................................#.................#.....................#..........................#..................
|
||||
....#..........##......................#.................................................................................#........
|
||||
......#.............##.........#.......#.........#.......#.............#...#.......#..............................................
|
||||
.#............................................................................#..........#....#...................................
|
||||
...#..#....#..............................#...........................................................................#...........
|
||||
.............#....................................................................................................................
|
||||
................................#..................##...................................#...............................#......#..
|
||||
..........#.........#.................#..........###...........................................#............#...#.................
|
||||
.............#....................................#.......#.#.#............#............................................#.........
|
||||
......#.#..............................................................................................#.........................#
|
||||
...#...#.........#.........#..#......#................##.................#........................................................
|
||||
.................................#......................#........#................#........................#......................
|
||||
.......................##..............#................#................#..............................#.........................
|
||||
.......#...#.....#.....##........................#..................##.....#......................................................
|
||||
.............................................#...........................#..........................................#.....#.......
|
||||
.........................#...............#....#..............#.......#...............#.#.................#.................#......
|
||||
...........................................................#....#..................................#..............................
|
||||
..........................#.................................................#............................##....#..................
|
||||
.................#...#.........................................................#........................#.....#..#................
|
||||
.........................#....#................................................#...#.....................#....#...........#.......
|
||||
................................................##.......#.#....................................#.......##........................
|
||||
..........##...#.......................#....#..#....................#........................#....................................
|
||||
#......#.......................#............#.....................................................................#...............
|
||||
.......#.......#...#..#..........#.......................................#.............#......#...................................
|
||||
...............#............#..................#.................................................................................#
|
||||
.......#...........#.......................##.....#.........#...........#...................#......#.........#.............##....#
|
||||
...................#.........................#......#..........................................#..........#.........#......#......
|
||||
.....#............#..............#...#......#....................#.............#..................................................
|
||||
................................................#........#.....#...................#.....................................#.....#..
|
||||
......................#.#...##......................##...............................................#.................#..........
|
||||
#...................#.........................#...........#.....#................#.....................#...................#......
|
||||
....#................#.....#.............#.....................................#....#...#.................................#.......
|
||||
.........#.....................................................................................................#.#.......#........
|
||||
.........#..........##..............................#............................#.#.............................#................
|
||||
#....#.#..............................................##...#...#...............#.............#....................................
|
||||
........#..#.#...................#.......................................................................#.............#..#.#...#.
|
||||
.................................................................................................................#.......#........
|
||||
............................................#..#...............##........#..........#.......................................#....#
|
||||
........#...........................#............................#.....#........................#..........#...#..........#.......
|
||||
.#...........#...................................................#...........................................#................#.#.
|
||||
............#...............................#........#...........#..........#...........#.#..............#........................
|
||||
...............................................................................##.#................#..............................
|
||||
.#.......................#.#...........#..................................#.......................................................
|
||||
..#..............................................##................#.......#....#..............#.....................#...#........
|
||||
...................#.....#................................................#..........#.........#.........#.....................#..
|
||||
........#................#................................................................................#......#................
|
||||
...................#...#....#.........................#.........................#....................#..........................#.
|
||||
.................#.......................................................#................................................#.......
|
||||
..#...........................##.#.............#..#............................................#.......................#.#........
|
||||
..#......#.........................................................................#.......................#......................
|
||||
...........................................................................................................#............#......#..
|
||||
............................................................^..........................................#..........#...............
|
||||
..#.........#....................#..........................................#........#.........................................#..
|
||||
........#...............#....#.............#......#.........................................................................#.....
|
||||
.........#......#.....#..............#...........................................................#..............#.................
|
||||
.........#...................................................#...###...........#.......#.##.......................................
|
||||
.....................##.................#.........##.....................#................#................#.........#............
|
||||
.......................................................................#..............#..............#.................#..........
|
||||
.##.........#..........................................................................#....................................#.....
|
||||
.........................#.............................#........................................................................#.
|
||||
........#.............................................#......#....#.....................................#....................#....
|
||||
........#...#..............................................................................#.........#............................
|
||||
..............................#................................#..........#..............#..................................#.....
|
||||
........##..#...................................#................................#.................#.........#......#..#........#.
|
||||
..................#......#...................................................................#....................................
|
||||
..........#.............#..............#........#............#...............#..#..........#..............#.#...#............#....
|
||||
............................##....#..............#......................................................................#.........
|
||||
...............................................#.....#...........#.....##...............#..#......................................
|
||||
.........................#.......#...............................#...........#.........#...........#....#.........................
|
||||
.#............#...#...............#..............................................................#..........................#....#
|
||||
#...........#......................................................#.............................#......#.........................
|
||||
..................................................#....#...............#.........................#................................
|
||||
................................................#..........................#.......#..............................#....##.......#.
|
||||
........#......#..#............#................#............................#......#.##.........#....................#..#........
|
||||
.......................................................#..#.#....................#..#......................................#......
|
||||
.....................#.......................................................................#............#.......................
|
||||
.....................##........................#...................#.....................#........................................
|
||||
..........................#...........................................................................................#...........
|
||||
..#..........#...................#..............##..#.....................#...................#..............#...........#........
|
||||
#................................#....##......#.............#..............#.......................#.........#...........#........
|
||||
..................#................#...............................#.....#..........#................#..............#.............
|
||||
................#.#.........#.....##...............................................................#..............#...............
|
||||
..#...............................................................................................#...............................
|
||||
..........#.................#...........#.......#.........................#...#.......#...........................................
|
||||
..##....#......................................#.#.......................................#.................#......................
|
||||
.......................#..#...#.##......................................................................#.........#...#...........
|
||||
...............#.........#..............#.....................................................#...................#...............
|
||||
......#.................#............#......#...................#..#.........................#........................#........#..
|
||||
......................................................................#...........................#........#......................
|
||||
..........#..........#........................#.............##....................................................................
|
||||
....#................................................#.......................#................#...............#...................
|
||||
.................#....................................................#......#....................................................
|
||||
.#........#.......................................................................................................................
|
||||
......##..................#....#......#.................#....................#.....................#..#...........#...............
|
||||
#...#...#...#..............#........#.......................#.#..........#...............................#......#.................
|
||||
#...#...................#.............#........#..........#...............................................................#...#...
|
||||
..#................................#...#.........................#...................#......#.....................................
|
||||
...#...###..........#............#...............................................................#..........#.....................
|
||||
............#..............#.......#.....#..........#.....#.........................................................#............#
|
||||
..#......................#..#...#................................#......#.......#.....#..................#.........#..............
|
||||
....##......#.......................................................#..............................................#..............
|
||||
...............................#.....#....#.................................................#.......#............#................
|
||||
..........#....#......................#........#..........................#......#................................................
|
||||
......#.............................#...........#..................#...........................#................................#.
|
||||
...........................##..........................................#.....#.#.....................#................#...........
|
||||
..#..............#.........................................................#........................#.........#.................#.
|
||||
#.....#.....#......................#....................#........................................#...........#...........#......#.
|
||||
.......................................#..#................................#.........#.......#..#.....#..........................#
|
||||
..........#..............##...............#..........................................................#......#......#......#....#..
|
||||
.............#..............#..#......#........#..#......##.......................#...........#.......#...........................
|
||||
......................#.......................................#.......#..#.....................................#.........#...##...
|
||||
...........................#...........................#......#....#.............................#.............................#..
|
||||
..................#............................#....#........##.........................#..............#.............#............
|
||||
.......#....................#.....#........#.......#.#...#...............#.....#.#.........................#.......#.#............
|
||||
.....#.........#.......#..........#.................#..#...#..................................................##..................
|
||||
................#........................................................#........................................................
|
||||
....##......#........#..................#.........................#...................................#...#...................#...
|
||||
..............#....................#.......#.......................#.............#......#..............#..........................
|
||||
...........................#..............#.....#............#.....................#........#....#.......................#........
|
||||
........#..##................#.....#.#..............#..............................#........................#.........#...........
|
||||
.........................................................#...........................##..........#........#.##....................
|
||||
|
|
@ -0,0 +1,87 @@
|
|||
#include "aoc.h"
|
||||
|
||||
typedef enum Direction {
|
||||
Up, Right, Down, Left
|
||||
} Direction;
|
||||
|
||||
static const int offsets[4][2] = {
|
||||
[Up] = { 0, -1},
|
||||
[Right] = { 1, 0},
|
||||
[Down] = { 0, 1},
|
||||
[Left] = {-1, 0}
|
||||
};
|
||||
|
||||
i32 traverse(Grid *grid, int x, int y, Direction facing, Arena arena) {
|
||||
u8 *visited = ARENA_ALLOC_ARRAY(&arena, u8, grid->width * grid->height);
|
||||
|
||||
i32 result = 0;
|
||||
for (;;) {
|
||||
int index = y * grid->width + x;
|
||||
if (visited[index] & (1 << facing)) {
|
||||
// loop detected
|
||||
result = -1;
|
||||
break;
|
||||
}
|
||||
else if (visited[index] == 0) {
|
||||
result++;
|
||||
}
|
||||
visited[index] |= (1 << facing);
|
||||
|
||||
int nx = x + offsets[facing][0];
|
||||
int ny = y + offsets[facing][1];
|
||||
if (nx >= 0 && ny >= 0 && nx < grid->width && ny < grid->height) {
|
||||
i32 next_index = ny * grid->width + nx;
|
||||
if (grid->grid[next_index] == '#') {
|
||||
facing = (facing + 1) % 4;
|
||||
}
|
||||
else {
|
||||
x = nx;
|
||||
y = ny;
|
||||
}
|
||||
}
|
||||
else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
Arena *arena = make_arena(Megabytes(1));
|
||||
|
||||
str input = read_file(arena, argv[1]);
|
||||
Grid grid = parse_grid(input, arena);
|
||||
|
||||
int start_x = -1, start_y = -1;
|
||||
for (int y = 0; y < grid.height; y++) {
|
||||
for (int x = 0; x < grid.width; x++) {
|
||||
if (grid_at(&grid, x, y) == '^') {
|
||||
start_x = x;
|
||||
start_y = y;
|
||||
grid.grid[y * grid.width + x] = ':';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
i32 part_1 = traverse(&grid, start_x, start_y, Up, *arena);
|
||||
|
||||
i32 part_2 = 0;
|
||||
for (int y = 0; y < grid.height; y++) {
|
||||
for (int x = 0; x < grid.width; x++) {
|
||||
if (x == start_x && y == start_y) {
|
||||
continue;
|
||||
}
|
||||
int index = y * grid.width + x;
|
||||
u8 saved;
|
||||
if ((saved = grid.grid[index]) != '#') {
|
||||
grid.grid[index] = '#';
|
||||
i32 visited = traverse(&grid, start_x, start_y, Up, *arena);
|
||||
part_2 += (visited == -1);
|
||||
grid.grid[index] = saved;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
printf("%d\n", part_1);
|
||||
printf("%d\n", part_2);
|
||||
}
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
....#.....
|
||||
.........#
|
||||
..........
|
||||
..#.......
|
||||
.......#..
|
||||
..........
|
||||
.#..^.....
|
||||
........#.
|
||||
#.........
|
||||
......#...
|
||||
Loading…
Reference in New Issue