From 1c22f73a2bdb3fd6e28e4aa77f8da1bac6ded58c Mon Sep 17 00:00:00 2001 From: dobiadi <50926840+dobiadi@users.noreply.github.com> Date: Sun, 24 Dec 2023 01:51:44 +0100 Subject: [PATCH] Day23 C --- day23/c/day23 | Bin 0 -> 16416 bytes day23/c/day23.c | 219 +++++++++++++++++++++++++++++++++++++++++++++++ day23/input.txt | 141 ++++++++++++++++++++++++++++++ day23/sample.txt | 23 +++++ 4 files changed, 383 insertions(+) create mode 100755 day23/c/day23 create mode 100644 day23/c/day23.c create mode 100644 day23/input.txt create mode 100644 day23/sample.txt diff --git a/day23/c/day23 b/day23/c/day23 new file mode 100755 index 0000000000000000000000000000000000000000..92aabbec6208f524e714d35714eee3a114982505 GIT binary patch literal 16416 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 literal 0 HcmV?d00001 diff --git a/day23/c/day23.c b/day23/c/day23.c new file mode 100644 index 0000000..a42789c --- /dev/null +++ b/day23/c/day23.c @@ -0,0 +1,219 @@ +#include +#include +#include +#include + +#define LINE_MAX_LENGTH 256 +#define MAX_QUEUE 256*256 +#define cmp(a,b) ((a)[0] == (b)[0] && (a)[1] == (b)[1]) +#define abs(a) ((a) < 0 ? -(a) : (a)) + +typedef enum tile_type { + PATH, + FOREST, + SLOPE_UP, + SLOPE_DOWN, + SLOPE_LEFT, + SLOPE_RIGHT, +} tile_type_t; + +int check_direction(int curr[2], int dir[2], uint8_t **visited, tile_type_t map[LINE_MAX_LENGTH][LINE_MAX_LENGTH]); +int highest_cost(int curr[2], tile_type_t map[LINE_MAX_LENGTH][LINE_MAX_LENGTH], int x, int y, uint8_t **visited, int cost, int finish[2], int ignore_slopes, int walkable); + +int curr_max = 0; + +int directions[4][2] = { + {0, -1}, + {0, 1}, + {-1, 0}, + {1, 0} +}; + +int main() { + char *p, *buf, c; + + buf = (char *)malloc(LINE_MAX_LENGTH); + memset(buf, 0, LINE_MAX_LENGTH); + p = buf; + + tile_type_t map[LINE_MAX_LENGTH][LINE_MAX_LENGTH]; + int x = 0, y = 0; + int walkable = 0; + + while ((c = getchar()) != EOF) { + *p++ = c; + if (c == '\n') { + p = buf; + x = 0; + while (*p != '\n') { + switch (*p) { + case '.': + map[x][y] = PATH; + walkable++; + break; + case '#': + map[x][y] = FOREST; + break; + case '^': + map[x][y] = SLOPE_UP; + walkable++; + break; + case 'v': + map[x][y] = SLOPE_DOWN; + walkable++; + break; + case '<': + map[x][y] = SLOPE_LEFT; + walkable++; + break; + case '>': + map[x][y] = SLOPE_RIGHT; + walkable++; + break; + } + x++; + p++; + } + y++; + memset(buf, 0, LINE_MAX_LENGTH); + p = buf; + } + } + + int start[2], finish[2]; + start[1] = 0; + finish[1] = y - 1; + + // Find start and finish + for (int i = 0; i < x; i++) { + if (map[i][0] == PATH) { + start[0] = i; + } + if (map[i][y - 1] == PATH) { + finish[0] = i; + } + } + + uint8_t **visited = (uint8_t**)malloc(x * sizeof(uint8_t*)); + for (uint8_t i = 0; i < x; i++) { + visited[i] = (uint8_t*)malloc(y * sizeof(uint8_t)); + memset(visited[i], 0, y * sizeof(uint8_t)); + } + + printf("Part 1: %i\n", highest_cost(start, map, x, y, visited, 0, finish, 0, walkable)); + + for (uint8_t i = 0; i < x; i++) { + memset(visited[i], 0, y * sizeof(uint8_t)); + } + + printf("Part 2: %i\n", highest_cost(start, map, x, y, visited, 0, finish, 1, walkable)); + + free(buf); + for (int i = 0; i < y; i++) { + free(visited[i]); + } + free(visited); +} + +int highest_cost(int curr[2], tile_type_t map[LINE_MAX_LENGTH][LINE_MAX_LENGTH], int x, int y, uint8_t **visited, int cost, int finish[2], int ignore_slopes, int walkable) { + if (cmp(curr, finish)) { + return cost; + } + + // We will never reach the end + if ((walkable - cost) < (abs(finish[0] - curr[0]) + abs(finish[1] - curr[1])) || visited[finish[0]][finish[1]-1]) { + return -1; + } + + visited[curr[0]][curr[1]] = 1; + + int *options[4], options_num = 0, *dir, max = 0; + + if (map[curr[0]][curr[1]] == SLOPE_UP && !ignore_slopes) { + dir = directions[0]; + if (check_direction(curr, dir, visited, map)) { + options[0] = dir; + options_num = 1; + } + } else if (map[curr[0]][curr[1]] == SLOPE_DOWN && !ignore_slopes) { + dir = directions[1]; + if (check_direction(curr, dir, visited, map)) { + options[0] = dir; + options_num = 1; + } + } else if (map[curr[0]][curr[1]] == SLOPE_LEFT && !ignore_slopes) { + dir = directions[2]; + if (check_direction(curr, dir, visited, map)) { + options[0] = dir; + options_num = 1; + } + } else if (map[curr[0]][curr[1]] == SLOPE_RIGHT && !ignore_slopes) { + dir = directions[3]; + if (check_direction(curr, dir, visited, map)) { + options[0] = dir; + options_num = 1; + } + } else { + for (int i = 0; i < 4; i++) { + int *dir = directions[i]; + if (check_direction(curr, dir, visited, map)) { + options[options_num] = dir; + options_num++; + } + } + } + + if (options_num == 0) { + return -1; + } + + + uint8_t ***visited_copies = (uint8_t***)malloc(options_num * sizeof(uint8_t**)); + for (uint8_t i = 0; i < options_num - 1; i++) { + visited_copies[i] = (uint8_t**)malloc(x * sizeof(uint8_t*)); + for (uint8_t j = 0; j < y; j++) { + visited_copies[i][j] = (uint8_t*)malloc(y * sizeof(uint8_t)); + memcpy(visited_copies[i][j], visited[j], y * sizeof(uint8_t)); + } + } + + for (int i = 0; i < options_num; i++) { + int next[2]; + next[0] = curr[0] + options[i][0]; + next[1] = curr[1] + options[i][1]; + int c; + if (i != options_num - 1) { + c = highest_cost(next, map, x, y, visited_copies[i], cost + 1, finish, ignore_slopes, walkable); + } else { + c = highest_cost(next, map, x, y, visited, cost + 1, finish, ignore_slopes, walkable); + } + if (c > max) { + max = c; + } + } + + for (int i = 0; i < options_num - 1; i++) { + for (int j = 0; j < y; j++) { + free(visited_copies[i][j]); + } + free(visited_copies[i]); + } + free(visited_copies); + + if (max > curr_max) { + curr_max = max; + printf("Current best: %i\n", curr_max); + } + + return max; +} + +int check_direction(int curr[2], int dir[2], uint8_t **visited, tile_type_t map[LINE_MAX_LENGTH][LINE_MAX_LENGTH]) { + int next_x = curr[0] + dir[0]; + int next_y = curr[1] + dir[1]; + if (next_y > 0 && !visited[next_x][next_y] && map[next_x][next_y] != FOREST) { + return 1; + } + + return 0; +} diff --git a/day23/input.txt b/day23/input.txt new file mode 100644 index 0000000..78ad509 --- /dev/null +++ b/day23/input.txt @@ -0,0 +1,141 @@ +#.########################################################################################################################################### +#.#...#...#.....###...#.......###...#####...#...#...#...#...#...#.......#...#.....#.....#.......#...#...#...###...#.....#.....#.............# +#.#.#.#.#.#.###.###.#.#.#####.###.#.#####.#.#.#.#.#.#.#.#.#.#.#.#.#####.#.#.#.###.#.###.#.#####.#.#.#.#.#.#.###.#.#.###.#.###.#.###########.# +#.#.#.#.#.#.#...#...#.#...#...#...#...#...#...#.#.#.#.#.#.#...#...#.....#.#.#...#.#.#...#.....#.#.#...#.#.#...#.#.#.#...#...#.#.....#.....#.# +#.#.#.#.#.#.#.###.###.###.#.###.#####.#.#######.#.#.#.#.#.#########.#####.#.###.#.#.#.#######.#.#.#####.#.###.#.#.#.#.#####.#.#####.#.###.#.# +#...#.#.#.#.#...#.#...###.#...#.#...#.#.....#...#.#...#.#.#.........#.....#...#.#.#.#...#...#.#.#.#.....#.#...#.#.#.#...#...#.#.....#...#...# +#####.#.#.#.###.#.#.#####.###.#.#.#.#.#####.#.###.#####.#.#.#########.#######.#.#.#.###.#.#.#.#.#.#.#####.#.###.#.#.###.#.###.#.#######.##### +#.....#.#.#.###...#.#...#.#...#.#.#...#.....#.#...#...#.#.#.###.....#.....#...#.#.#.#...#.#.#.#.#.#...###.#...#.#.#...#...#...#.....#...#...# +#.#####.#.#.#######.#.#.#.#.###.#.#####.#####.#.###.#.#.#.#.###.###.#####.#.###.#.#.#.###.#.#.#.#.###.###.###.#.#.###.#####.#######.#.###.#.# +#.#...#.#...#.....#.#.#.#.#...#.#.>.>.#.....#.#.#...#...#.#...#.#...###...#.#...#...#.#...#...#.#.#...#...#...#.#.###.#.....#...#...#...#.#.# +#.#.#.#.#####.###.#v#.#.#.###.#.###v#.#####.#.#.#.#######.###.#.#.#####.###.#.#######.#.#######.#.#.###.###.###.#.###.#.#####.#.#.#####.#.#.# +#...#...#...#.#...#.>.#.#.###.#.#...#.......#.#.#.#.>.>.#.#...#.#...#...#...#.#.....#.#.....#...#.#.###...#.#...#...#.#.#...#.#.#...#...#.#.# +#########.#.#.#.###v###.#.###.#.#.###########.#.#.#.#v#.#.#.###.###.#.###.###.#.###.#.#####.#.###.#.#####.#.#.#####.#.#.#.#.#.#.###.#.###.#.# +###.....#.#...#.#...###.#.#...#.#...###...###...#...#.#.#.#...#...#.#.#...###...#...#.#...#.#...#.#.>.>...#.#.#.....#.#.#.#.#.#.#...#.....#.# +###.###.#.#####.#.#####.#.#.###.###.###.#.###########.#.#.###.###.#.#.#.#########.###.#.#.#.###.#.###v#####.#.#.#####.#.#.#.#.#.#.#########.# +#...#...#.....#.#.....#.#.#.....###...#.#.....#.......#...###...#.#.#.#.#.>.>.#...#...#.#.#.#...#.###.#.....#.#.#...#.#.#.#.#.#.#.#.........# +#.###.#######.#.#####.#.#.###########.#.#####.#.###############.#.#.#.#.#.#v#.#.###.###.#.#.#.###.###.#.#####.#.#.#.#.#.#.#.#.#.#.#.######### +#...#.........#.....#.#.#.#...........#.###...#.......###.......#.#.#.#...#.#.#...#.#...#...#...#.#...#.#...#.#.#.#.#.#.#.#.#.#.#.#.#...#...# +###.###############.#.#.#.#.###########.###.#########.###.#######.#.#.#####.#.###.#.#.#########.#.#.###.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.# +###...............#.#.#.#.#...#.......#...#.#...#...#...#...#...#.#...###...#.....#...#...#.....#.#...#.#.#.#.#.#.#.#.#.#.#.#.#.#.#...#.#.#.# +#################.#.#.#.#.###.#.#####.###.#.#.#.#.#.###.###.#.#.#.#######.#############.#.#.#####.###.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#####.#.#.# +#.................#...#...###.#.#.....#...#...#.#.#.#...###...#.#.#.......#...#...#.....#.#.#.....#...#...#...#.#.#...#.#.#...#...#...#...#.# +#.###########################.#.#.#####.#######.#.#.#.#########.#.#.#######.#.#.#.#.#####.#.#.#####.###########.#.#####.#.#########.#.#####.# +#.................###...#####...#.....#.#.......#.#...#...#.....#.#...#...#.#...#.#.#.....#...#.....#...###...#.#.....#...###...#...#.#...#.# +#################.###.#.#############.#.#.#######.#####.#.#.#####.###.#.#.#.#####.#.#.#########.#####.#.###.#.#.#####.#######.#.#.###.#.#.#.# +#.......#...#...#.#...#...#...#.....#...#.....###.....#.#.#.....#...#...#.#.#.....#.#.#.....#...#...#.#...#.#.#.......#...#...#.#.###...#...# +#.#####.#.#.#.#.#.#.#####.#.#.#.###.#########.#######.#.#.#####.###.#####.#.#.#####.#.#.###.#.###.#.#.###.#.#.#########.#.#.###.#.########### +#.#...#...#...#...#.#.....#.#.#...#.###.......#.......#.#...###.....###...#.#.#.....#.#.#...#.....#...###...#...###...#.#.#...#.#...........# +#.#.#.#############.#.#####.#.###.#.###.#######.#######.###.###########.###.#.#.#####.#.#.#####################.###.#.#.#.###.#.###########.# +#...#.#...#...#...#.#...#...#...#.#.....#.....#...#...#.#...#.........#.....#.#.#.....#.#.#...#.......#.........#...#.#.#.#...#...#.......#.# +#####.#.#.#.#.#.#.#.###.#.#####.#.#######.###.###.#.#.#.#.###.#######.#######.#.#.#####.#.#.#.#.#####.#.#########.###.#.#.#.#####.#.#####.#.# +#.....#.#.#.#.#.#.#...#.#.#.....#...#...#.#...###...#...#.#...#.......###...#...#...#...#.#.#.#...#...#.#.......#...#...#...#####...#...#.#.# +#.#####.#.#.#v#.#.###.#.#.#.#######.#.#.#.#.#############.#.###.#########.#.#######.#.###.#.#.###.#.###.#.#####.###.#################.#.#.#.# +#.......#...#.>.#...#.#.#.#...#...#...#...#.###...###.....#...#.#...#.....#.#.......#...#.#.#.....#...#...#...#...#.#...............#.#.#...# +#############v#####.#.#.#.###.#.#.#########.###.#.###v#######.#.#.#.#.#####.#.#########.#.#.#########.#####.#.###.#.#.#############.#.#.##### +#.........###.....#...#...#...#.#.......#...#...#.#.>.>.#...#.#.#.#.#.....#.#.#...#...#.#.#.......#...#...#.#...#.#.#.#.............#.#.....# +#.#######.#######.#########.###.#######.#.###.###.#.#v#.#.#.#.#.#.#.#####.#.#.#.#.#.#.#.#.#######.#.###.#.#v###.#.#.#.#.#############.#####.# +#.......#.#.....#.....#.....###.......#.#...#...#...#.#.#.#.#.#.#.#...###.#.#...#.#.#.#.#...#...#.#...#.#.>.>.#...#...#...............#...#.# +#######.#.#.###.#####.#.#############.#.###v###.#####.#.#.#.#.#.#.###.###.#.#####v#.#.#.###.#.#.#.###.#.###v#.#########################.#.#.# +#...###.#.#...#.#.....#.#.....#...#...#.#.>.>...#.....#...#.#.#...###...#.#.#...>.>.#...###.#.#.#.#...#.#...#.#...#...#...#.........#...#.#.# +#.#.###.#.###.#.#.#####.#.###.#.#.#.###.#.#v#####.#########.#.#########.#.#.#.###v#########.#.#.#.#.###.#.###.#.#.#.#.#.#.#v#######.#.###.#.# +#.#...#.#.###.#.#.....#.#.###.#.#...###...#.....#...#...###...#.......#.#.#.#...#.#...#...#.#.#.#.#.#...#.###.#.#.#.#.#.#.>.###...#...###...# +#.###.#.#.###.#.#####.#.#.###.#.###############.###.#.#.#######.#####.#.#.#.###.#.#.#.#.#.#.#.#.#.#.#.###.###.#.#.#.#.#.###v###.#.########### +#...#.#.#...#.#.......#.#.#...#.###...###...#...###...#.........#.....#...#.....#...#...#.#.#.#.#.#.#.###...#...#.#.#.#.###.....#.#...#...### +###.#.#.###.#.#########.#.#.###.###.#.###.#.#.###################.#######################.#.#.#.#.#.#.#####.#####.#.#.#.#########.#.#.#.#.### +#...#.#...#.#.#.......#.#.#...#.#...#.#...#.#.#.................#.....#.................#.#...#...#...#.....#...#...#...#.........#.#...#...# +#.###.###.#.#.#.#####.#.#.###.#.#.###.#.###.#.#.###############.#####.#.###############.#.#############.#####.#.#########.#########.#######.# +#...#.....#...#.#.....#...#...#.#...#...###...#...#...#.......#.#.....#...........#...#...#...###.....#.....#.#.###...###.........#.#.......# +###.###########.#.#########.###.###.#############.#.#.#.#####.#.#.###############.#.#.#####.#.###.###.#####.#.#.###.#.###########.#.#.####### +###.............#.....#...#.....###...#...###...#...#...#.....#...#...#...#...###...#...#...#...#...#.#.....#.#.#...#...#.........#.#.#...### +#####################.#.#.###########.#.#.###.#.#########.#########.#.#.#.#.#.#########.#.#####.###.#.#.#####.#.#.#####.#.#########.#.#.#.### +#.....................#.#.#.....#...#...#.....#.#...#.....###...###.#.#.#.#.#.#...#.....#.....#.###.#.#...###.#.#...#...#.........#.#...#...# +#.#####################.#.#.###.#.#.###########.#.#.#.#######.#.###.#.#.#.#.#.#.#.#.#########.#.###.#.###v###.#.###.#.###########v#.#######.# +#.#.....#.............#.#.#...#.#.#.............#.#.#.......#.#.###.#.#.#.#.#.#.#.#...#####...#.#...#...>.>.#.#.#...#...#.....#.>.#.#.......# +#.#.###.#.###########.#.#.###.#.#v###############.#.#######.#.#.###.#.#.#.#.#.#.#.###v#####.###.#.#######v#.#.#.#.#####.#.###.#.#v#.#.####### +#...#...#.#.....#...#.#.#.#...#.>.>...#...###.....#...#.....#.#.###.#.#.#.#.#.#.#...>.>.#...###.#.#.......#...#...#.....#...#...#.#.#.#...### +#####.###.#.###.#.#.#.#.#.#.#####v###.#.#.###.#######.#.#####.#.###.#.#.#.#.#.#.#####v#.#.#####.#.#.###############.#######.#####.#.#.#.#.### +#...#.....#...#...#...#.#...###...###...#...#.#.......#.....#.#.#...#.#.#.#.#.#...#...#...#...#...#.....#...###.....#...#...#.....#.#...#...# +#.#.#########.#########.#######.###########.#.#.###########.#.#.#.###.#.#.#.#.###.#.#######.#.#########.#.#.###.#####.#.#.###.#####.#######.# +#.#.#...#...#...#.....#.......#.......#...#...#...###...#...#.#.#...#.#.#.#.#.#...#.........#.#...#####...#...#...#...#...###.......#...#...# +#.#.#.#.#.#.###.#.###.#######.#######.#.#.#######.###.#.#v###.#.###.#.#.#.#.#.#.#############.#.#.###########.###.#.#################.#.#.### +#.#...#...#.....#.#...#...#...#.......#.#.......#...#.#.>.>...#.#...#.#.#.#.#.#...###.......#.#.#.............#...#.#.................#...### +#.###############.#.###.#.#.###.#######.#######.###.#.###v#####.#.###.#.#.#.#.###.###.#####.#.#.###############.###.#.####################### +#...#.....#...###.#.....#...###...#...#...#.....#...#...#.#...#...###...#...#.#...#...#...#...#.............###.#...#.......................# +###.#.###.#.#v###.###############.#.#.###.#.#####.#####.#.#.#.###############.#.###.###.#.#################.###.#.#########################.# +###.#.###.#.#.>...#...........#...#.#.....#.#...#...#...#.#.#.........#.......#.###.....#.#.......#.......#...#.#.#...###...#...............# +###.#.###.#.#v#####.#########.#.###.#######.#.#.###.#.###.#.#########.#.#######.#########.#.#####.#.#####.###.#.#.#.#.###.#.#.############### +#...#...#...#...#...#.........#.....#.......#.#...#.#.###.#.#.....#...#.......#...#.......#.#.....#.....#.....#...#.#.....#...#...#...###...# +#.#####.#######.#.###.###############.#######.###.#.#.###.#.#.###.#.#########.###.#.#######.#.#########.###########.###########.#.#.#.###.#.# +#.#.....#.....#...#...#...#...#...###.........#...#.#.###...#...#...#####...#.....#.........#...###...#.........###.....#.....#.#...#.#...#.# +#.#.#####.###.#####.###.#.#.#.#.#.#############.###.#.#########.#########.#.###################.###.#.#########.#######.#.###.#.#####.#.###.# +#...#...#...#.......###.#.#.#.#.#...#...........###...#...#...#...#...###.#.###.......#.........#...#.#.........#...###...###...#.....#.#...# +#####.#.###.###########.#.#.#.#.###.#.#################.#.#.#.###.#.#.###.#.###.#####.#.#########.###.#.#########.#.#############.#####.#.### +#.....#.....#.........#.#...#.#...#.#...#...#...###...#.#.#.#.###...#.....#...#.....#.#.........#...#.#.....#.....#.#...###...#...#.....#.### +#.###########.#######.#.#####.###.#.###.#.#.#.#.###.#.#.#.#.#.###############.#####.#.#########.###.#.#####.#.#####.#.#.###.#.#.###.#####.### +#.......#...#.#.......#.....#...#.#.###...#...#...#.#.#.#.#.#...#.....#.....#.#.....#...........###.#.......#.#.....#.#.#...#.#.....#...#...# +#######.#.#.#.#.###########.###.#.#.#############.#.#.#.#.#.###.#.###.#.###.#.#.###################.#########.#.#####.#.#.###.#######.#.###.# +#.......#.#...#.........#...#...#.#.#...###.......#.#.#.#.#.#...#.###...###...#.......#...###.....#.....#...#.#.#...#.#.#.#...#...###.#.#...# +#.#######.#############.#.###.###.#.#.#.###v#######.#.#.#.#.#.###v###################.#.#.###.###.#####v#.#.#.#.#.#.#.#.#.#.###.#.###.#.#v### +#.......#.#.............#...#...#.#.#.#...>.>...#...#.#.#...#...>.>.#...#...###.......#.#...#...#.#...>.>.#.#.#.#.#.#.#.#.#...#.#.....#.>.### +#######.#.#.###############.###.#.#.#.#####v###.#.###.#.#########v#.#.#.#.#.###.#######.###.###.#.#.###v###.#.#.#.#.#.#.#.###.#.#########v### +###...#...#.........###...#...#...#...###...#...#.#...#...#...#...#...#...#...#.........#...###.#.#...#...#.#.#.#.#.#.#.#.#...#.#...###...### +###.#.#############.###.#.###.###########.###.###.#.#####.#.#.#.#############.###########.#####.#.###.###.#.#.#.#.#.#.#.#.#.###.#.#.###.##### +#...#...............#...#.#...#...........###...#.#.#.....#.#.#...#...........#...#.......###...#.#...#...#.#.#.#.#.#.#.#.#.....#.#...#.#...# +#.###################.###.#.###.###############.#.#.#.#####.#.###.#.###########.#.#.#########.###.#.###.###.#.#.#.#.#.#.#.#######.###.#.#.#.# +#.#...........#...#...#...#...#.............#...#.#...###...#.#...#...###...#...#.#.........#...#.#.###...#...#...#...#...#.....#.#...#...#.# +#.#.#########.#.#v#.###.#####.#############.#.###.#######.###.#.#####.###.#.#.###.#########.###.#.#.#####.#################.###.#.#.#######.# +#.#.###...###...#.>.###.......#...###.......#.....###...#...#.#.....#...#.#.#.#...#...###...#...#.#...#...#...#...#...#...#...#...#...#...#.# +#.#.###.#.#######v#############.#.###.###############.#.###.#.#####.###.#.#.#.#.###.#.###v###.###.###.#.###.#.#.#.#.#.#.#.###.#######.#.#.#.# +#...#...#.......#.........#.....#.....#...###...###...#.....#.#.....#...#.#.#.#...#.#...>.>.#...#.....#.....#.#.#...#...#.###.......#.#.#.#.# +#####.#########.#########.#.###########.#.###.#.###.#########.#.#####.###.#.#.###.#.#####v#.###.#############.#.#########.#########.#.#.#.#.# +#.....#.......#.#...#...#.#.............#.....#.#...#...#...#.#...#...#...#...#...#...#...#.#...###...........#.........#.#...#...#.#.#.#...# +#.#####.#####.#.#.#.#.#.#.#####################.#.###.#.#.#.#.###.#.###.#######.#####.#.###.#.#####.###################.#.#.#.#.#.#.#.#.##### +#.#.....#.....#...#...#...#.......#.............#.....#...#.#.....#...#.......#.....#.#...#.#.....#.............#.......#...#...#.#.#.#.....# +#.#.#####.#################.#####.#.#######################.#########.#######.#####.#.###.#.#####.#############.#.###############.#.#.#####.# +#...#...#.#...#.......#...#...#...#...........#.......#...#.#...#...#.#.......#.....#.#...#.......#.......#.....#...#...#...#...#...#.......# +#####.#.#.#.#.#.#####.#.#.###.#.#############.#.#####.#.#.#.#.#.#.#.#.#.#######.#####.#.###########.#####.#.#######.#.#.#.#.#.#.############# +#...#.#.#...#...#.....#.#.#...#...###...#.....#.....#...#...#.#.#.#.#...#...###.......#.#...#.....#.#...#...###...#.#.#.#.#...#.###.........# +#.#.#.#.#########.#####.#.#.#####.###.#.#.#########.#########.#.#.#.#####.#.###########.#.#.#.###.#.#.#.#######.#.#.#.#.#.#####.###.#######.# +#.#...#.#...#...#.....#.#.#...#...#...#...###.....#...#...###.#.#.#.#...#.#.###...#...#.#.#.#.#...#.#.#.......#.#.#...#...#...#.....#...#...# +#.#####.#.#.#.#.#####.#.#.###.#.###.#########.###.###.#.#.###.#.#.#.#.#.#.#.###.#.#.#.#v#.#.#.#.###.#.#######.#.#.#########.#.#######.#.#.### +#.....#.#.#...#.#.....#.#...#.#.###...###...#...#.###.#.#.#...#.#.#.#.#.#.#.#...#.#.#.>.>.#...#.###...#.......#.#.#.........#.........#...### +#####.#.#.#####.#.#####.###.#.#.#####v###.#.###.#.###v#.#.#.###.#.#.#.#.#.#.#.###.#.###v#######.#######.#######.#.#.######################### +#.....#...#...#...#...#...#.#.#.#...>.>...#.#...#...>.>.#.#...#.#.#.#.#.#.#.#...#.#.#...#.....#...#.....#.....#.#.#.........#.........#.....# +#.#########.#.#####.#.###.#.#.#.#.###v#####.#.#######v###.###.#.#.#.#.#.#.#.###.#.#.#.###.###.###.#.#####.###.#.#.#########.#.#######.#.###.# +#.....#.....#.....#.#...#.#.#.#.#...#...###...###...#...#...#.#.#.#.#.#.#.#.#...#...#...#...#.....#.......#...#.#...#...###.#.#.......#...#.# +#####.#.#########.#.###.#.#.#.#.###.###.#########.#.###.###.#.#.#.#.#.#.#.#.#.#########.###.###############.###.###.#.#.###.#.#.#########.#.# +#.....#.#.........#...#.#.#.#.#.#...###.......#...#.#...###.#.#.#.#.#.#.#.#.#.#...#.....###.........#.......#...#...#.#...#...#...#.......#.# +#.#####.#.###########.#.#.#.#.#.#.###########.#.###.#.#####.#.#.#.#.#.#.#.#.#.#.#.#.###############.#.#######.###.###.###.#######.#.#######.# +#...#...#.........#...#.#.#.#.#...#...........#...#...#...#.#.#.#.#.#.#...#.#.#.#.#.....#####.......#...#...#...#.###.#...#.....#...#...#...# +###.#.###########.#.###.#.#.#.#####.#############.#####.#.#.#.#.#.#.#.#####.#.#.#.#####.#####.#########v#.#.###.#.###.#.###v###.#####.#.#.### +###...#...###...#.#...#...#...###...#...#.......#.......#.#...#.#.#.#...#...#.#.#.......#.....#.......>.>.#.#...#...#.#...>.###.......#...### +#######.#.###.#.#v###.###########.###.#.#.#####.#########.#####.#.#.###.#.###.#.#########.#####.#######v###.#.#####.#.#####v################# +#.......#.....#.#.>.#.......#...#.....#...#.....#.........#...#...#.#...#.#...#...#...###.#...#.....###...#.#.....#.#...#...###...#...#.....# +#.#############.#v#.#######.#.#.###########.#####.#########.#.#####.#.###.#.#####.#.#.###.#.#.#####.#####.#.#####.#.###.#.#####.#.#.#.#.###.# +#.............#...#.......#.#.#...........#...###.......#...#...###...###.#...###...#...#...#.#.....#...#.#.#...#.#.#...#.#...#.#...#.#.#...# +#############.###########.#.#.###########.###.#########.#.#####.#########.###.#########.#####.#.#####.#.#.#.#.#.#.#.#.###.#.#.#.#####.#.#.### +#...#...#...#...........#.#.#...#.......#.....#...###...#.#.....#...#...#.#...#.........#...#.#.#.....#...#.#.#...#.#...#.#.#.#.#.....#.#...# +#.#.#.#.#.#.###########.#.#.###.#.#####.#######.#.###.###.#.#####.#.#.#.#.#.###.#########.#.#.#.#.#########.#.#####.###.#.#.#.#.#.#####.###.# +#.#...#...#.......#.....#...###...#...#...#.....#.#...###.#.#...#.#...#.#...###...........#.#.#.#.....#...#.#...#...#...#...#.#.#.#...#.#...# +#.###############.#.###############.#.###.#.#####.#.#####.#.#.#.#.#####.###################.#.#.#####.#.#.#.###.#.###.#######.#.#.#.#.#.#.### +#...............#.#.......#...#.....#.....#.#.....#.......#.#.#.#...#...###.................#...#...#...#.#.#...#...#.....#...#.#.#.#...#...# +###############.#.#######.#.#.#.###########.#.#############.#.#.###.#.#####.#####################.#.#####.#.#.#####.#####.#.###.#.#.#######.# +#...............#.#.....#...#.#.............#.....#.......#.#.#.###.#.#...#.......#...........#...#.....#.#...#.....#.....#.....#...###.....# +#.###############.#.###.#####.###################.#.#####.#.#.#.###.#.#.#.#######.#.#########.#.#######.#.#####.#####.#################.##### +#.......#...#...#...###.......###...#.............#.....#...#.#...#.#...#.###...#...#.........#.......#...#...#.......###...#...#.......#...# +#######.#.#.#.#.#################.#.#.#################.#####.###.#.#####.###.#.#####.###############.#####.#.###########.#.#.#.#.#######.#.# +#...###...#...#.....#...#...#.....#.#.........#...#.....#...#.#...#.#.....#...#.......###...###...###...#...#...#...#.....#.#.#.#.....#...#.# +#.#.###############.#.#.#.#.#.#####.#########.#.#.#.#####.#.#.#.###.#.#####.#############.#.###.#.#####.#.#####.#.#.#.#####.#.#.#####.#.###.# +#.#.................#.#.#.#.#.#.....#.........#.#.#...###.#.#.#.#...#.#...#.......#.....#.#.#...#.......#.#.....#.#.#.#.....#.#...###...#...# +#.###################.#.#.#.#.#.#####.#########.#.###.###.#.#.#.#.###.#.#.#######.#.###.#.#.#.###########.#.#####.#.#.#.#####.###.#######.### +#.#...#...#.....#...#.#.#.#.#.#.#...#.......#...#...#...#.#.#.#.#...#.#.#.###...#...#...#.#.#.....#.......#.....#.#.#.#.....#...#.#.....#...# +#.#.#.#.#.#.###.#.#.#.#.#.#.#.#.#.#.#######.#.#####.###.#.#.#.#.###.#.#.#.###.#.#####v###.#.#####.#.###########.#.#.#.#####.###.#.#.###.###.# +#...#...#.#.#...#.#.#.#.#.#.#.#.#.#.###.....#...#...#...#.#.#.#...#.#.#.#...#.#.#...>.>.#.#.#...#...#...........#.#.#.#.....###.#.#.#...#...# +#########.#.#.###.#.#.#.#.#.#.#.#.#.###v#######.#.###v###.#.#.###.#.#.#.###.#.#.#.#####.#.#.#.#.#####v###########.#.#.#.#######.#.#.#.###v### +#.........#.#...#.#...#.#.#.#.#.#.#...>.>...#...#.#.>.>.#.#.#...#.#.#.#...#...#.#...###.#.#...#.#...>.>.#...#...#.#.#.#.#...#...#...#.#.>.### +#.#########.###.#.#####.#.#.#.#.#.#########.#.###.#.###.#.#.###.#.#.#.###.#####.###.###.#.#####.#.#####.#.#.#.#.#.#.#.#.#.#.#.#######.#.#v### +#.....#...#.#...#.#.....#.#.#.#.#.#.........#...#.#...#.#.#.#...#.#.#.#...#.....#...#...#.....#.#...#...#.#.#.#.#.#.#.#.#.#.#.#.......#.#.### +#####.#.#.#.#.###.#.#####.#.#.#.#.#.###########.#.###.#.#.#.#.###.#.#.#.###.#####.###.#######.#.###.#.###.#.#.#.#.#.#.#.#.#.#.#.#######.#.### +#####...#...#.....#.......#...#...#.............#.....#...#...###...#...###.......###.........#.....#.....#...#...#...#...#...#.........#...# +###########################################################################################################################################.# diff --git a/day23/sample.txt b/day23/sample.txt new file mode 100644 index 0000000..ea945a4 --- /dev/null +++ b/day23/sample.txt @@ -0,0 +1,23 @@ +#.##################### +#.......#########...### +#######.#########.#.### +###.....#.>.>.###.#.### +###v#####.#v#.###.#.### +###.>...#.#.#.....#...# +###v###.#.#.#########.# +###...#.#.#.......#...# +#####.#.#.#######.#.### +#.....#.#.#.......#...# +#.#####.#.#.#########v# +#.#...#...#...###...>.# +#.#.#v#######v###.###v# +#...#.>.#...>.>.#.###.# +#####v#.#.###v#.#.###.# +#.....#...#...#.#.#...# +#.#########.###.#.#.### +#...###...#...#...#.### +###.###.#.###v#####v### +#...#...#.#.>.>.#.>.### +#.###.###.#.###.#.#v### +#.....###...###...#...# +#####################.#