From 436a73f410d5a2ebc24b66594d2305d45cd277e9 Mon Sep 17 00:00:00 2001 From: Georgios Samaras Date: Sat, 7 Dec 2024 03:20:33 +0100 Subject: [PATCH] day 06 --- day-06/input.txt | 130 +++++++++++++++++++++++++++++++++++++++++++++++ day-06/main.c | 87 +++++++++++++++++++++++++++++++ day-06/test.txt | 10 ++++ 3 files changed, 227 insertions(+) create mode 100644 day-06/input.txt create mode 100644 day-06/main.c create mode 100644 day-06/test.txt diff --git a/day-06/input.txt b/day-06/input.txt new file mode 100644 index 0000000..b2491bc --- /dev/null +++ b/day-06/input.txt @@ -0,0 +1,130 @@ +#.............#.#...........................................................#..........#...........................#..........#... +............#......................#.......#..#.........#...................##.................................................... +..............#...........#..#.......#.........#.#...........................#................................#......#............ +.....#......................................#......#..#...................#....................#......................#........... +...#............................#................................#................................................................ +..........#..................#.....#......................................................#....................................... +..#........#.......#.#...............................................................#......#.................................#... +.#....#................#................#.....#...................#...............................................#..#............ +.......................................................................................#...#.#....#........##......#........#.#.## +............................................#.................#.....................#..........................#.................. +....#..........##......................#.................................................................................#........ +......#.............##.........#.......#.........#.......#.............#...#.......#.............................................. +.#............................................................................#..........#....#................................... +...#..#....#..............................#...........................................................................#........... +.............#.................................................................................................................... +................................#..................##...................................#...............................#......#.. +..........#.........#.................#..........###...........................................#............#...#................. +.............#....................................#.......#.#.#............#............................................#......... +......#.#..............................................................................................#.........................# +...#...#.........#.........#..#......#................##.................#........................................................ +.................................#......................#........#................#........................#...................... +.......................##..............#................#................#..............................#......................... +.......#...#.....#.....##........................#..................##.....#...................................................... +.............................................#...........................#..........................................#.....#....... +.........................#...............#....#..............#.......#...............#.#.................#.................#...... +...........................................................#....#..................................#.............................. +..........................#.................................................#............................##....#.................. +.................#...#.........................................................#........................#.....#..#................ +.........................#....#................................................#...#.....................#....#...........#....... +................................................##.......#.#....................................#.......##........................ +..........##...#.......................#....#..#....................#........................#.................................... +#......#.......................#............#.....................................................................#............... +.......#.......#...#..#..........#.......................................#.............#......#................................... +...............#............#..................#.................................................................................# +.......#...........#.......................##.....#.........#...........#...................#......#.........#.............##....# +...................#.........................#......#..........................................#..........#.........#......#...... +.....#............#..............#...#......#....................#.............#.................................................. +................................................#........#.....#...................#.....................................#.....#.. +......................#.#...##......................##...............................................#.................#.......... +#...................#.........................#...........#.....#................#.....................#...................#...... +....#................#.....#.............#.....................................#....#...#.................................#....... +.........#.....................................................................................................#.#.......#........ +.........#..........##..............................#............................#.#.............................#................ +#....#.#..............................................##...#...#...............#.............#.................................... +........#..#.#...................#.......................................................................#.............#..#.#...#. +.................................................................................................................#.......#........ +............................................#..#...............##........#..........#.......................................#....# +........#...........................#............................#.....#........................#..........#...#..........#....... +.#...........#...................................................#...........................................#................#.#. +............#...............................#........#...........#..........#...........#.#..............#........................ +...............................................................................##.#................#.............................. +.#.......................#.#...........#..................................#....................................................... +..#..............................................##................#.......#....#..............#.....................#...#........ +...................#.....#................................................#..........#.........#.........#.....................#.. +........#................#................................................................................#......#................ +...................#...#....#.........................#.........................#....................#..........................#. +.................#.......................................................#................................................#....... +..#...........................##.#.............#..#............................................#.......................#.#........ +..#......#.........................................................................#.......................#...................... +...........................................................................................................#............#......#.. +............................................................^..........................................#..........#............... +..#.........#....................#..........................................#........#.........................................#.. +........#...............#....#.............#......#.........................................................................#..... +.........#......#.....#..............#...........................................................#..............#................. +.........#...................................................#...###...........#.......#.##....................................... +.....................##.................#.........##.....................#................#................#.........#............ +.......................................................................#..............#..............#.................#.......... +.##.........#..........................................................................#....................................#..... +.........................#.............................#........................................................................#. +........#.............................................#......#....#.....................................#....................#.... +........#...#..............................................................................#.........#............................ +..............................#................................#..........#..............#..................................#..... +........##..#...................................#................................#.................#.........#......#..#........#. +..................#......#...................................................................#.................................... +..........#.............#..............#........#............#...............#..#..........#..............#.#...#............#.... +............................##....#..............#......................................................................#......... +...............................................#.....#...........#.....##...............#..#...................................... +.........................#.......#...............................#...........#.........#...........#....#......................... +.#............#...#...............#..............................................................#..........................#....# +#...........#......................................................#.............................#......#......................... +..................................................#....#...............#.........................#................................ +................................................#..........................#.......#..............................#....##.......#. +........#......#..#............#................#............................#......#.##.........#....................#..#........ +.......................................................#..#.#....................#..#......................................#...... +.....................#.......................................................................#............#....................... +.....................##........................#...................#.....................#........................................ +..........................#...........................................................................................#........... +..#..........#...................#..............##..#.....................#...................#..............#...........#........ +#................................#....##......#.............#..............#.......................#.........#...........#........ +..................#................#...............................#.....#..........#................#..............#............. +................#.#.........#.....##...............................................................#..............#............... +..#...............................................................................................#............................... +..........#.................#...........#.......#.........................#...#.......#........................................... +..##....#......................................#.#.......................................#.................#...................... +.......................#..#...#.##......................................................................#.........#...#........... +...............#.........#..............#.....................................................#...................#............... +......#.................#............#......#...................#..#.........................#........................#........#.. +......................................................................#...........................#........#...................... +..........#..........#........................#.............##.................................................................... +....#................................................#.......................#................#...............#................... +.................#....................................................#......#.................................................... +.#........#....................................................................................................................... +......##..................#....#......#.................#....................#.....................#..#...........#............... +#...#...#...#..............#........#.......................#.#..........#...............................#......#................. +#...#...................#.............#........#..........#...............................................................#...#... +..#................................#...#.........................#...................#......#..................................... +...#...###..........#............#...............................................................#..........#..................... +............#..............#.......#.....#..........#.....#.........................................................#............# +..#......................#..#...#................................#......#.......#.....#..................#.........#.............. +....##......#.......................................................#..............................................#.............. +...............................#.....#....#.................................................#.......#............#................ +..........#....#......................#........#..........................#......#................................................ +......#.............................#...........#..................#...........................#................................#. +...........................##..........................................#.....#.#.....................#................#........... +..#..............#.........................................................#........................#.........#.................#. +#.....#.....#......................#....................#........................................#...........#...........#......#. +.......................................#..#................................#.........#.......#..#.....#..........................# +..........#..............##...............#..........................................................#......#......#......#....#.. +.............#..............#..#......#........#..#......##.......................#...........#.......#........................... +......................#.......................................#.......#..#.....................................#.........#...##... +...........................#...........................#......#....#.............................#.............................#.. +..................#............................#....#........##.........................#..............#.............#............ +.......#....................#.....#........#.......#.#...#...............#.....#.#.........................#.......#.#............ +.....#.........#.......#..........#.................#..#...#..................................................##.................. +................#........................................................#........................................................ +....##......#........#..................#.........................#...................................#...#...................#... +..............#....................#.......#.......................#.............#......#..............#.......................... +...........................#..............#.....#............#.....................#........#....#.......................#........ +........#..##................#.....#.#..............#..............................#........................#.........#........... +.........................................................#...........................##..........#........#.##.................... \ No newline at end of file diff --git a/day-06/main.c b/day-06/main.c new file mode 100644 index 0000000..01be414 --- /dev/null +++ b/day-06/main.c @@ -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); +} diff --git a/day-06/test.txt b/day-06/test.txt new file mode 100644 index 0000000..a4eb402 --- /dev/null +++ b/day-06/test.txt @@ -0,0 +1,10 @@ +....#..... +.........# +.......... +..#....... +.......#.. +.......... +.#..^..... +........#. +#......... +......#...