From 0913b3f9357232911c68e5bda8050d2f98f9c1df Mon Sep 17 00:00:00 2001 From: Georgios Samaras Date: Sun, 15 Dec 2024 19:26:33 +0100 Subject: [PATCH] day 15 --- day-15/input.txt | 71 +++++++++++++++ day-15/main.c | 221 +++++++++++++++++++++++++++++++++++++++++++++++ day-15/test.txt | 21 +++++ day-15/test2.txt | 9 ++ 4 files changed, 322 insertions(+) create mode 100644 day-15/input.txt create mode 100644 day-15/main.c create mode 100644 day-15/test.txt create mode 100644 day-15/test2.txt diff --git a/day-15/input.txt b/day-15/input.txt new file mode 100644 index 0000000..6c833d5 --- /dev/null +++ b/day-15/input.txt @@ -0,0 +1,71 @@ +################################################## +#OO#..O#......#...O.O..##..O.....O...O.......#...# +#...O.O...O.OO.O....O...O.#...O...OOO#O..#.#..O.## +#..O.O.....O.....O..OOO.#OOO...O....#.#.OO....OO.# +#.......OO#....OOOOO#...O..#...#..OO#O.....O.#...# +#......O..O....O....O......O..O....O.O#...#......# +#...OOO..O..O..#..#.....#O.O..O.....##..#..O.OO#.# +#..#O.O..OOO..OOO..O.O.OO......OOO.........O..O.O# +#...O.#...O##O....#O..OO.O..O.O.O....O....#......# +#.....O.O..OO.O.....O......O.#O...OO.O......O.OO## +#....O.#O.....O...OO.O.OO......O.O.O..........#O.# +#...O..O.#.O..##.O.OO.O.O.O.....OO.....O.O...O.O.# +#.........O#.O.O...O.#..O...........O#..#.#OO#...# +#O.#..O.#.O....O....O.O..#.O..O.OOO.O..##..O.....# +#..O..OO....#..O..O........#.OO...#...O##..O....O# +#..O...#.#O#..O.O..O.#.OO.#.##O.O.#O..OO.O.OO..O.# +#O#..O..#.#O..O.....O.O.O..O..#O....O..OO.......## +#..OO..................##.#.O...O......O.O..OOOOO# +#....OO....OOO........#O....#O#.##O.O..OO.O#.....# +#..#.......O.....#....O..#........OOO.#.O.O..#.### +#..O........OOOOO......O.O#..O.OO#....#....##....# +#.OO.#....O..#O......O.O....#...O...#..OOO.....#O# +#.O.......#O...OOO.OO.O..OOO...OOO.##...O#OOO.O..# +#O##O..O..#......OO.OOO.#OO....OO....O...OO.#.O..# +#.#.O.....O..O.O..O..OO.@.O.O......O.....#O##O..O# +#....OO.........O.....OO...#..#...O..#O#.....OOOO# +#.O.O#.O.......O#...OOO....O.O.O#.O.O..O.........# +#O..O.OO...O..OO...O.OOOOO..OOOOO.....#..#..O.O..# +##.O....OO..##...OO...O....#.O....O#.##OO.O#..O..# +#.O.O.OO.....O.#.O.#.....OOO.O...O...O#.O.....O..# +#.....O..##O#.....#.O...O....OOO.#O.....O.O.....O# +#...O..O#.O..O.##..O...O....O.#....OO...###O....## +#O...O.O....O.OOO...##.O.#...OO.O.......O.....O#.# +#..O..O..O.O..##O..#..O...#.....O.......OO...#.O.# +#O##..O.O.....O.#O#......OOO.......OOO...O.O#..O.# +#..O.O.##O..O....O.OO.O......O.O.OOO.O#..O.O.O#OO# +#...#..OO#O.#O.....O.O.O...O.O.....O..OO#....O#.O# +#O......O.O...#.O....O...#O.#......O...#.O#O...O.# +#......O.#...OO...O.O...O..........O......O..O.O.# +#..OO.O.O#..O.O....O.O.O..O..O.#..#.#.#O......OO.# +#.O#..O....O..OO..O....#....O..OOOO.O.#..O.......# +#O.........#.O...##..O..#...O...OO...O...O......O# +#O.O........OOO..O..........O...O#.O..O.O...O....# +#O.O#..O.O..O.OO..OO...........O...OO......OO.#.O# +#O##..........#..#.O..#.OO.O...........OO....O..O# +#....O....#OO..#O#..O.......O..O.O.O..O#.O.O..O..# +#............O.#.O.O.OO......OO.O.O.O.O..#O.OO.O.# +#O.OO......O.#..OO...O.....O.#..O..OO..#.#OO..O..# +#.......##.OO....O.OO.#..O.O.O..OO..........OO..O# +################################################## + +vvvv<>vv<>^vv>>>^v>^>><>^<^v<>v>>><^><^v<>^v><<<><<>vv>^v^v<^vvv>>vv^>^vv^^v<^v^>^<^><v<^^>^^<><>><<<^^v><>^^^<^^^^>vv^>^<<><<^^vv<^<>^>v><>^^v<>>^vvv^^^^<>vv>v^^<>><^>v<^<>^^^^v<>>v>^v^^>>v>>^>><^vv>vv^v><>>^>>>v<>^^>^^<^<><<<>vvv^<^^^^<^^<^><>^>^<<<>>><>^<^^><>>>^^>v<<^>><<>^v^>>>vv^vv^vv^>v^>v^v>v<^v><^^vv^<<>^v<<^v><<><<^^>^vvvv>^>v>^^<^v>><>^>^vv<>><>>v>>>v>>^<^v^>v^^>^>><>v>^<><^<>>>^v>>v><><>v^^>^^<>^<><<^^v^>vvv^>v><^^^^^>^v^^v<><<^<>v^^^<v^<>^^>v^vvv^>v<>vvvv>vv^^<>v^><^<^<^^<>^^v<>^>>>v<<>v>>^<^^^^^v>^^^v^>>>>vvv^vv>vv^^>^v>v><^>>>>v<^vv<^v^v^^v^>^>>vv<<<^^^<>v<^>>>^>v<^>^^<>^<>><^vv<>v>>><>v^<^v>^<<^v<>vvv^vvv^<^v^>vv>^<<^<>v^<^^^^^v<v^<>^>>^^<<>><<>v^v<^>>>^<<>^^<>>^v<<> +v^>><^^>>><<^vv<<<^vv>vvv<^v<v^v^^<>^^>>>><v>>v>v<<<<<^v>v^^<>^^>v^<^^v^vv>v>v<<><<><>>>^<>>^v<>vv^^^<>^<v^<^>^v>^^^^^>>>^<^<<>^^^<^^>^>v<^><>v^<^v^>v^v>^^v^>v>v^^v><>>^>^>vv^>^>^^>^<>>^>v^v>>><<^v>vv>v>v^^^>><^^^<>^>>^>vv^v<^>^<^<^^<>^^v^^^vv<>v^^^vvvvv^^<^<^<<^>^<>^v>vvv<^<^<^<^v<^v>>><v<^v<>>>>^>>^vv^v^v<<>v>><^<^<>v>>^>^<<>^^<>vv><>>>^^><^vv^>^v^<>^v<<^v>^<><<^><<><>>>vv>>>>^v^<>>v<><>>^><>v^^>^<<<>^><<>^<>^^v>><<^<^<>^vv^<<^vvv><<v>>^v^<<^vv<<><^>v<<<^v>^<>>^><^>>v>^>>v^v<<^>vv>^v><^^v><^v^^v<^v^v^<>^<^>>>vv^^<>^<^><>^<>>^v>v<^v^>>^>^^^^v^^><>vvv>v<>><^vv<>><^><>^<>^<<^^>v<^<>vv^<<<^>^><^^vv><>v<^<^<>^<<<>v>v^v<^vv^^^>^^<^^^v^<<>>v^^><vv^>^^v^v^<^^<^><>vv^^^<>v><<^<>>vv>^v>v>>>vvv><^<<^v>>v<>>^ +v>^>vv>vvv>^>v^<^v<^^>v>^<>>>^^<><><^^>><>^<>^>v<^v^<>v^v>^v>>^<^^^^v>><><^^v<<<<>^^>v^>v<^v<>>>^v^>v^<^vv>v>^><^<>^^><>v<>^>^<>><^>^<^v^<>>^^><^v>v^>v>^vv>vv^^v<>>v<<><^v>^>v^^>v<<^^^><^^<<^vv<^v^>^>v^<><^><>>^v><^>^>^v^>vv^^><^^vv^>v^v<<>v^><<><>^>v^<^<<>>v<><>>^<^^>^^v>^^<>>>><<>v^>>^<>v^v>>^v^^^>>>>^>>^^>^>><>>v^<^>v^v<<^v>>^^<^<^<>^<<^v^v^>vv^v^><^>^<<>>>^<>vv><^vv><<<>v^v>^^<<<^<>v>vv>>>v<<<^^v>vvvv>^^^v><<<^>>v>>><^v^^^>>vv^^>>v^<<><^>^<<^^<v<^^^^<>>>>v>^v><^vvvv<^v<>>>vv^<<^><<<^<^^vv>^<>v>v^>><<<>><^^^>><><>^>>^^^vvv<^>>>>>v><<>>>>v>>v>v><>^>^v>^<^vvvv>v><><><<^^<>^v<^>>>>>v^<^>><^>>>^>v^>vv<^^>><^v><^<<^>><>^v<>^vv>^<<^>>^>^^>^v^v^^<<>v>><^>^v>v^v><<<>><^^<v^^^>>>v^<^<<<><>v>><<>^v^<>^v<^v^^>vv^^>><<<>v>^vv><^>v +v>v^^v^^^vv<<<>^v^<<^>v^>vv^>^^<^<^v<>><^^v^<<<><<^<<^<<<<>>^><^>><>^<^><^v<>v^<^^^^<>^^<<^vvv<<>>><<^<^^><<^^v^^vv^^>v^><>vv><<<^^><<^^^<><>v^^^v^>v><^>v>^v>^>v^^^<>>>^>>>>>^>>>v>vv^>^>v<>^>>^v>>>>^v>><^><^>>^vvv>v^^<>^v^<vv^<<^v^^>^^<^><>^>>v>vv>vv<<>^^^<^>>>vvv^vv<^v>^v<^^v><>^^>v>>v^<>>^vv><>v<>v<>>^vv>><^<><>>^<<>>v><<>^vvv<<>>>v>v^<^v>^v^v<^<^^<v>>^>v>>vv><<><>^><>v>^<<<^><>v^v>^><>v<>v^>>><>><>^>^>>^<^><>>v>v>v^>^vv><>>vvvv^^^>vvv<<<^v^^vvv>v>>v>><^v^<^^v>^^<><<^>vvv>^<>^>>vv><^><>^>v>^><<<^v>v^v>^^<>v^>><>^<^<>vv>vv>vv<^<>v^v>^<^<<vv^>^v>^v>>^^v<^>^vvv<^^v<<<^vvv>>^^>>>^>>v<^<^^^>>>v<^^vv<<^vvvv^<<v<>>>>^^v^>vv<>>v>^^v^<>^v^^^v<<<<^<<>^>^>^<^^v^v><^vv><^>^>v>>>>^>^v^vvv<>^^v<^><^v>vvv<>^<<>>><<>v><>>>^>v>^vv>v^v^^v>>^<>vv>v^<>v^^vvv<>>>^>^>>^>^^>^<^^^<>vvv>>vv^v^>^>>v^^^v<^v^v>^<<><>v>><>><<>^><v<>>^>>^<v^v>^v<^v^<^><>v<^vvv^^^vv^<>>vv<^<<<<^<v^>v>><>^vvv>>v>v^><<^v>v<><><^>><>v>^^>v^<<<^v>^<<<^^><>v>>v^^v>><<><^>>v>v^<^<<^^<>>>v<^>><><^<<^>>vvv>v>^v^>^^^>>>^vv^vv>>^><><>^v>>^<^<^^<^<^vv<^^><<>>>^<<<>^<><><>v>>^>>><<><>>v>^<^>v><><>^v<<>^<>^><>^^>v^<><><>^^>><>vv^<>^^vvv^^v>>^^>v<>^^><>v^vv^vv^^v^>>>^^v><><<^<<>^^^^<>>^^>v>><^^>^><^>><><^v^>^vv^^>v><v<>^^>>v>^v^^>v^^>v^><^vvv>v>>>v<>^<>vvv><<>>v>^^^^>>vv>v<>^<^^^>>vv>>^<>><<<^^<>^^><^>v><>^>v<^>v><^v>v>vv^vv^>>^><^<>^>><^^^^<>vvvv>>>v^<<<^^^>vv<<^^>>v^>^>vvv>^v^^^<^>>v^v<^^^v^><^<>>^^>>^^>>^<^v^^<^><^vv<>v^v^>v>>^<<>vvv>v>v>v^>^<^^<^^>v>vv^ +^<^^^v>>v<^<>>v^>^^^<>>^vv^>^>^vv<>^vv>^><>^^<^^>v<<^<<>><<^<^>v><^>v^<><<<><>^>v<<^>>>>v>>>^<<^>>v^^^>^<>^^v^><^>^v<>v>^<>v>v<>^v^<>v>v>^v^><<<^<^<>^>vv^>>vv>^^^<^>>>v^^^v>^>>v^<^>><<^><><><>>><><<>v<<^^vv>v><><>^<<^>>vv^v>^^v><<<^>^>>>v<v>v^^^>><<>v^>>^v><^>^^v<^>v>^>v>^v^>>vv^<>v><<>^v<^>vv^>>^^>><>^vv>vvv^<<^>^^v^>v>^v^<<>^>^<^v>^>^>>v>><^<^>>>^<^^^>^v^v><>>>v>vv^>>v^^^>v^^>><>>^vv^^^v^^^>^v^^<^>vvv<^>v>v>^<<><^><>><v^>v<^>v^>>v^v<<^v^v^^>vv^><<>^<<<>vvvvv^v<^^v^v^v^^>v<^^<<^>><vv^^>^^>>v<>>>^><<>>^vv<^<^^v>^^>>^>>^^>^>^v^>v<^<^v>>v>^v>>>^>^^>^<><><<<<>>^>vv^>^^^^>^>>^v>^^v^<<><<><<<><<^^^v><v><>vv>vvvvv^<^>^^v>>v^^>>>v^v^vv<^<>^<^<><^v><<^v<<^<^>>><^<<>^v^>^v<<^<<^^vv^>><>vv>><<><>>>^v<^v><<< +v>v><<><>>^><<><<>vv^vv<>^v^<>><^v>>>^^vv>v^v><<><>^><^v<^^>>>^v<^^>>><><><<>^<>v<<>^v^>^<^^^<^<>>^><<<^vv>^^>^v>vv^>^>v<<^v>>><^v>v>^vv<^>v<^<^<<^>^>^^^^v<^<^>>><^><<^<>^<>^v^>>vvv^v^^v>vv>^^v^><>v<^vv^^v^^<>v^v<>><<><^v>^><^vv^^v^v><>><>>^<>>^><<<>>^<<^<<>>^v<<^<<<^<>^>>^>^^^<<^v><<>v^<>v>^vv>^<^<^^>>^>><<<^<^^v><v<^^v>^<<^>>>><>^>v><^^<<^^<<><^<<^>^^^^v>^<^<>>vv>^><><>v^^v<><>>^^^^>>vv^v<<>^>^v^^^v><^^>>>^<<<^>v><>vv<^^^v^v>^^v^><^vv^><>>vvv><^v<<^v>v^>>^^v^>v^<>^^><>v<^>v>^v><^<^>v^<^>>v<^<>v<>>>^>>>v^^><>>^<<^<^^^>v>>v>^v<>>^<<<<<^<^<<^^v^^>>>^v>^<<^^>>>^^<>v<<<>v<<<<>>>v<^<^vv^>vvv^^>^vvvv^v<>v<^<^>>>^v^v^<<<>><^v>^>vv^^>>v<><><>vv^<>vv^><<<<<<<>>^v<<^^<>>v^v^<v^^^vv^v><>^<>^>v^v>v^v<>^v>><^<<^vv>v>v^^v>vv<>>v<^v>v<<^<>>^v>^<^^>^^^vv<^>>v<^v^>vv^^<^>^>^^^<<<<><>>v>v^v>^><^^>>>^v^v^v^>^^vv^^^^<^<<<^^<>>v><<^>^v<>v^<<<<<^v>^^><^<^v<^vv^<<<><v<>>v>^<>v^<>v>^v><^^vv>>>^<^^^<^^^^>v>^vvv^vvv>^vvvv^<>vv<><<>^^>v>>^<><<<^<>><^v<^<<^>vv^>>^<^<>v^vvvv^<v^v<><>>vv^v>>v^<^<>^>v^^v<>^vvv^v^<^^vvv^<^<<^<><<><>vv^><^>^><^^v<<>^>^<>>>>^vv>><^^v^^^<<^v^>>v>>v>^vvv^^>v<>^^vvv^^>^v>^>vvv>><^<<<>v^vv<<><<><>>v^v>^v<<^^^^>^<>v<^vv^^^<>v^<<<^>v<<^^^^v^<^>^><><<^^>^<<>^>vvv<><<<^<^>v<>>^><>>v^<><><<>^<^^^><>v^vvvv>^><^^<v<^><<<><^v^^<>>^vv^>^>v^<^^^<<<^v>^v^<<<^vv<>^vv<>^>><><^v>><^^><>>^><>^^v<^<<^^v<><>>>v<<<><^v^^^>v<^v^><^<<^v^<<>v<<<^<^^vv<>>v<<>^<<^^<><^>^<>^>v^v^<^^vv<^<<<<<^^^>^ +><<^vvv^^v^v<^v^v<>v<^^>v>>>>>v<>vv^>^<<^^^^^v<^<>>v>v>^^>vvv>><^vv>^^>vvv<^>^v>^^<^>^<^vv>^<<>v<<^v<><>vv^v>^<^>vv>v<^^^>v^<<>>>>><<><^^^vvv>v^<<>v^v>vvv<^>^vv<>v^vv^^>>>>>><>^vv^v<><^<<^^^><>>^<>^v>>vv<><<^<^^<^>^>>>^^v<^v^>>>^>>>^>>^>>^<>^<<<v>>>^<>>v<<^v<><<><<<^^^v^vvv^><<><>><^>>^vvv<>>^v>>v<^^<<>v>>^v><<>^^>>vv<^<<>>vvv>^>v><<^<<^^^>>>v<<<<^^^<<vvv^>><>><>><^v^^<^<^<^^>>>vv^v<>v>v>>>v^>>>^vv^<^>^><^^v>>>>vv><^^^><<>>v><^<>>^v>^>^v>>><>><^>^>^>^^<^^><<^v^v<>v^<<<>>>>vvv>v<^v^><^>>^<>^^>v<<^v<><>^>>v<^^>^>>^<vv>v>>>^^^vv<>v<><>>^vv><<^v>>v<>^v>^<<<^<<<>v^>^<<<^^v><<>^vv>^>v>>><<>v>>vv><>^^v<^^<<>vv<>><^v<>v^><<^<>>v<^^<>^>v>v>vvvv^<<v>^^>><^^vvv<^v>^<>vv<<vv<^^><^<^>>^^>v<^^vvv^v><>^^v^^^^> +^><^v>v<<^>>vvv>>>v<^v><>^v>v^v<<^<^>><>^v^vv>>vv^^^^v>v>^vvv>><<>^^vvv>v<<^<^v<<^v>v^>^^>^>^<<^<^v<<<>^<^<^v^^^<^>^v>^><<^^>v>>>vv^<^v>^v>v>^v<>><>vv^^^>^vv<>v^v^^v^>^<><<>>>^>^^^^^v^>vv^^^<><>>^><><^vv>^v^v>>^vvv^^^^v<^^^<^^^v>v<^>v^>>v<<<vv<>v^^><>v<>vvv^^v<>^vv^<<<>>v^><><>v>>^^vv^^>v<>v><<<<>>^<^>><<^v>v<^>v>v^v<<<<>v<<>>^>v>v>v^v<^v>><<>^v>v>>v^<<^v^^vvv>v^<>v>^<><<<<^^^<^^<<^>v^<>>v^<>^v^>>>v^v>^^<>>v>v><<>vv<^<vvv>v>vvv^^<>^<^^vv<<^^>v>^<<^>^><>v^<>v>vvvvvv<^^vvv><>>><>^>><^<^v^<><^v<><^>v^>v<<^v^^^><>^<>><^v<^>^vv>v^<<<>v><<^^><<^^><^<^v>>vv^^v><<<>^<>v^>vv^<>^>><^v>^v^<^^^^>>><<<><^vv>vv^<<<><><>>vv<><^^v>vv<<^<^>^<>vv^<>v>v>^v^>vvv<>^>>^>>v^^^^>^^<><>^v<>vv>^<^^>>><^><^<^^^<>><<^^^>^^v><^v^vv^v^v^><^^>^^<<^^>^^>>^>vv<>^v>v><><^^vv^<^>v< +^vv^>v^>>^^><v>vv^^<>^<>>^<^^^^v^^<v<><^^>^^<^>>>><>v^^>^><>>^<>^<><<^^^v>>>v^v<^<^^<^>^^<<^>>>v>v<^^>vv>v^<^^>vv>><^<<>>vv>>v^^v<^vvv^>v<^^^vv<>v<>^v<^<>>^^<^^v>^vv<>vv^vv<>^v<^^<^<^^v^^>><^>vv^^v^^^vvv<^^>vv><<>vv^<^^>v<>^<<v><<^vv<<^<<v^vv^^<^><>^<>>^vv><^^>v><^>v^<><<^v>>^v<>v>^><>^>v>v^<^^^><><>^^^vv<<<<^>>v>v<^^v^>vvv>v^>^>><<<<^v<>^^>^>v^^<^><><>vv<<^^<^>^v^^>^vvv^^v^^v><^>^v<<^^v>>^^v^><><^<^^<>v><>^v^<>v<><<><>^^<>^^vvv>vvv>>^<^<>>v<>^<<><^>^vvvvv^^vv^<><<^>^>v>vv>v<>><<^vvv>^>>>>^^^v>^vvv<>vv^^v>^><><>v^<>>vv>v^vvvvvv^vv>^^<>v>v^>^^^^><^><^^v^>>>^^>^vv^<>vv>^>>^^>><^>>>^<<><^><v>>^>>>^<^vv>>v>vvv<>>^>^>>^><^^^^^^<>^v<<<<^><<> +^^>^>^>>^^>>v>^>>>>^v^v^vvvvvv^><^^>v^v<<<v<<^^<<>v>v>>^^<<<<>v^<>>v^>^vv<<^v^^vvv^>^^>>^<^<^vvv^><^^>^>^vv^<^v><><^>>vv^>^><^^><^v<>^^v^>^v^<^v^>>><^<>>><^>v^<>^^^<>^>>v>>v^vvv^vvv<>>vv^vv>v<>^>^^>vv>^^^^^v>^><<>^vv<>v<^<^^>>^<^^^vvv^>^>>>>^>vv<^><>v>>^^<<^v^v^<>>v>v>^v^><<>>>>v>><^<><>v^><^<>>vv<^vv<><>vv^^v<v>^<>>^>v<<>>vv^vv>^><>v<><<^>v^v>>>>^v>>>^^vv><>^^^v>^<<<^>^^>^^>><<>>^v^^>v^^v>v^v^<><<<^^^^>^v>v<<^v>^><>v>^<<>>^v<^<^v>^<>>vvv>>^v>>^<v>>v<>>^v>>v<^^^><^v><^<^vv<^v<^>v<<^v<<>><^^<^^vv>>^>^v>vv>vvv>>>^<<^^^<<^v<>^><<^^vv^v<^<^<v>^^v^vvv^v^v^^^vv>^>^^<^^<^<>vv^v>^v^vv<<>v><^v>^^>^vvv^^><<v>>^^^>^^^v^<^^>v>^<>^^vv<<<<><><>>><><>>v<^v^<<^^<<>>>>^vv^^<>v^^<<>vv^^<>><>v^>v>^<<^v^<>< +^^<<^^^<<>>^><^<^^^^<<>v>^^vv>v^^^<^<>vvv<^<^v^>^^^><<^<>^>^^^^v><<><><<>^^v>^>v>v>v<>><<>^>v^>vvv^><>^^^>>>^^v^^^<<<><<>vv<<>v<>^^>^vv^>>^^>><>^>v>v^>^<>vvv^^v<^><^>>^vv<^^^<^^vv>^><>^^>^^^<>v>>^>^^<>^^v>v<<^v^<>vv>v>v<>>vvv<><>>>>>v^>>>v^<^vv<>v^>vv<>v^^<<>v><>^v^vvv<<><<<^^>v>^^^^vv<><>^<<>^>v>>^<<>v<<^v^<<^v><^<^^<>vvv^<<^^^>><>>^vv^>vv>>^<>v<^><^^v^vvvvv>^>>>^>>><<<<><<>><><<<>>^^v<><<^vv^^^>v^^v<><^>v^<>>^^>vv>>><<^<^>v^^<>v>^>vvv>^>v<^>^>v>>>>v><v<>v^>v><^v<<<>^<^><>^<>^<^^v<^^>v<^>vv^v^vv>^^^<<^v^<^<<<^v>^^>><^>v^v>^>>v<>^^>^^v<<^^^^>>^<>>^^^>>v>><>>>v<<<>^><>^<^^^<><>^^<<<>v^vv^>><<vvv>vv>>^>v><^>v<>v><<<<^<>v><^<^v^^vv<^<>v<<v<<>v<^vvv^^v^>>^v<><^v>>v<>v>v>>^><><<<><<<<<>v>^<>><>^v^v>vv^>> +>vvvv^>><<<^^v^^v^^<<^^>v>v^><>v^v^^v><<>vv><<>v><^v<<^^v>>>>^>>^<>>v><<^^>>^^v<>v<^v>^>>^vvvv><>^<^>^^<^>>v^v<>>v>v>^^^v>^>v>^>v><v<v^>>v^>^>><>><v<>>>^>v^<^v^^v>^^^v^vv^^>>v<>^v<><^<<><^vv<^>>>>><^><^v^v<^^vv>>v^v>>vvv>>>^<<>v>^^><>^><>><^v>^><>^<^^v><>>v^vvv>>><^^>>^>^v>^>^>^>><^<^^>>>>v>v>^<<<^vv^v>>^>^<^<><^>v<>v>>vv^>>><>vv^>^vv<>v^v>^v^><<>^<><>v><^^v<>v^<^<<^^vv>^><>>^vv^<^v><<><><^^^>><<^vv><>>v^^<^v>v^^^v^>v>v^vvv<<>>v<<>>^<v>v^v^<^vv>vv>>^>>>>>^><>v<^^>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^^v>><<<^^<^v>>^>^^v^^>^>^<^vv<^^^^^<>>^<>>v<<><>>vv^><<><^><^><>^^<<<> +v^<><v>v^<^^vvvv^>>>v^^<>><<>vv^^>^^<^>vv>^^^<^^v<>>^>>v^vvv><<^>>v<^>^^^v<<>^^^>^v><^<^^<>vv>vvv>^>>^>><v>>>><>^^^>^<>vv^v^<^v<>^>vvv^>^<^>^>v^v<<>>^><^<^^^vv<>><^<^v>^^<>^>v^v^<^v<>^v<<<^^^v^>^^^^^vv<^vv>^v><><>v^^^>v>^><>v^<vv><^v^<>>^<^v^<>>^v>v>^^^^>vvvv^>v>^^>v<^^>>v<^v<^v^>^<^v^v<^v<<^vvv<^<^vv<<^^v>vv<<^^>^^^^>>^vvv^vv<v<^v<<v>v>>^<<<<^^><>vv>^v^^<<>><^>^^^^v>v<^v<^>^v^^vv^<<^vv<^^>>>v^>^>^v>>^<<<<<<^>^<^<^<^^<^<^<><>^>>^<<^^^v<>><<^>^>^^v<^vv>^^>vvvv^<>v<^v<^><<>v^v<>v>^vv>^^<>>^<^^^>v^<<v>^>>^v<<><^^^>v<<^>><^>><<<^^v^v^<<^<^>^>v>vv>v><>><>v<>vv^^v>v<^vv^v^v<<<>>><>><><^>vvv^><^vv<<^>v><>^>^^>><<><>v>^^^>v>^vv<>>^<^^^^^>vv>v<^^<>>^^^><^>v<>><<^<<^^>v<>v^>vvv<<<><>^^v^^vvvv^>^^^<<^vv>v^v^>^>>^^><>^^v^^>>^>>^>v<>>vvv^>>^v>v<^v^>><^vvv^^^>>^>>^<v>>>^^>^>^>>^^>><^^^vv><^><>v<<>><<<<<^v<>^vv<^^vvvv><>>^<^<<>><>>>>^v<<>>^<<>>>><>v>v^^<>v>>v^^v><<>>v<v^vv>vv^^^<>^>vv<<^v<>v^<^<v>^v><<<>>>v^^<>>><^v>>v^>^v<^<>^>>><^v>v<<>v>^>v^<<<<^vv>v<>^<<>>^v^<^^<>>v<<^>>v<>^v><<^<>>^>^<<^>>v>>^^^>v<><><<^>v>>vv>v^^^v<<^v>><>>vv^^>>^<>>>v>v>>><^v>>>v>v>vv>^>^<>>>vv^<>>v<<^>^>^<^^>>v>v>>v^^<<^vv>^>^v^>^vv<<<<<>>>^>^v><<^<<^^^>><>^vv^v><^<^^^<^^^v>>>v^^<v>v^<>>^>^v><<>^<^>><^>^v>>^<^>>>>^<<>v>^<^v>vvv<<<>>v>^^<^v>^>v^><<^>>>><v<<>^>v^><<<>^><^><^>>>^>>>>>v>^^<><^>^^<>^^<>v^^^^<<^v^^<>v>><^<<^<<<<<><^<^<^^>>^v^<^>vv^<^<>^^vv>vv>^<<>>><><<^^>^v^>vvv>^<<^<>v^v^><<<^vv><<^v><<<>v<^vv>v>>^ +^><>v^^^>v<>v^>vv^^^^>>^<>vv<>^v<><<<<<><^>vvv>><>^^^<^<><<^v><><><^v>^<<^vv^vv^v>v<^>^>^^<<><^^vv><>>^^^><><^><^>v^<^v>>>><<>v<<^^v>^<^<>>>>^><^^>^>^v^^^<<<>>v^^^v<>vv<^^>^<>vv<^><^v>v^^^>^^<^>^<<^<>v<^v><>^>v>v>v>^<^^^>v^<^v^vv^^<^^>^<>v<<><<>v^<vv^v^v>^>>v<<>>>>>><>v>v>^<^^^v^><>>><>^vv^>v<>><<^<>^>>^><>^^>>>^>v<><><<^<>v><^<<^<^<>^vv<>v><^>vv^>^^vvvv^^v^vv^>>vv>v^^<^<^>><^>vvv^<<>>v^^><^><>><^^v><>v<^v^^vv>>v<<>>^<^v>v<^><><<<^>><>v^^<<^><^v<>v>v>^^v^<^><<<^><<>v^^v<^^><><^>>v^<>vv<<v>^>>><>vv<<><^<^^^<>><>^<^v<>^^^<<>>^<vvv>><^>^^v>^^>^>v^v>^>^><>v>v>vv>v^<^>^>^<>v>>v<^<<v^vv>v^<<^>vv>>^vv>>vv<><^^>^>^v>><<^^>^^v^<>>v^v>^>>>>vv<<><^^v^^^^^>^>>v<>^v^<^<<<><^>^^v<<>v>^^v^<>><<^^<v<><<<^^>>v^<^>>v>>^vv<^v<^>v<^^vv>vv<< +vv<>^^^v<^^vv>^v<><>>^>>>^>vv>><>>^<<^>v><<>>^>^v>>v^^<^>vv>>>>^>v><^<>^<>>^^<<>v<<<>v^<^^v><>^^^><^^<^<><^v<^^<>^>^>v<<<^^v^><><<><^<^<^<^>>v^<>^<>^>^v<^^v<>v^<>vvv<<v<>>>^>^vv^<>v>^v>v>^>^v<>>^<>v^>>>>^>^v^^<^>^v<^>v>^><<>><v><>v^^^^><^v>><>v^><<^<>^>vvv^v>>^vv^><<^<>v>v>vv^^v^^vvvv^>v^><^^<^^<>vv^^^<^><<>vv^<<^v<^<>>^vv^<>v<^^vvv>v^>^^<^>>v<<<>^vv^>^^^v^<<<>^^>>v^>>^vv^<^^><^>>>^>v<^v>v^><vv>>v><<<>^v<^>^>v^^v><>>>><^v>^vv^<>>^v><<^v^v>^^<><<<^<>^v<<^v^v^v><^>^v><>^v^^^>v^><<^>v<<>>vv>v^>><^^>><<^^<<^v<>>>^v^<><<<>^<<<<<<^^^^<>^>>vv><^v>^v^<^v><<v<^^^<<<>>^><^^<^^>^v^^v>^v^>v^vv^>^vv<<<<>^^v><>v<^vv^>><<^<>v>^v^<>>^<>v<><><<v>><<^<^^>v^>vvv^^>>>>>^>^<>^v< +>>v^^<>>><v>>>v^vv>^^v^^>^v>>^vv^^^v^>>>>v>^>>^<^<^^><<^^>v<>><>^v>vv<>>v^><>^<^<<>><v<^><^^<^v<^v^^^v>v<>v>^v<^v>v^vv<><>^>v^<<>>vv>v^>^<^^<<<<<^^v^<^^v^vvv^v<^v<>>^<v>^><^>v<<>^<>>>vvv>><^^^>v<><^>^v^<^v><<>^>v<>>><>v<<<^>^<^^<>^^>^^<^^<^<>^v<<<<>v^><>>>>><^^v^^^vvv^>v>>v<<^v<<<^vv>><<<>vvv<>><>^^>vv^<<^v>v^<^>^^>>v^v<<>><^v>>vv<^>vv^vv<^>>>v<><v>v<>vv<^<<<<<^>v<<<>vv^^^^^<<><<^v><>v><^<>><<^>>><<^^^>><^^vvv<^^>v^vv^v^v>vv^^<^^^<>v>^><^^<>vv>>v^v>>>>^v^v<<>>vvvv<^v>v^<^<>^^><<^<>><><^^^><<>>>v><v<^<>^>^v>v>v^^^^^>>v>vvv<^>v<^v>v>v>^<^<^>v<><^v>v>v>>v<<>>^<<<^>v><>>><^>v<<><>^><>><>v>^v>^<^v<<><^<^v>vv>>>v>^^>v>v>^^><<^vv><<<<^^><^^<>vv^vv^^<<^^^^vv><><^vvv<><>^v><^<<<^<^>v>^v^<^<^<^vv>v^>>^<>>^^<^>>>^<^><^^^v<^^>^>v>v<>v<<<><^vvv^v<>>v<><^^<><><>^vv>>v^<^<^v^<^><<^<<>vvv>><>>vv><^v<vvv^^v^>^><>^>>^^v^<^v^v><<>v>^vv<^<^^^>>vv<^<v><^v>v^^v>^<^^v<^^>^vvv>^v<<^^^^<^^<^>vv>^v><^>>><>vv^<>^>v^>v<><><^v^^^><<>>^^^><^^v^<<>^>^<^>v>v<>^<>^^>>>>v^v>^>><<^vv<>^^^>>v>v>^^^>^<^^<^>v^<>^^<^>^^^^vv<><<<>><v<><>^<^vvv^>vv^^v<>v<>^<^<>><><^>>>v<<<>vv<>>>^^vvv>^<<<>^vvvv>>^<^><>^>>^vvv<>v><^^v>^^<<>><^v<>^v<<<>^^^>>>^>v<<<<^^><<>v^>>><>>^><^^><><^<^<<<<<>^>v>^<><>vvvv^><^^^>^>>><<>vv>v>>>^v<>vvv<<^>>>^v>>vv>^>^^>^>^vv<^^^>v<^>>>^^>>v<^v>v<vv>><>^v>>><^vv><<^^v>^>v>vv^^^<<>v^^>^<>>v^v>^>^>v^>^^><^^>^v^<vv>>^^v>>^>^vv<>><>^^>v>v>^v^<>>v><>>>>v>>v>><>vvv<^v<>><^ diff --git a/day-15/main.c b/day-15/main.c new file mode 100644 index 0000000..14a25b3 --- /dev/null +++ b/day-15/main.c @@ -0,0 +1,221 @@ +#include "aoc.h" + +static bool +can_push(Grid *grid, i32 x, i32 y, i32 dx, i32 dy) { + i32 index = y * grid->width + x; + i32 next_index = (y + dy) * grid->width + (x + dx); + u8 cell = grid->grid[index]; + u8 next_cell = grid->grid[index]; + switch (next_cell) { + case '.': return true; + case '#': return false; + case '@': + case 'O': return can_push(grid, x + dx, y + dy, dx, dy); + case '[': + if (dy == 0) return can_push(grid, x + dx, y, dx, dy); + else return can_push(grid, x, y + dy, dx, dy) && can_push(grid, x + 1, y + dy, dx, dy); + case ']': + if (dy == 0) return can_push(grid, x + dx, y, dx, dy); + else return can_push(grid, x, y + dy, dx, dy) && can_push(grid, x - 1, y + dy, dx, dy); + default: NOT_REACHABLE(); + } +} + +static bool +push_block(Grid *grid, i32 x, i32 y, i32 dx, i32 dy) { + if (!can_push(grid, x, y, dx, dy)) return false; + + u8 cell = grid_at(grid, x, y); + if (cell == '.') { + return true; + } + else if (cell == '#') { + return false; + } + else if (cell == 'O' || cell == '@') { + i32 nx = x + dx; + i32 ny = y + dy; + if (push_block(grid, nx, ny, dx, dy)) { + ASSERT(can_push(grid, x, y, dx, dy)); + grid->grid[ny * grid->width + nx] = grid->grid[y * grid->width + x]; + grid->grid[y * grid->width + x] = '.'; + return true; + } + else { + return false; + } + } + else if (cell == '[' || cell == ']') { + i32 nx = x + dx; + i32 ny = y + dy; + if (dy == 0) { + if (push_block(grid, nx, ny, dx, dy)) { + ASSERT(can_push(grid, x, y, dx, dy)); + grid->grid[ny * grid->width + nx] = grid->grid[y * grid->width + x]; + grid->grid[y * grid->width + x] = '.'; + return true; + } + else { + return false; + } + } + else { + ASSERT(dy != 0); + i32 partner_x = (cell == '[') ? nx + 1 : nx - 1; + if (push_block(grid, nx, ny, dx, dy) + && push_block(grid, partner_x, ny, dx, dy)) + { + ASSERT(can_push(grid, x, y, dx, dy)); + grid->grid[ny * grid->width + nx] = grid->grid[y * grid->width + x]; + grid->grid[ny * grid->width + partner_x] = grid->grid[y * grid->width + partner_x]; + grid->grid[y * grid->width + x] = '.'; + grid->grid[y * grid->width + partner_x] = '.'; + return true; + } + else { + return false; + } + } + } + else NOT_REACHABLE(); +} + +static void +print_grid(Grid *grid) { + for (i32 y = 0; y < grid->height; y++) { + for (i32 x = 0; x < grid->width; x++) { + putchar(grid_at(grid, x, y)); + } + putchar('\n'); + } +} + +static Grid +widen(Arena *arena, Grid *grid) { + Grid result = { + .width = 2 * grid->width, + .height = grid->height, + .grid = ARENA_ALLOC_ARRAY(arena, u8, 2 * grid->width * grid->height) + }; + u8 *ptr = result.grid; + for (i32 y = 0; y < grid->height; y++) { + for (i32 x = 0; x < grid->width; x++) { + u8 cell = grid_at(grid, x, y); + if (cell == '.') { + *ptr++ = '.'; + *ptr++ = '.'; + } + else if (cell == '#') { + *ptr++ = '#'; + *ptr++ = '#'; + } + else if (cell == 'O') { + *ptr++ = '['; + *ptr++ = ']'; + } + else if (cell == '@') { + *ptr++ = '@'; + *ptr++ = '.'; + } + else { + NOT_REACHABLE(); + } + } + } + ASSERT(ptr == result.grid + result.width * result.height); + return result; +} + +static i32 +compute_total(Grid *grid) { + i32 result = 0; + for (i32 y = 0; y < grid->height; y++) { + for (i32 x = 0; x < grid->width; x++) { + u8 cell = grid_at(grid, x, y); + if (cell == 'O' || cell == '[') { + result += 100 * y + x; + } + } + } + return result; +} + +static void +find_robot(Grid *grid, i32 *x, i32 *y) { + i32 robot_x = -1, robot_y = -1; + for (i32 y = 0; y < grid->height; y++) { + for (i32 x = 0; x < grid->width; x++) { + if (grid_at(grid, x, y) == '@') { + robot_x = x; + robot_y = y; + } + } + } + ASSERT(robot_x != -1 && robot_y != -1); + *x = robot_x; + *y = robot_y; +} + +int main(int argc, char **argv) { + Arena *arena = make_arena(Megabytes(1)); + str input = read_file(arena, argv[1]); + + str grid_input, instructions_str; + str_split(input, STR("\n\n"), &grid_input, &instructions_str); + + Grid original = parse_grid(grid_input, arena); + Grid grid = parse_grid(grid_input, arena); + + i32 robot_x, robot_y; + find_robot(&grid, &robot_x, &robot_y); + + u8 *instructions = ARENA_ALLOC_ARRAY(arena, u8, instructions_str.len); + isize instruction_count = 0; + for (isize i = 0; i < instructions_str.len; i++) { + u8 ch = instructions_str.data[i]; + if (ch != '\n') { + instructions[instruction_count++] = ch; + } + } + + // Part 1 + for (isize i = 0; i < instruction_count; i++) { + u8 ch = instructions[i]; + i32 dx = 0, dy = 0; + if (ch == '<') dx = -1; + else if (ch == '>') dx = 1; + else if (ch == '^') dy = -1; + else if (ch == 'v') dy = 1; + else NOT_REACHABLE(); + + if (push_block(&grid, robot_x, robot_y, dx, dy)) { + robot_x += dx; + robot_y += dy; + } + } + + i32 part_1 = compute_total(&grid); + printf("%d\n", part_1); + + // Part 2 + Grid wide_grid = widen(arena, &original); + find_robot(&wide_grid, &robot_x, &robot_y); + + for (isize i = 0; i < instruction_count; i++) { + u8 ch = instructions[i]; + i32 dx = 0, dy = 0; + if (ch == '<') dx = -1; + else if (ch == '>') dx = 1; + else if (ch == '^') dy = -1; + else if (ch == 'v') dy = 1; + else NOT_REACHABLE(); + + if (push_block(&wide_grid, robot_x, robot_y, dx, dy)) { + robot_x += dx; + robot_y += dy; + } + + } + i32 part_2 = compute_total(&wide_grid); + printf("%d\n", part_2); +} diff --git a/day-15/test.txt b/day-15/test.txt new file mode 100644 index 0000000..84cf1fb --- /dev/null +++ b/day-15/test.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/day-15/test2.txt b/day-15/test2.txt new file mode 100644 index 0000000..6ee6098 --- /dev/null +++ b/day-15/test2.txt @@ -0,0 +1,9 @@ +####### +#...#.# +#.....# +#..OO@# +#..O..# +#.....# +####### + +