diff --git a/day15/c/day15 b/day15/c/day15 new file mode 100755 index 0000000..a5d2261 Binary files /dev/null and b/day15/c/day15 differ diff --git a/day15/c/day15.c b/day15/c/day15.c new file mode 100644 index 0000000..4b64b13 --- /dev/null +++ b/day15/c/day15.c @@ -0,0 +1,142 @@ +#include +#include + +#define MAX_DIMENSION 1024 +#define MAX_MOVES 1024*1024 + +typedef enum tile { + EMPTY, + WALL, + BOX, + ROBOT +} tile_t; + +int try_move(tile_t **map, int rows, int columns, int x, int y, int dir[2]); + +int main() { + char c; + + tile_t **map = calloc(MAX_DIMENSION, sizeof(map[0])); + int rows = 0, columns, i = 0; + map[0] = calloc(MAX_DIMENSION, sizeof(map[0][0])); + + int reading_map = 1; + + int (*moves)[2] = calloc(MAX_MOVES, sizeof(moves[0])); + int move_count = 0; + + int robot_pos[2]; + + while ((c = getchar()) != EOF) { + if (reading_map) { + if (i == 0 && c == '\n') { + reading_map = 0; + continue; + } + + switch (c) { + case '.': + map[rows][i] = EMPTY; + break; + case '#': + map[rows][i] = WALL; + break; + case 'O': + map[rows][i] = BOX; + break; + case '@': + map[rows][i] = ROBOT; + robot_pos[0] = rows; + robot_pos[1] = i; + break; + } + + i++; + if (c != '\n') { + continue; + } + + columns = i - 1; + i = 0; + rows++; + map[rows] = calloc(MAX_DIMENSION, sizeof(map[0][0])); + } else { + switch(c) { + case '>': + moves[move_count][0] = 0; + moves[move_count][1] = 1; + move_count++; + break; + case '<': + moves[move_count][0] = 0; + moves[move_count][1] = -1; + move_count++; + break; + case 'v': + moves[move_count][0] = 1; + moves[move_count][1] = 0; + move_count++; + break; + case '^': + moves[move_count][0] = -1; + moves[move_count][1] = 0; + move_count++; + break; + } + } + } + + for (i = 0; i < move_count; i++) { + if (try_move(map, rows, columns, robot_pos[0], robot_pos[1], moves[i])) { + robot_pos[0] += moves[i][0]; + robot_pos[1] += moves[i][1]; + } + } + + int sum = 0; + for (i = 0; i < rows; i++) { + for (int j = 0; j < columns; j++) { + if (map[i][j] == BOX) { + sum += 100 * i + j; + } + } + } + + for (i = 0; i < rows + 1; i++) { + free(map[i]); + } + free(map); + free(moves); + + printf("%i\n", sum); +} + +int try_move(tile_t **map, int rows, int columns, int x, int y, int dir[2]) { + // Walls cannot move + if (map[x][y] == WALL) { + return 0; + } + + // Empty space can be filled + if (map[x][y] == EMPTY) { + return 1; + } + + // A box/robot can move if the next tile is movable + int next_x = x + dir[0]; + int next_y = y + dir[1]; + // Cannot move out of the map although it should not be possible to reach this + if (next_x < 0 || next_y < 0 || next_x >= rows || next_y >= columns) { + return 0; + } + + int success = try_move(map, rows, columns, next_x, next_y, dir); + + // If successfully moved, update map + if (success) { + map[next_x][next_y] = map[x][y]; + map[x][y] = EMPTY; + } + + return success; +} diff --git a/day15/c/day15_part2 b/day15/c/day15_part2 new file mode 100755 index 0000000..05503d9 Binary files /dev/null and b/day15/c/day15_part2 differ diff --git a/day15/c/day15_part2.c b/day15/c/day15_part2.c new file mode 100644 index 0000000..61270ae --- /dev/null +++ b/day15/c/day15_part2.c @@ -0,0 +1,265 @@ +#include +#include + +#define MAX_DIMENSION 1024 +#define MAX_MOVES 1024*1024 + +typedef enum tile { + EMPTY, + WALL, + BOX, + ROBOT +} tile_t; + +typedef struct object { + tile_t type; + int pos[2]; +} object_t; + +int can_move(object_t ***map, int rows, int columns, int x, int y, int dir[2]); +void move(object_t ***map, int rows, int columns, int x, int y, int dir[2]); + +int main() { + char c; + + object_t ***map = calloc(MAX_DIMENSION, sizeof(map[0])); + int rows = 0, columns, i = 0; + map[0] = calloc(MAX_DIMENSION, sizeof(object_t*)); + + int reading_map = 1; + + int (*moves)[2] = calloc(MAX_MOVES, sizeof(moves[0])); + int move_count = 0; + + int robot_pos[2]; + + while ((c = getchar()) != EOF) { + if (reading_map) { + if (i == 0 && c == '\n') { + reading_map = 0; + continue; + } + + switch (c) { + case '.': + { + object_t *obj = calloc(1, sizeof(obj[0])); + obj->type = EMPTY; + obj->pos[0] = rows; + obj->pos[1] = i; + map[rows][i] = obj; + object_t *obj2 = calloc(1, sizeof(obj2[0])); + obj2->type = EMPTY; + obj2->pos[0] = rows; + obj2->pos[1] = ++i; + map[rows][i] = obj2; + } + break; + case '#': + { + object_t *obj = calloc(1, sizeof(obj[0])); + obj->type = WALL; + obj->pos[0] = rows; + obj->pos[1] = i; + map[rows][i] = obj; + map[rows][++i] = obj; + } + break; + case 'O': + { + object_t *obj = calloc(1, sizeof(obj[0])); + obj->type = BOX; + obj->pos[0] = rows; + obj->pos[1] = i; + map[rows][i] = obj; + map[rows][++i] = obj; + } + break; + case '@': + { + object_t *obj = calloc(1, sizeof(obj[0])); + obj->type = ROBOT; + obj->pos[0] = rows; + obj->pos[1] = i; + map[rows][i] = obj; + robot_pos[0] = rows; + robot_pos[1] = i; + object_t *obj2 = calloc(1, sizeof(obj2[0])); + obj2->type = EMPTY; + obj2->pos[0] = rows; + obj2->pos[1] = ++i; + map[rows][i] = obj2; + } + break; + } + + i++; + if (c != '\n') { + continue; + } + + columns = i - 1; + i = 0; + rows++; + map[rows] = calloc(MAX_DIMENSION, sizeof(object_t*)); + } else { + switch(c) { + case '>': + moves[move_count][0] = 0; + moves[move_count][1] = 1; + move_count++; + break; + case '<': + moves[move_count][0] = 0; + moves[move_count][1] = -1; + move_count++; + break; + case 'v': + moves[move_count][0] = 1; + moves[move_count][1] = 0; + move_count++; + break; + case '^': + moves[move_count][0] = -1; + moves[move_count][1] = 0; + move_count++; + break; + } + } + } + + for (i = 0; i < move_count; i++) { + if (can_move(map, rows, columns, robot_pos[0], robot_pos[1], moves[i])) { + move(map, rows, columns, robot_pos[0], robot_pos[1], moves[i]); + robot_pos[0] += moves[i][0]; + robot_pos[1] += moves[i][1]; + } + } + + int sum = 0; + for (i = 0; i < rows; i++) { + for (int j = 0; j < columns; j++) { + if (map[i][j]->type == BOX && map[i][j]->pos[0] == i && map[i][j]->pos[1] == j) { + sum += 100 * i + j; + } + } + } + + for (i = 0; i < rows + 1; i++) { + free(map[i]); + } + free(map); + free(moves); + + printf("%i\n", sum); +} + +int can_move(object_t ***map, int rows, int columns, int x, int y, int dir[2]) { + // Walls cannot move + if (map[x][y]->type == WALL) { + return 0; + } + + // Empty space can be filled + if (map[x][y]->type == EMPTY) { + return 1; + } + + // A box/robot can move if the next tile is movable + int next_x = x + dir[0]; + int next_y = y + dir[1]; + // Cannot move out of the map although it should not be possible to reach this + if (next_x < 0 || next_y < 0 || next_x >= rows || next_y >= columns) { + return 0; + } + + object_t *next_object = map[next_x][next_y]; + + if (next_object->type == WALL) { + return 0; + } + + if (next_object->type == BOX) { + if (next_object->pos[0] != x) { + return can_move(map, rows, columns, next_object->pos[0], next_object->pos[1], dir) && can_move(map, rows, columns, next_object->pos[0], next_object->pos[1] + 1, dir); + } + + int can = 1; + if (map[x][y] != map[next_object->pos[0]][next_object->pos[1]]) { + can &= can_move(map, rows, columns, next_object->pos[0], next_object->pos[1], dir); + } + if (map[x][y] != map[next_object->pos[0]][next_object->pos[1] + 1]) { + can &= can_move(map, rows, columns, next_object->pos[0], next_object->pos[1] + 1, dir); + } + return can; + } + + return 1; +} + +void move(object_t ***map, int rows, int columns, int x, int y, int dir[2]) { + // Walls cannot move + if (map[x][y]->type == WALL) { + return; + } + + // Empty space can be filled + if (map[x][y]->type == EMPTY) { + free(map[x][y]); + return; + } + + if (map[x][y]->type == BOX) { + int current_positions[2][2]; + int next_positions[2][2]; + current_positions[0][0] = map[x][y]->pos[0]; + current_positions[0][1] = map[x][y]->pos[1]; + current_positions[1][0] = map[x][y]->pos[0]; + current_positions[1][1] = map[x][y]->pos[1] + 1; + next_positions[0][0] = current_positions[0][0] + dir[0]; + next_positions[0][1] = current_positions[0][1] + dir[1]; + next_positions[1][0] = current_positions[1][0] + dir[0]; + next_positions[1][1] = current_positions[1][1] + dir[1]; + if (map[x][y] != map[next_positions[0][0]][next_positions[0][1]]) { + move(map, rows, columns, next_positions[0][0], next_positions[0][1], dir); + } + if (map[x][y] != map[next_positions[1][0]][next_positions[1][1]]) { + move(map, rows, columns, next_positions[1][0], next_positions[1][1], dir); + } + // Move current + map[x][y]->pos[0] = next_positions[0][0]; + map[x][y]->pos[1] = next_positions[0][1]; + map[next_positions[0][0]][next_positions[0][1]] = map[x][y]; + map[next_positions[1][0]][next_positions[1][1]] = map[x][y]; + // Free up positions that were left + for (int i = 0; i < 2; i++) { + int left = 1; + for (int j = 0; j < 2; j++) { + if (next_positions[j][0] == current_positions[i][0] && next_positions[j][1] == current_positions[i][1]) { + left = 0; + break; + } + } + if (left) { + object_t *obj = calloc(1, sizeof(obj[0])); + obj->type = EMPTY; + obj->pos[0] = current_positions[i][0]; + obj->pos[1] = current_positions[i][1]; + map[obj->pos[0]][obj->pos[1]] = obj; + } + } + + return; + } + + // Robot is a single unit + int next_x = x + dir[0]; + int next_y = y + dir[1]; + move(map, rows, columns, next_x, next_y, dir); + map[next_x][next_y] = map[x][y]; + object_t *obj = calloc(1, sizeof(obj[0])); + obj->type = EMPTY; + obj->pos[0] = x; + obj->pos[1] = y; + map[obj->pos[0]][obj->pos[1]] = obj; +} diff --git a/day15/input.txt b/day15/input.txt new file mode 100644 index 0000000..1dc0af0 --- /dev/null +++ b/day15/input.txt @@ -0,0 +1,71 @@ +################################################## +#O##.OO.O........OO.#...OO#.......O..O.....O....O# +#OO......O..OOO.O#...O....O#.O#.O##...........OO.# +#....OO##O.O....OO.OO.OO...OO#..O.O.O.#.....#.O#.# +#..#..O.O#..O...OO..O..O.....OOO#.O........O.O#O.# +#O.#.#OO..#.......O.O..OOOO.O.....O.O............# +#........OO...O.#.O..O.....O.O.O.O...O..O....OOOO# +#.#OO..O....#..#.....O....#.OO....#..#.OO..O.O...# +#....OOO....O.......#.#OO.......O......OO..O#O.#O# +#...##.O....O..O.O..#..OO.O...O...O..OO....O#...## +##OO.O....O....O..OO....O....O##O.O..O.....#.OO..# +#..O........O..O...#.OOO.OO...O..#OO....O....O...# +#..........OO..O..#O.............#O.O#.#.O....O.O# +#...O.OO.......OO.........O.OOO...O.OO...OO..OO.O# +#.O..O.OO..#.....................O...O......O..O.# +##OO#.O.#...O.....OO..O.........O#....OO...O#....# +#.O.#..O.OOOO.O...O.O.OOOO..O...#......#O.O..OO.O# +#...OO....OOOO.OO.#.#O..O..OO.........O.O.......O# +#...#...#.O#....O.#O....O.O.O......OO..OO......O.# +#.O#.#O..#O...OO..O......O..O..O.O...O..O...O...O# +#.......O........OOO....O..#O#.....O#............# +#.OOOO......#........#...O..O..#......O..O.O..#..# +#OOO...O...O..OO.O..O.#O.......O....O#..#.O..O...# +#..O...##.O.OO#..O..O..O.....O...................# +##O......OO.O...OO#.O.#.@...O...O...........#..O.# +#O.O..OO.O..O......O.OO......OOO.....#..OOO..O...# +#....O....O.O.......#.O..O....#..#...O..O..O.OO.O# +#.......OO..O.....O..O#.O...OOO.O.O...OO#..O..O..# +#..#.#O.....OO..O.O..O......O#.OOOO...O.O.OO.O#..# +#..O.....O.#O#.....#O..OOO.OO.O.......O.O.O.O....# +#OO#O..##......O.O...O#.OO.....O....O.....O.#..O.# +#..#O....O..O.O#.#..#O.#O.#....#..O...#.O..OO.O..# +#OO.....#O....O.#O..O.OO..O.##O.O..O..O.OO.O.##..# +#O.OO.............O...O..#....O.O.OO....#O.OO...O# +#.....O#......O.O.O..O...O#O..O.#..OO.....#..O.O.# +#.OO..O.O..O....O#...#..OO.O.##.....O..#O..O...O.# +#O..O..#.#..#.....O....O.....O.##.#.......O......# +#O....O.....O..#.#OO.OO.#...........#.#.#O.....O## +#...O.....O..#......O.O.O.OO..O#.O#...OOO.OO..#..# +#....O.O.#O....#.......O.......#....O...O..O.....# +#.......O#....O..OOO.#OO..#...OO#....OO.OOO.....O# +#....#O.O.#OO.OO..O..O...#O.##.#O...O.#...O.O..O.# +#O.O...OOO.OO.#O.....O.........#OO.O....#.O......# +#.O.O.......O....OO......O..O.O.....O...O........# +#O#..#O#......#.O.......OO...............O....O#.# +#..O.OO.....O.O.O#O.O.OO.OO.O.....#O##..#O.#...O## +#..OO#.O..#.O.O.#O..O...O.#.#O..O....O....#O..O..# +#.O...O#.OO.......#.O..O...#.#OO.#..O.O...OO#O.O.# +#.....OO#....O....O.O...O..OOO......O....O#.....O# +################################################## + +^^<>v^v^v>><<^<^<>>v>vv^<>^>^>><^>>>^<^v>^>v<^<<^>^<^v<^^vvv^<^^v^v>^<>vvv<<<^><<^v^^^vv^vv<><><^v<^>>v^vv<>>>>v>vv>v^>><>vv^^<<^^<><<<^v><<^v^vvv^vv^^vv^vv><<<>v<^^<^vv<^^>v^^>^><^^v<^^>v<^^^>>><<>>^^>vv<>^^v>v>v<^^<><<^>^^vv><<<^<<<>>v^^vv>^v>v><>^vv^^<><>^vvv^vv^>^^v^^>>v<>>>^>><><>v>v<<^v^vv^<^vv>v>v^v^>>^>^^>v^v^><><^<>v^<^^^v<>>^v^^v^<>v><^<^v^^vv<>^v^<>vvv<><>><^<^^<^^v>vv>>><<<^^v^v^>vv^>v^v<><>^>^>>><>^^v^^<>v^v>>v^<>v<^>^^v>^>v>v^vv<^>v>v>>^<><^^<^v^<^>^>>vv^<^v^>^^>^><>>^^<^^><<<<<^<^>>>^><>>v^^vv<>>^>><<<<>^>v^vvv^vv<^>^<<<<>>v<>^><^v^vv^v<><^>^v>v<^>vv^v><<^>>v^>v<^><<>>>v<<<<^<><>^<>v>^vv>^<>^^^vv<><^>v<<^><<^v<^v>^v>^>^v<>v<^>><<^<<<<<<^<>^^^<<>>v>v^v<^^v^^^vv^^<>v>v<><>vv<><^>><<><<><^>^v<^>v^<>>v^ +>^<>v<>^^^><^^^^^>^v<^>v^vvv<<<<^v^^<>^vv^<^>v>^^^v^v^<<<><^^v>^v<<>^v><^<>^>^v<<<^<>^<<>>v<^<^^^^v>>>>v^^<^v>vvvv>v<^vv<><<>^^vv<>^^^<^^v>v<<>><^^<<<<>^^v^^>><^^vv^>^v^^<>vv^vv^>^>v><^<<>>vv<>^<^^>v^v^^vvv^>v<<><^^v>>vv<>vv<^^v>^^>v^v^vvv>^^^^^v>^<<>^^>vv><<<>>vvv<^vvvv<>^<^<<<<^<^v<^v^^><<^>^v>v^<>^<<^<>>><>^v>^^<><^>>^<<<><>>^<^v<>>v^^<>>>^v>>v^vvv<>>vv><>v^<<>v<<<<>>>>^v<^<^vv^^^<^<^v^v^^^^>v^v^>vv>v^>^<^>vv>^>^<^v>>v>^v<vv<>v><><^>>>v^v^^vv^vv<>^>v>>^<<v^^vv<<v<^vv>>><^>^^<^^v^>>v>><^<>>>>v>>^^>^<^<>>>^<^^<<><^v^>^>^>^^><>>vvvv^>>vv^><><<<<^vv<>>v>^<<^<>^>v>^<^v^^^v<^<><^>v><>v^v>>vv^<><<>>v><^v<^><<>>^>v^><<^v^>>^>vv^^^^^>>^<>^>v^<<<^^^vv^^v<^>>^<>^>^<>v^^><>>>^^vv +>><>^^^<>v^>v>v^<><^^>^^<^^>^<>^><<>>^v<<<^^>v^<><v^^<^^<><v><^<^^vvv^^>v^>v^^>^v^vvv^v>^>v^><>^><>>^v>>v^<><<<<>>>^v<>^<>^>^^^>^^>^>v<^^^^>>><^<^vvv>v^^>^^^v<^^<><>^vvv^<^^v<^^>>vv^^<<^^^>v>>^v^v^v<>>>^v^<^^v<^>v^^>vv<^vv>^>v^v^^v^v<>^<>>^>^>v^>>>vv<<^^^<<<<^vv^>vvv^^v>v^vvvv>>^^^>^^>>^<^><>>>v^v<<<^^^>^^^v><>^<^<>vv^<><>>^<<>^^>><><>vvv^vvv<^><><^^v^><>^^^>^v>^v<^vv><^^^>v^^<<^^^^^v><^<><<^<^^><<<>v>v^^^^<^^^>^^>v^^^^^>v<>^>><^<><<<>^>^^^vv>v>>>^v<^>v>^><<>><>>>>>>^>^<<<><>>>^^vv^<^v<<<^^<^^v<>^>>>^v^<><<>^>v<<>vv^>>^v><<<^<>>><^<>v>><^<<v>vv^>^^v>v^<>>vv<^v<>>><^><^^v^>>^>>v^v<><<>>vvv^<>^v<^<<^v>vv><^^v<v>^<^>>^>vv>>>><^<>v<<<^v<>>>^>>v^v<<>^^>^<>v>>v<<>v^v^<>>>v>^><>><>v<><<>^^>>vv<^>^^<>^^><^v^>vvv>^<< +^^>^v<><>>>>><^><v<<>v^<^>><>^<^v^><<v>vv<<>>v>v^>^<<^><><^>^<<>v><^v>v>^^^^>>^^^v<>>v<<<<<>^<<>>v>^<>^^<><^<>^^v^^^^v<^^v<^vv^v<^vv>v^v><<<>>^^vvv^^<vvv<<><^v>>>^^^><><^^>^>>v^^<>>v>v^>>><<^v>vvv^^v<^v^v<<>^vv<^v>v>^<>^^>^v>^<^>>^<^>vv>><>^<<^<^^vvv^^>^^v^v<^<>v><<^v^^>v>>>><>vv><<^v^vvv<<>^^>^v<>><>^>^>v^^v^^^<^v<>>^<<<^vv^>>><^<<<^<^^<^v^<^^^<<<<<^v>^<>^<>>^>^><<^><>>>v<>v>^v^v>^>^vv^v^^>>>vv><^<>^^vv^>v<<^v><>^>^v<><<>>v^<<><^v>>>^vv><<>v<><^>>^>^^vv<>v<<>v>^<<>>^^>v^v>>v^v><>>^<>^><<^vv^^>^vv^^v>>v><vv<>^vvvv<<>><>>^><^><<>v^^^v<^>vv^^<^^^>^<>v^^><>v<>^><<>^<><^>^<^v>v^v<<>><^v^<^>>v^^>>^vv^^v><><<^v^v^^>^<<<>>>^>v<^<<v>>vvvv>vv^ +<^^vvv^>vv><>^v<>>^<<^v>>>vv>^<>>v^<<>>><^^>vv>>vvvvv^v^^<^<<^^<>>^^<^>v>v^<>>><<^>>>vvv^<^<><^^vv<<^>>>>>>><^v<^><<<><^^<>vvvv><^>^<^<^^v>v>^^>^<^<v^v^>^vv>v^v^<^vv><^<^>>v>v<<<><>^v>^^v^<<^>>v^^^><<<>>^^<<^v^v^<>^^vv>vvvv<^^^v<<^<>>><^^<<^v^<>vv>v<^>v>>>^>v<>>^>^<^>>>^<>^^^<<><>v^^^>v^v<>>vv<>vv^v>>^vvv^v>^^v^^v>vv<>^^>v>v>>^><^<<>>v^v^>^^^<>>v>>v<>^>v>^^^vvvv>v><>v<<>^v>^^v>><>^>>^<^<^<<^>v>^v^^>^<<^v^<>>^^^v>vvvv^^vvvvv^v<<>>>vv^<<<^^^^v<^>><>^>>>^^^^v^<<>>v>^^v^<>>><<<^>>vv<><<>>^v>v><<^v<>^v<^>>>>>^>>^v^>v^^>^^vv^>^^^<>^^vv<<>^<v<^^vvv<><>>^^<>>>^vv^v^^>><>><^><>^>^^<><^>v^^>v^<>v^v><^<^v>>^<^>>^>vv<v>>^<>v^<^>>>v^^>>v<^^^>^v^<>vvvv<<^>>^^vv^^<>^>>><>v^>v<>>v>^><><<>vv<^<><><^><<>>^<^^^^>^vvv<^>><<^^<>^>> +>^v>>>^<^v^^<^><>vv>>vvv<^<^^v<^>vvv<>v>v<<^^<>^v>v>vvvv<^><^<^^<>vv>v>vv^>v^>>>^^^>><>>^^v><<>vvv<>>^^>>v^^<^>v>v<>^vvv^>>^>>v<^<>v^<>^v<^<>^<<<<^v^v^<>^>v>^<>^^<>v><^v>>^<^>^<^vv^v<><>vv^><^><v><>v^<>>^<<^^^v<^v^<^v^vv<^>^>v>^^>^><<>^>^v^<^^>>v>v<>^v^>v^v^v<><<^^<<<^>v>^>v>^>>>>^^>v<^vvv<<>^v^<><>^^><^v>v>^^^><><^v><><<>>v^^><<>><>v^<^<^><<>v^vvvvv>^v><<^<^><^<^v^<<v<>^^v><^^>>v^<<<>>^vvv<<<<<^^v><<<>vv<^v^v>^>^v<<><<<><<>v<>>>^>>^^>^vv^<^v>vv><>^<<<<>><^vvvvvvv<>vv^^^^vv^<<^<^<^>v^v^^^<>><><<>><^v>^v^vv<><^v<<>^>v>^<<>>><>vvv><^>v><>v>><^<<^><^><<<^>v^>^v^v<<>vvv^^>>v>^^>v>>^<>>><<^^^<^>v>><<>v^^<v^><>^>^^v>v^^<>^^>vv>vv<^<>^^vv^><<><<<<^>^><>>^vv>^v^v^>>^><^^>^^<^^v^vv<><^>v>vv^^^>>>>v +v<<^v>>vv^<><>>v><>vvv<>>v>^>>>^<>^vvv>^>^^>>^^<>vv^>^^<><>>^^>>^>>v>^^v>v<>>><<<<^v^<<^vv<<^>^>v^>^^v<>v<^v^^<>><^>><^<<<^v^^^v<<^<>>v<^>v>^>v^v^^^^v<^<^^v^vv^v>v^^^>v><><^^^v><>^>^>^>><^^^>v<<<<<<<>vv<<<^>v><^><^>v^v^vv>vv<^><^><<^<^<>v>^v^^>><>^v>>^^<^v^>v<><<>>^v^^^v^^vvvv^>v<><^^^^>^<>>vv^^^^v^<>v<^v>>><v>v<<^v^v^>^>^v^^>^<^<><>^v<><^^>^<<^^^<^>^>vv>^^^>^<<>vv^>><<>vv<<<>vvv^v^v<><^^^v<^^>^v^v><<<^>^vv>v^^vv^<^>>^>vv^<>v^>v>>>v>^vv>^^vvv<^>^v<><>v^v><><^>^><<<>^><>>^^<<<^>>><<^v>^^>>>v>^v^v^>v>^^^^<>>>v^v^^^>^^>^>v^vvv>vvvvvv>v^^v>^^>^vvv^<>^vv>^vv<<>^^>>><v^^^v>v>v><^v<>v><v^<>^>v<^>^^>v^vv^><^<^<>^v^<<<<^<>>>><<>>>>v><<>^^<><^>v<<^>^^^<^v>v>v>^^v<>v>>^^>v<>^^^vv>><^>^>vvv>>^><<^v><<^^<^^^^^^v^v>^>^>v^v>^>>v>> +>^><><<>^<>^^<^^^vv><>^^>vvv^>vvv><<^v^^v><<>>^<<<<^^vv<^>>>v^v>>^vvvv>><<^vv^^>^>^<^v>^v><<^^v>>>^v><<>>>>^<^^^^^^>^^<^v^v>>^^^<>^><<>^>v>>vv^^vv<<>v>>^^^v^v^^^><>v<^^^v<><>>vv>^<^^>^^^vv>^^vvvv^<>>>^^^><^v<>v^^v>^>v><><<>>vv<><<>vvvv^>v^v<^^vvv<><<<<^vv>><>v<>><^<<^<^^^vvv^<><<^v>v^><^^><v^>v>>^>v^vv<<<vv^>v<<^v^^^>>>>vv>>>v^>v^v^<^^^v>vv>vv>><<>>>^<^>^<<^<^><>vvv>^^vv<>v>v>v^>>^<^vv>>v>v^^v>>^^<>^><^>>>^><^v<<<<<>^<><<<><^>vv^^>v>^>vvvvv^>>><<^><^<^^>><>v^<^v>^<>v^v^v>>v<<^v><>v>v^v<^v>vv>v>^<><>vvv^<^^^<>vv^><>v^>>^v^<^vv><>v<<^><^>^v>vv>>>>^^^<<>>v>>^^v<>>><<^v><<^>^v^^<^><<><>>>^v^<<>>^>v><>>^^>^^v>>^<>v^<v^^^v>>^v^<>^<^><>^>^<^><>v>vv>v^<>>v^^vv^v><>>>>>>>v>vv^>vv^^><<^<^^<>>v>v<<^<><^>><<^><^>v^<>^ +>^v<^^^^vv<>>v^v>v<<>v^<>vv<<<>^v<<>>v^v^><^>>vv^v><<><^^>^><^^<<>^>^^<<<^>>><>>>^vv>>^v<v^>^<^^^^^vv<><>^^>vvv<>v^^><^<>><>v>v^vv>^v>^>v><>^>v><>>^<>v^^^^>v^^>^>>^>^v<>v<>^^^v^><<<v<<>>v^>v^^>>^>>^^>>>v<>^vv^<><<>v^<v^vv<vv^v^>v><<^>>>^>^v<>v^<^vv<>><^^v<>vv>v<<^>>^v>v^<^v>vv^^^vvvvv><>^v><><^^vv^^>^><>>v>v^<^vvv><vv<^>>>><<vv^>>>v><>>vv^^v>^^^>^^^^>v^^><><<^<^><^v><><<^^><<^vv<>v<>>v^v>><<<^><<^^^v>v>>>v^^<^^v>>>v>>>^<<v^><^>^<<<<^^>^>v^^vv<^^<<<<>^^^^<<>>^^^>vv^vv^><^v<^>><><^v^^>v^^>v<>v>v^><^>>><<<v^v^<v<^v>^<<<><>>^>>v<>>v^v>v>^^vv<>^vv^^v>v<^v<>>^><<<^<><>>vv^^vvv^v^<^v><>^^<<<>vvv<>v>^^>^v^v>^v>>><>^>v<>^>^v>v^^v^^>^<<>>^<<<<><<><<>>v>^v>>>^v>>v^<>vv^>v<>v^^<^v<^<><<><>>v>>^<<^v>^<^vvv^v^>><>><>vv<^<^vvv>>^>v<>^^^v^><<^<^^^<>vv<^>^>^>^><^><<^>><>>v<><>vvv^v^^<<<>^>v>^>^^^>vv<^vv^^^>>><^<>><>><<>v><^vv<<<<^<>^^>^>>^^v>^v^>v^<^>>>v^<^vv>^^>>^<>>>^>v^<<>>>><><<>>>^>>^>>v^<^vv<>>>v><>v^>^<^^>v<>^>>vvvv><>>v<>^v>^^<<>vvv><<<^>><><<>^>^v<<><<<vv^>^vv<^<>><^^>^vv^vv^><>v<<<^^<<^^^^>><>>><>>^v<v<<^><^<>^^<^><v><<^v>>v<^><<>vv>vv<vv^>>v>>><^v^^vv^^<^>v<>vv^>^<>v>^>^>><>>>^>v^v<<^<^^<<^>^<><<>><>^>v<^^<<>^v<^v^^v<<^^>v>>v<^<^>^>^><>vv><<^^vv<>>v^><>><<<>v>vv>>v^>^<<^^><>v^>>><^>>>>v^v^v^v^^<>>vvv>v>^vv>>^v><>vv>v^v<^^><<<^<^>>v^^vv>^v<^^<><>>v><^><>^^<^<><<>>v><^<^><^v>^^v<v<>><<^^v<^v<>v^^>v^^^vvv>>>>><>>v>^v<>>><>>^>^vvv>><>v>vvvv^<> +v<><<<^<>^^^v^<<>v<<><><^>^vv^v<^v<<><^>v><^<^>>>><>^^<^vv>>^<^>^<>>vv^v^>^^<>^>>vv<>><^>vv><^>><^^<<>v>>>^v>>>vv>vv>^v<>^^vv><^v>v<^v^^v^v>^^^>><<<^v<^>v<>>^>v^^>^><><^<>v^^vv>^v>vv><^<>^vv>^<>>>v<^>v>v^<^>^><<<>>^>^<^v>>v<<^>>>v>v^^>vv>>><<<^v^<^^^^^v>^v^>^vv<<<^^^>^v>^>^>^>^v^><<<<>vv>vvv<^v>>^>vv><<v^^^^<^vv^<><<<^v>^>^^<^<>v^><^v>v<<<^<>>^v>v>>v^>><^<<^^^><^>v^v>vv^>v>v^v<<^v<<><^^<^vv^>>v^^v^<^v^<>v<^^v>v^v^^^<^v>>v>><<^>^v^<<<>^v^>^v>v<<<<<<>><<>vv^^vv>vvv^^v<>v>^v>vv<<<^>>v>^><>^^vv>v<>v<^>v^<<^^<^v^vv<<^^<^>><><^<^v>^vv^vvv<>^>>^^^>^>^>^><^><><><^v>v<>^v<<<>v>^>>v^vvvv>vv<^v><^>>^>>>v^^^v^v>^<^<<<>>>v>^>>><>><v^<^<<^^<>v^v>^^^^v<^<<>^<^v^vv^>>^<>v>>>vv><<>><>^v^>v>^^^vv>>^^vv>v>>v^^>v<<><>v<<> +<>><>v^^v<v^^><<^^>^>^^v>><<>v^<^^^><><>v^v<>vv>^<^>^^^v^<<><>vv><^v>>^>^>^^<^>^^^vv>^<><>><<>>^^>^><<^^<<^<<><^vv>^^v>^<>v>^><>v^vv<>>><^vv^^v^vv<<^>vvv>v><^v><^v^^<^<^<>^^>>^v^><<<<>^^<<>><>>>>v<>>^<>>v^>^<^^v>>^>v^^<^>><><><^v^v>v<^^>^>vv^v>v>v^<>>v>><>^<>>v^^vv^<>><<^><^vv>>^><<><<>^^<<<<^^v^<^<>>v>^vvvvv<^v<v^^^>v<>>^^>^v^<^>v<^>v^vv>^><^^<>><^v^<><<<^><>><^<<><^<>v^>><>>vv>>^>vvv>><>>vv<^>^>^v<<^^<<^>^>v^<<^<^><>^v<^<<><^v^<<^>>v<<^><>v^><<>vv<^><<^vv>v<<<^>^>>^>><^vv<<^<><>>^>^^<^<^v^v>^<^vv>v<^><<<><v^<<<^<<^>^vvv^v^v>v^>v^^v>>v>v^<>vv^v^>^v>v^^^v^^v>^><^<^<>v<^>^^<^>>>^<>vvv^><<v^>^><>>><^>v<<^v>><<>^><^^vv>vv^>v<^^<<<>>^v^^>^^<>vv^><^^v>^>^<^^>vv^>vv^><^><<<>v>^^^^>>^<>v>>v>><^^>v^vvvv^^>>vv^>v><>^^^<^^<<>vv^>v<<>v><>>><^vvvv^>^<>v^v< +v^vv<^v>^<<<>^vv^<^>v^>v>>>^^>>^<>v><<^<>><^^>v^v^>>v^>>><><<><<><^v<<<>>vvv><>><>v>^><><>^vvvv>v>v<<><>>>^<>>^>v>>>>^<^^><v^^><>vv>>^^><><><<^v<^<>>>^vv<<>^>^><^^>>v<>v<>v^^>v>^>^>>v>^>v^>v><^vv><<<^^<<^<^^<^vv^<>>v<><>^<<><^^>^>v^vv^^<<<>v>v>^<v>>v^<<>^>v^<^<><<^<>^v^vvv^><>^<^^v>>^v<<>>v<^>^^>^>^<^<>^><<^^>vv<^<^v^v<><^^^v^^<><<^^>v>^<<^>>>>v>v^<>>>vvv>>v^<>^><<<>>v<^^<<>vv^<>vvv<>v><>v^^v>v^>v<>vvv>>><^vv<>^>><<<><^>^^<<^^^>>vvvvv^>^^><<v><^><><>vv^vv^v>vv^v><^><><>v<^^v^v<><>^v^><>^^>>vv<>>vv>vv^^v>^>v^v><>v^<^<^vv>^v<>^^>^>v^<<<^>^^^<>vvv>>v^>><^^^>>>v^^<><>v><>v<<<^^><^vv^^v^>><<^<>>>v^^>^>>vv^<^>vv>^vv^vv<^>>>v>^>^>^vv>>><>v<<^><<^>><>v^v>v<>^v^^>vv><>v>^><<<>v^^<>><^^^vv<>v^vv<>^><^^>^^>^<^>>>vvv<^^^v<<^<<><>^>vv<>^<<>>v>>^>vv>v +^<>v<>v>v^<>v^^^^vvvvv^v>vv^v^v^^v^^^^>v^v^>>v<>v^^<>>^<^^^>v<^>vvv>>^<<>>>^<>^v>^^v^><<<v^<>>v>v^>^>>><^>vv<>v<<>v^>>vv>v>^>><^><^v^><^^<^>>^<^>v^<<>><>>>>vvv<>^v^vvv^v<>^v^^^^>>>vv<>>v^>v>v><<<^^>>>v<^v^<<^v^<<><>^v^^>^vv<>v^>v>^^<^v<^<^vv<>v^vv<<<<>>^v^>v^^>^^^<<<^<>v>^vvv<^^<>>v^>>^^^<>><^^^^v>>>^>v^v^vvv>^v<>^><<>>^v^^>^<<^v<>>v>^vv<^vv^v^><^^^<><<^<>^^>^vv><<<<<^v^<^v<>vvv^v>v^>v>v^v^<>^^<>v>v^v<<><<<>^^v^>^v>v^^<<^v^>>^v<>>>><^^<^^^<>>vv>^^v>^v<^>><>v>^<<vv<^<v<>^v^^<^vv<^>>^vvv<><^<^>v>^vv<<<>^^>v>>^v><^^vv^>^vvvv^v^<^>v<>^><^^^<>>v><><>^v<^v^^>^vv<>vv>>>>><<<<><>>^<^<<<>vvv<<<<>><>v^v>>^<>vv<^v^vv^^^v>>vv>^>^<^<vvvv^vv^^>>^v^>^v><><^<>v<>>v^^>^>><>^^<>>vvv^v^>>^^<<^<<<^<>v^^^^^<<^>^^<>><>>>>^<>>>>>>v^vv<^>>>>v<>^v>>v<<>^^v<>v^^v<^>><>>^^>v^^<^>vvv>vv>v^v^>^>>v^>vv^>v<vvv>v<^>^v>><>v^<<>v^^^>><^><>^<^>>^v>^v^<^><>>>>^v>v<>^>^^<^<<>>^^^^v>^>vvv<<>^>v<<^^^vv>>>v><^^v<>>v^v^>>>^^^><<^^<<>>><<<><<>v<>>^<><<<^>><>><>^v>^v<<<>^^v<<^v>v>>^^^v^^^vv^vv>^v^v^^^v<^>v<<vv<>vv^^>>>>><v>v^v<>>^><<<^<<>>^^<<>^^vv<^>>^>>>>>>v>v>>^>^^^>>^<<^^>>v<<^<<v>^^<><^<><><>^^v<>>><^<^<^<^v<^^v><^<^>v<>^<><^>^>>^^^vvv^^>^>^^^>^>v><^>^>^^v^>^<^><>><v^v<><v<>vvv^^^<<>^^^v^<>>v^<^>^<>^<><>^^<><vv><<v>^^>v^>vv<>^>vv>^>>^>^<^vv>>vvvv>vv^<^>>^vv>vvv>^>v>v<<>><>vv<^<^><^^>^><^v><^>>v<<^>>vv<^>v>><^v^<>v><^^<>^vv<<>>><><<>^>v^^<^^v^>^><^<^><>^<>>>>^>>vv>>vv^<<^vv>v^<^v><<>vvv>v>>vv>^^^<^v<<<>v<><>>vvv^<>>>^^>v<^^ +v>^^>v<<>^<<<^^^^^>v><>^>>^<<<>>v<^><<^<>>>^v>v^^^^v<>^vvv>vvv><>^^vv><<^v>v^>vvv><>><><^^vvv>>>^^><^^^>>><>vv<<>vv<>v^vvv><<^^v^>v<>v>v^^vv^v>>>vv<^vv><^>^^^>>v^<<^vv^>><^vv>v^v<>><<>vv^>v>v^>><^^>v^^^>^v<^^v^>v^^^<^^^^<^><>vv<>^^>vv^v^><^^>^^vvv<>^^>v^v^<^^><>>>^^v^<^^v>vvv>^vvv<^vv>vvv<<><>>^><>^<^>v<<<<><^v>>>v>v^^v><>^vv<<><><<<<<<^^><<^<<<>^v>^><>>vv^>><<>>>vv>vv<^<<^<^>v<<<>^<<^<<<<>>>><^^<^^<^>>v>^^^>v<<^vv<^^vv<v<^><^vv^^>vv^v^<^^^v>>>>vvvv<^v<<<^>v<^<>>^>^<>^<>vv<<><>^><>vv<<>^^^vv>v^<<^v<<<>>>v<><<><><<>>^><><<<>^>>>^<<^<^^v<>>v>>v<<^><><<^^v>v<^<^<<>v^v^v><>>vv<<^v^v<>v><^<<<^vv>^>><^vvv>^<<<^v>^>>v<<<^v<^>^v<<^v^^^^^v^><<>^vv^^^v<>vv>>^<>>^<>v^>>^v^>< +^^>v<^^vv<><^^<>^v<^>><^^<><>^><^<^v^^v<^>^v>v>vv>^^>v>v>^^^^v>v^v^v>^>>^^^>>v<^<>^^vv<^^>><>>^vvv>^vvv>vv<<^v^>>^^^v^<<^>>^^v^^>v^^>^>^^><>v>v<>v^^v^>^<>><>>>^^>><<^>><><<>>>>^^>>^v><^<>^>vv^v<><^^<^>^v><^^>^<<<<<^^v<^>>^><>>v>>>vvv>vvv>^v<<<^vv^^vv^<^^v><^<>^v<^^v^<>v>^^^^>>>v>^>^^v<^<<>^><>^>><>v>v>^<><>^v^<<^<<^<>v<^^^v^<><>>v>v^<<vv>>vv^>>v><<^^>>^^>>^^^v<<^v><>v^^v<^vv^>v<<>v><<<>^v>v<>^^^^>>v>>vv<^v>>v^v<<><>v>v<>^<^v<>>>>^^^<>v<<<<^>vvv^><^v^^>^^>>^>><^vvv>v^^<<>><^vv^vv^<>^>>^<>><^^^>^<>v>^vvv>>>>v^vv><^<<<>v<>>^>>^>v>^^v>^^>^v^^<^>^<><^<<<^^^vv>^>>v^><<><><<<^^>^>^^>vv<^^vvv<<>^>>><^vv<>>v<<><<>><>v>>^>^vv>><^v>v^v>vv><<<<<>^><<<>^<^^v^v<^^>>><<>>^v^>^^vv>^<>><<<^v<<>vv>^vv^v^^>>^^^^<>v<>v>>^>>>>^>>>v^v>><<<<>v<^ +>^>^<^v^<><<<<^><>^^<>>vv^v<^v>v<><<<^><^><^<^^<<>vv^<<v^<^v<^<^vv<^<^^<<>>v>>^>>>^<^^>v>v><<^v>>v>><>^<<>>vv^^^><^<v<^<>v>v>^>>^^<^><><<<^>vv>>>>><>vv<>^>^><<<><v^>>><^v^^^<<<>>v^><^><^>^<<^<<>^^^<v>^>>vv<<<^^^<<>><^^<^vv<><<^<>>^>>^^>^<<^vv<<<>>>^^^vv>v^>>>^v<^^>^>>>^v^vvv^<<>>><>><>v>^v>>v<^^><>><>>><<^^^>v^<><^^<>><v>><^v^>>>^>v^v>^^><>>v<>v>v^>v>>^^v>vv^vv^v>^>vvv<>v>v<^vv>v^^^>^v^>^v<>v>^v>^>><>><^<^>><^v<<><^>^v<>^v>v<^^v<<^v<^^^v<^<<><>v<>v^><>^^v<>^vv^^<^^v<^<><<<^^>>>>^<>vvvv>^>vv^<><><^v>v^^><<><>^^<<^<>^^^^^<<<^><>^v^^<v>><<^>^v^<^^^^v>v<<<^<>v<^v>^>^^>v<^^>v>>><>v<<^^^v>^<>>><<>>^>>^<^^^<<^<<>vv^<^<<^vv^<<v^^v^<>^^^v<>v>vvv>^>^v<<>>^^^vv^>^>v^>>vv<<^>>vvv>>>v<<^v><>^<<<>^v^vv^^vv>^^^v^^<^vv>^>^<>v^>v^<> +^><<^^vvv>v>v<^vvv<<<<>><<^>><<<>>><>v^>v^>>^vv<<>^>>>>^>>^><>^v><<>^^>^v><<^^vv><^^v>v<^v^^^<^<^v>v<>>^>v^^<<>>v>>^^><^<^>^v^>vvvv>^v^vv>>v>v>^<^^>v^^<>>>^>v>^<>^<<^>^>^><><>^><>vv>><<>>>^v^^^<>^>>v^><^vv^^<><<^<>^<^^v>v^v^>>^<^v^><<<<<^>vv>v^^^^<^^^v><>v<>v>vv>>>><<^^<>v<<><>v<^>>v<>>^><<^v>v<>><^v^>^<v^v>><^^^<^<><>v<^^v>^v^<<<<^v<<^^^^v>v>^v^^<^vv^v<<^>^>v<>^^^<<><>^v<><^<^<^>v>^v<>^vv>^^^>vv<><>^v<><<>v^v>><>>^<^^<^^^>^v^vv^vv^^^v>v><^vv^>>vv^<>>^<^v<>>^^^<><^v^<<^^>vv^v><<<^>v^^^<><>v^^v>v><^<^v<^^^^v^^><>v<^^^^<<^v<v>v><>>^><^^vv^vv^v<>vvvvvv><>>v<>^^>^v^>vv^^^^>^<><>^<<<>><>^v^vv<>^^<^^vvv^vv^v^^>><>^vvv><^vv>>>^>^>>>v<^>v^^^v<<>v<^v^<>^<^>>><<<>>vv^v>^v^v<^^>v^^>vv<^>vv^<^^>^^v>>>>v>v^^^^^>^^v<^^>vvv<>^><>^^vv>v<>v^^v>^^^>>v>>><>v>vv^^<^^v^>v^^>v<^v^>>^vv>vv<<^<^vvvv<><>>< +>v^v^^^^<^^v^<>>v^>v<^v<^><^^v>vv<^^>vv>v>vv^><>^<>>v<^^<>^^>v>v^^>vvvv<><>>v<<^><<^<<>>^<^^v^<^^vvv^^>^>^>>v<^^vv>^>^<>^><>v^v<<>>>^v^^vv><^<<<>v>^^>vvvv<<^vv^>^vv>^^>^<<><><>^>^<><><>^<><^^^v^>v<<>vv>v^^v>>>^v<^^v^vv>v>^>>^<>^>v>v<^v^^v>^^<>v>v<^>v>><<vv>^>^<^><>v><<>>^^<^v>v>v^v<<>v^v^<<>>v>>vvv^>vv^v<>v^>v><<>vvvvv^>>><>>v^><^<>>>v^v><^>>>^^>v^>^>v>><<>><<<>vv<^v><>^><^<>v<vvvvvv>>^^<>><>vv>v^v<>>v^^v^>v>><<^>v<^v>>>>^>^vv<^<^v<<v>vv<>>>vv<^>><^>>^<<>v<^>>><><^<><><>>>>>^>>v><^v^<^^^>^>>^^^v<^>^><^>>>><^^^<^>^^v^<<>>^^<^><<^<^<^>^>vv>>vv^^^^^>vvv^vv<^^<^>vv><>v>^<^^^v^><^v><^vvv<^^vv^<>^<vv^v>v<<>>>>^>>^vvv>>^vv><^^><^>^^>>v>^v>v<<<>><^v^>>>^>^><vvv<> diff --git a/day15/sample.txt b/day15/sample.txt new file mode 100644 index 0000000..84cf1fb --- /dev/null +++ b/day15/sample.txt @@ -0,0 +1,21 @@ +########## +#..O..O.O# +#......O.# +#.OO..O.O# +#..O@..O.# +#O#..O...# +#O..O..O.# +#.OO.O.OO# +#....O...# +########## + +^v>^vv^v>v<>v^v<<><>>v^v^>^<<<><^ +vvv<<^>^v^^><<>>><>^<<><^vv^^<>vvv<>><^^v>^>vv<>v<<<^<^^>>>^<>vv>v^v^<>><>>>><^^>vv>v<^^^>>v^v^<^^>v^^>v^<^v>v<>>v^v^v^^<^^vv< +<>^^^^>>>v^<>vvv^>^^^vv^^>v<^^^^v<>^>vvvv><>>v^<<^^^^^ +^><^><>>><>^^<<^^v>>><^^>v>>>^v><>^v><<<>vvvv>^<><<>^>< +^>><>^v<><^vvv<^^<><^v<<<><<<^^<^>>^<<<^>>^v^>>^v>vv>^<<^v<>><<><<>v<^vv<<<>^^v^>^^>>><<^v>>v^v><^^>>^<>vv^ +<><^^>^^^<>^vv<<^><<><<><<<^^<<<^<<>><<><^^^>^^<>^>v<> +^^>vv<^v^v^<>^^^>>>^^vvv^>vvv<>>>^<^>>>>>^<<^v>^vvv<>^<>< +v^^>>><<^^<>>^v^v^<<>^<^v^v><^<<<><<^vv>>v>v^<<^ diff --git a/day15/sample2.txt b/day15/sample2.txt new file mode 100644 index 0000000..8163605 --- /dev/null +++ b/day15/sample2.txt @@ -0,0 +1,10 @@ +######## +#..O.O.# +##@.O..# +#...O..# +#.#.O..# +#...O..# +#......# +######## + +<^^>>>vv>v<< diff --git a/day15/sample3.txt b/day15/sample3.txt new file mode 100644 index 0000000..6ee6098 --- /dev/null +++ b/day15/sample3.txt @@ -0,0 +1,9 @@ +####### +#...#.# +#.....# +#..OO@# +#..O..# +#.....# +####### + +