From 3a2a5afac67ec8979c2121d0231e68fb72b05faa Mon Sep 17 00:00:00 2001 From: Elias Kohout Date: Sun, 15 Dec 2024 20:54:35 +0100 Subject: [PATCH] add day 15 part 1 --- day15/data.txt | 71 ++++++++++++++++ day15/gps.go | 223 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 294 insertions(+) create mode 100644 day15/data.txt create mode 100644 day15/gps.go diff --git a/day15/data.txt b/day15/data.txt new file mode 100644 index 0000000..860c6cb --- /dev/null +++ b/day15/data.txt @@ -0,0 +1,71 @@ +################################################## +#O..O......O....OOO..O.OO.#.O#.OO..O.#.#....#..O.# +##.O.OO.#.O...O..O.#.O.O.#O..O..OO#..O#O#O#...O..# +#...O...OOOO.O#OO.#O#.O.#O...#.#..O.O..O........## +#O.#.O..O.....#O.#.#.#O.....O.....O....O....O..O## +#O#...O...O#..#.O##O#.O....#OOO..O..O...O...#....# +#.O....O...###.O..O.O#....O#..O..O...O.OO.OO#...O# +#O..##...O.......O.O.#.O..O.OOOO...#..OOO.OO.O...# +#...O....O.O..O....O.......#....#..O.OOO....#O..O# +##O....OO.....OOO.#O.#O.#OO#O...........O......#.# +#O#.......#........#OO.....O.#..#..O...OO.....O.O# +#O##...OO..#.O...OOOO..O..O.#.O.OO#...O.O.#O...O.# +#O#O.#O..O.....O#.##.O......O..#...O....OO....O#O# +#O...O....#.O..##....O.#.....#...##O##...#.O.....# +#OO...OO#...O#.#.O.O..O..OO..OO.O..O.....#..#.OOO# +#..#O.#O.#..O.OO.....O#....O.OO...#..O.O.#OO.##..# +#O..O.##...O....O..#OO..O..O..O...O..O...........# +##O....O....O..O...O#..O....O.OO......O.O..O....O# +#OOOOO.#....O.O#.OO..O...O.......O.#OO...#O..O...# +#O....O.#.O..O##...OO..##O#....O.........O#.O....# +#...........O...O.OO.O...O#......O...#OO.O.O.....# +#..OOO.....O#......O...#..O..O.#..O..OO#O..O.#.O.# +#.OO...O..O.O.O##OO.O.OO#.................#..O.#.# +#.#..#O#.O.........O.O...O.#......O.O..O...O.O..O# +#..O.OOO......#...O.O...@.O..O...O.OO..#...O..O#O# +#...#O...OO.O...O..OO..###O..O....O......##....O.# +#....O.#.##...O#.#O.OOO...#.O.......#O.#.##......# +##.O..O.OO..O.#.....O..OO..O#....#..O#...#..O....# +#OOO.O.OOO.O..O..O..O..#OOO....#O..O.......OO..#.# +#..O......O.O...O....O.OOO#......O.#....O.....OO.# +#....#..O#......OOOO.O......O.OOOO...O..O.#.....O# +##...OO....#.OO....OOO..O.#.OO.#O..O##..O..O.....# +#..OOO...O....O.....O#O...O...O.....OOOO...O..#.O# +#...#....#.OO..#.......OO..OOO.O.#.....O....O.O..# +#O.O.........OO.O..OO##O..OO.O.........OO.O..OO..# +#...O...#OO#O..O..#..O#OO.....O..#O.....OO.....O.# +#O..O##O...OOO#OO.O....O#.O.O#..O..OOO..O#.O..##.# +#.O..O...OO..O#O.#.O.OO.#OO...O..OO..O.O.O..O..OO# +##.O.......O.OO..O#.##O.....O....#.....OO.O.#.#OO# +#O#..O.....OOO#.....O.......O....O...#..O..O##...# +#.#..O.OO..#.O.OOOO.O..............O...O....O#...# +#....O..O..#..##..OOO...........O........O....OO## +#OOO.#...O....O.....#.......OO#.O..OOOO..OO......# +#......O...........OOOO#OO.......O........O.OOO.O# +#........O.O.#....#...O.#O..O.#....O.O#..#..#O#..# +##................O...OO..O.#O.OO#.O.....O..O..OO# +#.O...OO.........#OO......O.O.OOO......O#........# +#............O.#.........O.....O.O...#.O......OO.# +#O..O......#O...OOO......#..#.#.....O#O.O.....O#.# +################################################## + +v>v^>>>vv<>vvv^><>>vvv>>vv^>vvv^vvv<>>v>v>>^><>v<<<^<^^^<^v>vv>^v^v<^><^v<>>v>v<>v^<<^^v^^<<^^v<>><>^>v^v><>^^<>>vv>><^vv^v^^v><>>><<^>^<^<^>><^>>v^vv>>>v<^>^<>^<^v>^v<>v<>vvvv^vv<^^>vv>^<^<<^^v><>>^^<>^>>>v^vv<>vvvvvv^<>^><v^<^>vv>v>>v^v^^v<<>v<>v>v>^v^vv^^<>><>v>>v<^<<^><^^v^><^>^^<^^>><vvv<>>>>^^^v>vv><<^<^^v^>v<>>^>><^<<>^<>^^^^vvvv^^>^v<<>^vvv>^<<^>>v<^v<>^>v^<><^><<<>^><><^<>vv><>>v<^^>>v^^<^^>vv<<^<^^vv<^^v>^^>>>>v^v>>vv^>v<>^v>v<<<^<>>vv^>^^<^<<<^^>^>^>>^>>v><><^<<<><^v^>>^v<>v<><<>v><^^^v>>^<<>vv<>^^><<^>>^>^><^<>^<^^^^<^>v<^^>>>>><><>^<>^^>v>>^^<<<>>^v<^>v>^^><^>v<<><^>^<^>^><v<<^vv^^>><>v<^<^^^><>>>^v^^>>><>v^vv>v^><>^><>^<^vv<<^v<^>>>^^<>^vv^vv^<>^ +><<^v<^v<<>><>^^v>>v^^^v^>v<^<^>v^v<<<<<<>vv>^>v<<>>>>>^^vv<^v^v^><>^^v<^^vv>vv^^vv<><><>>v><^^>^^><^>v^><^^<>^<^vv><>>>^^<^>vv>vv^v<><^<>^^v<>>^v>>vv>^<^>^v<^v<^<^v<>vvvv<^<<^>v^>v<<><>><^<<v<><^^>>^v^v<>^^><<v^vv^^^vv<<>^v<^^^^^^>v<^>>^v>^><^<<^v>^<^>>>^v>>v><<>vv>>v^>^v<<^^>vvv^<>><><^v^<<>^vv^<>><>v>vvv^v>^vv<>v^vv><^^>^><>v<<<^<^^v^vv><<^v>v^>><^^<>v^>v>^<^v^<><^>><>^>^v<>^<>^v<^vv>><^^>>vv^^v>>v^^v^^v<^vv<>><^>^^^>vv<><^>>>^>v^vvv<>^>vv>v^v<>>>^>^>v^v>vv<><^<<^^v<>>^^<><>><^>vv><v^^v<<^<<>^<>>^^vv^<>^>^vvv<>^^<>>^><<^^<^v<^^v<^^^^v<<^vv^>>>vv^v>^<>^^<><^^><>^<>v<^>v^<<>^v>v>v^v^v>>^v^^^^>^<>vv^>v^^>><<<>v><^>^vv^<^>>>^<><^<<<^>vvvv^v>v>^v^v^>^<^v^>><^^^<^^v><<^>vv^>vv><<>>>^<>vv<^v^>>^><^^vvvv>^^>v>>v<>v +<<^vv<<<<><>^v>>>v<<><<>^v^v<^v^v>^vv^>>>v^v^vv<>>^v><><<v<>>>>^v>v>^vv>v<<<>v<^vv<>^^v>>>v^<<<^>v<>v^<>>v^>>^v>>>^<<>^^v>^><>v^>v^<>^>>^vvv>v^>>^<>v<<^^>>>>^><>^>v^>v>vv<><^vv<v<>>^>>^><><<^vvv^>v^>v^^^>vv>v^v>v>^>vv><<>>>^^v>>vv^^v>^v>^^^^<^vvvv><<^^vv<<><^^>><>><<^v>>^^v<<><<>^><^v<>^<>>^v^^v<>v^><^^v^><<>v>^vvv^v^^^>><^v>>>>>^>v<<^vv>>><<^<^vvv^>><>>>^^v<<^v^v<^v^<<<^v>v>v>^v^^<><^<^>^>^v><^>v^^^<<^>v<^v^^><>^v^vv^v<><<<><<^vv^>><>>^^v<^>^<>vv<>><<<^>^^>^v<>>^>><^v><v<>v>>>><^^v^v<^v<>v^<<^vv^<^>v<^>vvv><<^v>vv>^^v<^^>^vv^>v^>vv<^^v^^v<^>>^<<<>vv^v^v<>v^^<^>v^>>^>>><>>>^v<^v^^^v^^^v>v>v<^<^vvv^vv<^<<v>v^vv^>vv>v<>><^>>v^>v>>>v><>^^v<>^<>>^><^^>^<<^^v^^v^<^^vv<^^v^^<>v^^^><>^v<^^vv>>^ +<^v^<^>v^^<>vv^><^>^>^><^v^^<^<^>><^>>>><>><<<^>^v<<>v>vvvv<<<^^>v>^>>^<<<>^^vvv<>^v^^<<<>v<>>v><>vv^>vvv>v>>>>^>^v>^><<^<^^><^>><^vvv>>v^v<>^<>^v<<<^>v^>^<^v>v^<^<^^>v^v<>v^v>^<v><>^>v<^<^>^v^vvv><^^^v<>v^<<^>^vv>^^<^>>>vvv<^>>^^<^>vvv^<^v^^<>><v^<<^<>^vv^v>^v<>>^<^<<<>v^vvv<>^v<^<<>^<>^<<^>v<>>>>v<<<<^><^^>v<^v>^v<^v^v>>v><<<>^vvv^^v^><^vv<>>^>^^<^^>>>^^><^vv^<<>v<^v<>>^^>^vv><<^v<>^>^<<<^^<>^>^>>v^vv<^v><^^v>v<<><><>v^<>v>vv<^^>><>v<<>><><^^<><>>^<><<^vv><>^^v>>^>>>v>^^<^v>>v^^vv<>><<>^>v<<^>v^^<>>>vv>^^^^vv^^<^v^>^<<<^v<>v><^vvv^>>^vv>v>v<<<><<<<>vv>v<<><>>vv^^<><>>v^<<>>^>^>>v<<>>^^<>>><<<>v^^^><>>>v>><^>v^>v^>^^^v^vv>>><^^v<><^^^v^v^^^vv><^^<^^>v<>v^^><>v>>^v<<>>v>^v^<^<>^vvv>>v<^vvvvvvvvv^^vv<^v<^<<>^<>^>^vv^<v<><><<<>^^>>>v<>>><^<<>^<><^<>^<>>>^v>vv^^<>^^<>^>^v><>v<^v^>>^^^vvv^^^v>^<<>>>>>^>>v^^<^^<>v>>>><>^v>^v>v^>>^<^><<^<>v^v<<<^v>^^^v>>><<><><>vv^>>^v>>^^vv^<>v^>>vv>>^><^<<<^^><>^<<<<^><<^v^><^^^>^vv>v<<<^><^<^><v>v><><>v^<<^v^v^v>><>v>>>^v<>^^v>^>><>v^v^^<<<>><^<^vvv^>vv^^vv^v^>>>><><>^>v>^>>v>vv^<<^v>^>vv<<>>^v>v><>^><^v^>^vv>^>vvv<^<<^>^^<>^vvv<^^>v><^<><><<^v^>>v<>^^>v^v<^v>vv^v^^>v>v^>v^><><<<<>>>>^v>^>^^^^v>^^>^^^^vv^>>>><>><>^>^>v>v^>>>^^^>vv>^v<>v><><^v>>^<^>>>>><>><<>v^v>v^>v^>>>^>><^>vv>>>><^>^v>>^><^>^>vv>vvv<^<><^<>>^>^^v<>^^<>><>^v>>^v^><<^>v>>>>v>>^^^>vv>>v^>>v<<^^>v>vv^>^v<^><<^v<^v>v<>>v^<>>^^>vv>^>>v^v><<<>>>vv<>>v>v^^<>v>^^>^^^>v<^^<<^<>^<>^v^^<<>>v><>^v^>v>>^>>>v>^v>^<>^^v><^vv^><<<<^><><>vv>>^v>><>v<>><<<>><< +^<>>v^vv<^v>>^><<><<<<<>><<^>>v^<><>>^^>vv^v><>v^^<>^>>v>v^^><>vv^<>vvv>^v><>^v><><>^v><^><<>v^>^v>v>>><>^v<>v<<<<<^>>v>v><><^v^vv<<>>>^v>^^>><>^>^^>^^^<^v^v<<>vv<<>^<^>>^v<^^>v^>^<^^<<>vvv<<>v><>>^^><<^>v^<>vvv<^<^^>>^^<>>^^<^>^^v>^vvv>><^><^vvvvv^v^v>>v>^v><<>v>v<<<^>v<><^<<^<>v^><>vvvvvv>vv<><^v>v^<>^><<<<>>^^vv<<^>>v^>>>^^<^<vv<<^<<<>><<>^v^v<^>>>><><^><<><^^v>vvv^>^<^v<<<^^>v<<>><>vv>^<<<<<><^<^^v>^><>^^v>vvvv>^^>^>>>vv^^>v><>v<^v<^<>>v><^v>^v^>>><><>>vv^<>>^>^>v^>>>>^v<^^<>>><<v<>>^vv^>^>><>>vv<<^v>^^^v^>>^^>>>v>>^v^v<>>^<<^>^><^<>>vvvvvv>^^<>v>^>v^<<>^>>^v<^v^<^<><<^<><^^^vvv^^^v^><><^^^<<<>>v<^^vv>vv>^v>v^><>>v^^^^<^^>>^v>>>>v^>vv<>vv>^>vv>><^<>^>v<>>v^^^^^^v<<>>^><^v^<>v>v<^>vv +<>><>^<^v><>^>><^^^>^^^^v<>^<<^^^>><><^^^><<<>v^>><>>^v<^v<<<^^vv>^v<^>v^>>^^v<<^^>^<<><>v><^<>>><>^v^v^v>v><><><>^<^^<^^^^<<>v^^>^v>vvv>v><^^v^v<<<>^>>v>vv><>>^^^>^vvv<<><>^>>>>>>vv>v><<>v>^<><>^v^^><^<^<>v^<>^vv<^^^<^<^>>vv^v^<^><<^v^v>v<><<>>vv<^>><>^^vvv<^^^^^^^v>>^><><>v>>vv>^<^>v<<^>^<^vvv>vvvv<<^>vv>vvv^vvvv>v>^^^<<^<^<^v>><^^v>v<^vv^>v^v<^<vvv^^<>vv^><v>^v>^><>>>><><<^^><^>>^<^<<>>^v<^v><<<<<^<^>^<<>v^^>^vv^<^><^>><>v>^<<^v^>^v<<><<<^^<<^><>v^v<^^>v>><<^^>^><<^v^v^>vv>v<<<<^>v^<><^v<>^>v^^<^^v^^vv^>>^<^>v><><^v>^^>>><^v>>^v<^v>>^>^>^>>^vv><>vv><>v><>vv>><^>vv>v^>vv^>^^v^>v>>^<>^^><^<<^>><><<<^^<<^v>v<<^>>>^^<^v<>>v>>v<^>v<^^>><<<^^>>^v<^>^ +<><^^><<>^^v>^<^><<^><>^^v^<^><<<<^<>v^^>^<<^v<<<<>^><<<^vv>v<>>^>^>^vv>>^>^^vv<^><^>>>><^^^>>v>^v<^v>>>^v>><^<^>^^<<^^vv><>>vv<^<^v^<^>v^<<^v^vvv^v>>v>^v^<>vvv^^>^vv>>v<><<^^<<>v>^v>^^v<<<>>>>v>v>v^v<<<><<^v^>><>>v>v>>>v^<<>>>^<^^v<^^vv>><^<>vvv><><>><<<<>>^^v>^<>><<><^<>>v^vvv<><>v>^>v^vv^vv^v^vv^<<^<>>^v^^vvv^vvv^vvv^>><^<<<v^v>>v>^v^^>^<>v^^v^><<<v>^<^v>^v><>vvvv<^>>>^<>>>v^vv^<<<><><^>^><>>v^vv^>^<><<>>>v^><^<<^v><<>>^vvv>>v^<^>v^><>^vv^><<><^vv^><^^v><>vv^<^v>^^<^v>>>>><^v>^><>>vvv><>>v><>^<>^^>><^>>vvv>>v^>v^v^^^^vvvvv<^^v<>>>^v^v>>^v<^>>^^<<^^^>>>v<<>>^>^^<>^^^>^>>^^v<<^^^v>><v><>>v<^<<>v<><>v>^v<>^v>^>^^<^>v^v^>v<^>^>>v^<^^vv>>v>>v^v><^<^vvvv>v><^vv^>v^<>v<^v>^>v>^v^^v>v^v^ +>><>>><>^>^^<>^v>^v>>^vvvvv^vv<><^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><>^^<^>vv<<<>>^v>^^vv><^>^v>><<<<>^<>>^>vv^v^>v<^>>^>^v^>v^>^<<^^>^><>^^v^<>vv<><>>v<<^v>>>>><>^^v<>>v>^v^<>^<^v<>^v<<<<>^v>>^vvv<^><><^>>^^v>^^>^><^>>>v>^^v<^>v>^v>>vvv<^>vv<<^^v^vv>v^<v^vvv>^^><>^>^^<<^^^^<><>><^<^v>v^<^v>><^<<>>^<<>>^>><>^><^^vvv^v>>^>vv^>>v<>^^<><>vv>v<>v^<^<><>v>vv><^^<^>>vv^^^>vvv<^>^^v^vv^<<>^<^<>^>>v<><^<<<>^>>^^^<>^^^^^^^^>^<^vvvv^^v><<^vv<>><^v^v^>v^vv^^>^v^v>>v>>^<>vv<^vv^<^^>v^>^v^^>><>^^v<>^<<<>>><>^^v>><<^v^<><>>^<<>>>^v^^v^<^v^v<>^<<^><^>v^^v>v<^^^^<><^v^<>v>>v^v^vv><^<>^^>^>^^vv<<^^^v^>^v^^><>>v<<<<<><>v<>^^^^v^^^vv^v^<^vv>>>><^>><^^^><<>v>v^>v>>^>><^^v<<<^<<>v><^>vv^vvvv^>v<^^>><>^><<>>>^^v><<^<^v<><>^<>v<><>v>vv><<^>>v<^^>^>v<^^^<><>v><>>><<^<>vvvv<^>^><>>^<>^^>^<^v^v^^^^<^>>v^<<<<><>><>vv^vv^><^^v^>v^<<>vvv>v<^>>^^<^^v>v^^v>^v<^>v<<^v>^^<<^<^v<^>^<>>>>vvvv^^^>^^>^>^><^^>>>^<>>v^<<^>^><^^v>^<^>^<^<^<><^^>>><<^>^>^^v^<^>^>^vv^v^vvv^><^^^vvv^^vv<^v><<^^<^^<<<^>>>^v^<^>^><>vv^^>v><^vv<^<^^<<<>><<vvv^<^>v^^v^^<<^<>v>v<>>^><^v>vv^^v>>vv^<>^<^<^<<<^v>><><^v>><<^vv><><><^>v^^^vvv^v^<<^v<>^>vvvv<<^v^>^v<<<<<><^<^^^^v><>>v>>v^<>^>vvv<^<>>^^<>>>>^^v<>^vvv>>^^v^^^^v^^^<<^>>^>^<>>><<>^v^>v^v>>v>v^v>^^^v^><^^<^^<^<<^v>^^v^>^^^^^v^^>^^>^>^^>>v>v>><>^^<^^v>>vv><< +^v>v>v^>v><>>>^>^>><^^>^vv>>^vvvvv<^<<<<<>^<><^<<<^><><^^><^v^v<<>>>^<^<<^>v><>v>><v><<^v>^^<<^v>^>v>vv>v><^^>v>v^vvvv>^^^^>vv><>vv^v<^v>v^v>v<<<<>^^<<^^<>>vv^><^^v>^^<^^>>>><<>>vv^^><^^vvvv<><>^^v<>v<^><<>^^^vv>>^^v^vv>^vv>v>vvv^^v>vv>>^^^vv^v^<>>^>^v<><>^vv><><<<^v>v>^>>^<>^v^v^<<>v<>^^<>vvvvvv^^>^v>>vvvv<<^^<^^vv<<>^>vvv>v<<>>^vvv>^^^>v<><vv>^<v<<><>><>>>>>><><^<>vv^v>v^v>v^^<v<^^^^v>v>v<<<^^<<^^<<<v<^^^^vv^^>^>>>><^><>>^v^>^^^^^<^<^vv^v^^>v>>v>>>>vvv><^^<^<^<>v^<<<^vv>^<^v>^><<^^v>>v<<<^v><^>v>v^v>^>vv^^<>>^>^v^<^^>^^>v>>^v^>>^>^>^>>^^>>>^vv^>^v><^>^^^<<>>>v^^<><^v<>><<<^vv^<<^<<^v^v^^v^v<^<^>><>^><^^>vv>>vvvv>vv>vv<>^v>v>>><<^< +^^v^^^^^><^v^v^vv^v<^v^^>^vvvv>^^^^^^<>v^v<^<>^>^^<<^v><^^^><^^^<>><<^v><>v^<^^>^v>^v>><^^^<^^>^^v<><<^>>^^>><<<<^vv^^vvv^<>>v^^v>^<^>v^>><>>><<^>><^>v<^<>vv><^v^<><<>^vvvv^^>^>^<><>v^>>^v><>^v<^<<^<><^v^^>><<<><><<v>^<<^^^<>v<>^v^<^vv^v>^^^>^>v^v^^^v<v>v^v<^>^v><v^v><><><^vv^v><<^v>^^<>^<v^><<<^>>^<<^^<<<><><>>vvvv><<^>>><^v^^>>>^<^^>>^^^<<^<^^vv^^<^v>>>^<>vv>^v<^^<^>>v>>><>>>>v<<^^>^^^vv<^v<<^>><^^><>v^v<>v^<<<>^>>^^^v^vv><^vv<>>^>^>>>vv^>v<^^<>^<^v<>v^><^<<^>v>>^<^^v>^<^>^vvv<><^^^<>><><<>vvvv>^<<^^<^v>^<^v^vv>^>><<>>>^vv>^^<>>vvv<^vv<<<>v^>^v>vvv^>^v^v>vv^>><>^^^>^<<>^><>^<<>v<>^^<>vv^<>v^^><<><^>^^<<<<>>^>vv>^><><^^<>v^v>v<<><>^^>>>^>^>vv>^v^v<<<>^<^ +v^vv><^<^^<>v^^v<>>>v><<<<^^>^>vv<^<><<<>^v<<^^^v><>><<^>^<>>^<>^^v>v>^v<<<>^<>>^v>^>v<>>^vvvv^<><>v>vv^<<^>>v>^><<>v<<^v^<<>v^>^>v<>^vv>vv^vvv^<<>^<^><^^^<^>>vvvv><^v^v<<<^^^v>^>^^<>v<<<>><vv>vv>>vv^v^<><^^v>><<>^vv^>^^v>>vv<^<<<<^<>^^><>>>><>vv<<^<>^^vv><^v<^>v>>v><^^^><><^v>vvvv><<^v^<>vv^^>^v^v^>><<>>v<^^>>v<^^><^vvv^v<vv^>v<>v^v>vv^<<^^<<<><><^>vv<><^v>v^^>^<>><^v^><>v><^>^>^><>v<^v>><>>>^><^<^<^>>^vvvv>>v>^>^>>><<>^^v>v^^v>v><^<>^v<><<>>v>^<^<v<^^>v^<^v>>vv^>^>^v>^^<>v<<<><^v^v>vv>^>^<>>><^^v^<^<>>><<^^vv>v^^<<^>>v^v^>^vv^<^^v>vv^v>><><^^>v>^vv^v<^^v>><<>v<^^>^<>>v>>v^v^<>v<>^<<<^><<^>^>^v>v^v>^<<^><^^^vv^>^v<<^v><^^vv<^>v>v^<<><^>v>>v>><^v<^<>^v^v^<><v<>vv><<^ +vv>><^<>vv^>>^>>v<^v^^^v<^^>>><><v>v^vv<<^v^<<<<<^v>>v>v>^<<<>^>v^>>>v<>v^><>^><^^^^^v^<^v^v<<>><>vvv<^^>>^<>>^v<>vv><^^<>>^^^^^^><^>v>v>v^<^^<^^><>v>^<^>>vvvv>>>vv<>>>v^v^>^>>>>>>>v<^>^^^v>v>vvv^^^v<<^>>vv<>v<^^^^><<>>^>>^>^>^v^^<^>>^v^^v^vvv>^><^^^v^<>^>>^>^^>v<^^v>>^^v>^vv>^v>v>vv^><>^>>>^>^v<^<>v^>>v>^><><<v>v><<<>vv>v^<^^v^>><^v^>v>v^vv^^vv><>vv>><^v>^^^<^^^>>^^^^v>><><v>>^<<^>^vv^>^v^v<><^><>^>^>^<<^vvv>v>>^>^>v<<^v^^^<<^^^<^vv^^^<<^v<^>>^<^<>>^<><>^<><^<^v<^v^<^<^^v<><><<>vv^v>^<>><^<^vvv>>^v>^^^^<^^<>vv<>^v>><<^v^v<^v>^v^^>>v^^>><^<>^>vv^v^^vv<>v<>^v<<>>^><^^>vv^>><^<>vv<><<<>>>><^>><^^^><^^v<^^v>>><<<<>^v>^^vv^>>>>^<>v<<>vv><>v><<^>>v>v^<><>v>>><vv>^^v>>^^^v^v<<^v^^^v>><<^<><>^vv^^v<^v^^>v^<^v<<^<>^v +>^v^^<><<><^v<^^^^<>>v><<<>v><>^v>^^^^^v>v<^v^><<>vv<>^v><>^vv<^v<^vv^><>^<<>v^>>vv<^vvv>v>^^^vvv^^<v^^^^<>^^v<<<><>vv<^v^<<^^^>vvv^<^^<><^^<>>>^<>^<>^^v>>^^vvv>v<^<<<>^<<^v^><^>>^>>v^<^vvv>vv>^><^>><<^>^><^>^v<><^v^^v^<>v^v>v<<<<><^<^>>v<>v^<<>v^^^>>^>v<>^v>^v><^v>^<<^v><>vv<><>^^v>>^^>v<<<<<<>^><^^vv>vv>>v^>>>v>^v>v>v>^vv^<^>vvv>^<^<>>^^v>v<>^>>^vv<<>v^^v^^^^^^^<>v^^>^^<>>>^^<<^^><^v^>vv^^>^v><<><>^<>^^<^><>v^><><<><^>>^^>>vvv>>>vvv><>>><^^v^>v<<^v>v^<><<^>>v^><>v^^><^^<^>^vv^>>^^><<^v^<>^>vvv><<^^><>^^v<>^v^^^^^>v>^>vv<><<<>>vvvv^^>^^v>>>v>vvvv>^>><^v>^<^>^^<^<^^^<^v>v^<<>v^><>v>>v<<<>v^^^><>>>^<<>v^<>>^v>>v^v^vvv^<>v><^v<<^^^^v^^<<^v^>v^v^<>v^<<>v>v<^>^v<>v>><>v^<>>^v^<<vv<><^^>>^> +^<^v^v^^>v>vv><<<<<^>v>>vvv<<^v<><>^vv>v<>^>vv<>^<^>^v>^>^>v^v<<^v>vv<^^>^^^v>^<^v>v<>vv><>>v>vv>v^^<^^>v>>>vv>^v^>^^<>v>vv^v^<^vv>v>^>>>><^<^vvvvv<<>>v>>v>><^^^v>v<><^^v^>^<^<^<^v>>v>^<^^^v><<>v^>v>>^^>^v><^<>^^v<<><>vv^^>^>>>v^<^<>v^<>v><^>^^>^>>^>>v<^>^<<<>>^^<<<>>^^v>^<><^v<^<^<>>>v^^>>v^^<<><^vv^<>^^^>v^>vvv^^^<><>^>v>vv^<>vvv^v>><><<>v<>>>>vv<<vv<^v<^<<>v>v<>^v^v<<<^^>v^v<<<v<>>v>vv^v<<<>v>^^v>^><>^^<>v^<<v^v>>v^>v><><^^v^vvv<^^>vv^<>><<<<^>vvv>^>vv<>v^>>^^><>>^<>><><^>>>>>^<>v^>^vv^>>>vv^vvv>>v^<^><^^v><><<<<<><>v>><^v<<>^>>>^<>>^vv>>^v<<>v>>^v^v<^>^^v<<><^^><>><^v<>>>>^^vvv<<>^v<>^<^<>v>v>><^v^v<^>>>^<<>v>>><>v^><^<^><<>v>>>^<><>v^^^vvv^><<<v>^^<^><<>>^>v>v<^>^vvv>>vv< +<>>^<^vv>>><><^v^>^>v><<^^vv<>^<>vvvvvv^^^^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<>>vv<^^>^<<^>^^>v>v>^><^>>^><<^v^v^<<>v><^>v<>^^^<>v<^>^^^v^<^>^><^vv<<^^><<^vvvv>^^^^^>vv<^<^>><<><>v<><^v<>vvv<>v<<>>v<^^^>v<<>>^v>^>^vv<>v^>^v^v<^^><<><<<<><<><<<<>v>v<><^>^^><>v^^v^<<>^vvvvv^><^>v<<<^<^v^vv^v>>vvv>v^>^>vvv<<>v<^<^v<^>v<^>v^>^>^vv^<>^^^^<>>>>v^v<<<<^v<<><<^v<^>^vvv<><<^^><<^>v<^<^^^v^>>^^>vv^v>^>>>>^>>>><>>^v^^^><<^vvv>>v^^^v<>><>v^<^>>>>v^^v^v>^^^v>v^v>>>^><<^^>v<>^>^^<>>v>vv^<>vv<>>v^><^^<<^v>>v>>^>>^^^v<<<^^><<>vv^^>^v>>><^vv<><><>^>>>>v^^<>^v>v<><^>^^^v^><<>vvv<<>v^>>><>><>v^<><>>>^vvv^^<<^v^v>^><^>v^^<>><^v>^>^v<^^>vv><<^^^v>^v>v<<^^v^^^^>^^<<^>^v>>><^v^v^v<>^>^v<>v><>><<^>^^v>^^<>>v><<^^v<<>>^vvv<^<^^<>^v^<^^>vv<><^^<>vv><^v<<>v>><^><<^vv^v>^^<<><>>v<^vv<^<^v>>><>^<<<^v<^vv<>>vv>>>vv<<^<<>vv><>v>>>v<>>vv^^^^vv<^<^v<>>v>>v^v^^<<^^<<^v>v<^>v^^<><<>>v>vv^<>v>vv>>^>>v<^v>v>><<^>^<>v^^<>v<>>v<v>v^>><<^>^^v^v<>^^vv^>^<^>^v^^<^^<><^<>^<>^^v<<^<^^v>v>vv<^><<^^^<>v<v>^>^^^<<>v<^^<^^^<^><^^>vv^<<>v>vv^<>>^^v<>v<^<<^^vvvv<>>^>^^v^>v^v^v>v^>v^>vv>v><><^v<>v><>>v>v^^^^>><^^v^^>^vv>>vv>>>>v><>v^vv<<^^<><>><<><><<^<<<<>>^>v^v>v^^^<>^v>v^>^><><^^v>v>^^v^>>^<><<^<>>^v<><<>>>^v<>vv>^^^<<>>>>^><<^<<><<<>>>v>>^>v><^v^>vv^vv^^<>v>>>v>^>>^v><>>v>^><^<^<>v>vvv^<>>><^^<<^>v^>>>>^v^>v^>vvvv>><<<>>>v^><<<>v<^<>v<<><^vvv^^>v^<<<><<<><^>v<<<>>>^<^<<v<^v<<^v^<><^vv^v^>^<vv><>>>>^<>>v><<<<^^^>^>^^>>^v<^^vv<><^>v<>>>>v<>>^^^v<<^><>v<>v><>^><^v>v>>^vv^^vvvv^<<<<^>v>^vv<>v^^v>><^v>^v><>^v<^v>^v^^>^^v^^^^<><>>^>><^^>^v<^vv><^^v^<^^><^><><<>^^^v>^v>vv^>>>v^v<<<^^^>v><^^vvv<>>vv^<<^v^><vv>^>^>v^^^vv>^v^v<^^v<<<^<>>>^^>>v^<<^v>^<^v>>v<^>>vvv<<^><^>>v<>v<><^^^vvv<>^v^>v><<>^>v<<<^^<>>^v<><<^<>>><vv^<^<^>^>v^^<^v>v>^^>>v><^^<><<^<>v>^v><^^<<<>^>>><<<^^<<^^^<>>>>v>^>>>^^>>vv^><>>^^v<<>>^<>>><><>^^^v<>><>^<v>^><^>>vv^^v^v^^<^>v>v^^<><>>^>v>vv>vv>vv^>^>^vvv^>>>>^vvv^<^>vv<>v>>>^vv<<<^><<v^>>v<<>^<>>>v^v>v^^<^^^^>^^>v<>vv<>^>>^^<v<^>v^>><^<^vv>>^>>^v^^>>vvvv^>v>>vv^^<>>vvv<^^^^vv>>> +v<><<^v^><>v<<>vvvv>>>vvvvv<^v^v<<v^>v^^>^vv<<<<<>v>v^>v<>^v^><<<>v^vvv><<>v>v><<<>^<^>v<<>v>^>>v<>>^^<>v><^v>^<<^^<v^^^<^^<><>v>v>v><<<^>v>^vv><^^^^vv^^vv^><>>v<^<><^<<^>^v>^v>vv>v>><>^v<<>v><>v^<^^>>vv^^vvv<>^v<^>>vv^^>vv^v<<><^<^>>v>^v><<><^<>^>^vv^v><>>>^v^<v^^^<^<<^>vvv^v<<^^vv<^>v>v>^^vv><>v^^^v><<>^v><>v^>>^v^>^^>v^v<^^v<>>v<>>^^>^><<<^v>>^vv<^>^vv^^>^<>^<>v^>>^v^><<^<><>><><^<^<<>^^^v<<<>v>v<^v>>v<^>^<<>^v^<<>vv<^^v>v<<><><<vvv^<^vv^^v^^^^v>>vv^vvv>^<^^>v^><><>^^<^^v<v>^<>v>vvv<>vv<>^v<>vv>>><>^<^v<><<>v^<>>v^^^^v^v<<><>^>v^>v^^^v>>^>>^<<<<^v^v<>v<<>><>v>v<>>^^>v>^<^^^v^^<^>>>>><>^<><^v>vv^<>>v>>v>^>^v<<<>^<>^<^^<^<>v><^^v<><^^<<^v>>v^^>^>vvvvv<^^>^v^><><<<^>v>v^v<^<<><><>^<^>v>^v^v<>>v>v^v^><>v^v>v<<><^^><<>v diff --git a/day15/gps.go b/day15/gps.go new file mode 100644 index 0000000..44fa246 --- /dev/null +++ b/day15/gps.go @@ -0,0 +1,223 @@ +package main + +import ( "os"; "fmt"; "strings" ) + + +// ---------------------------------------- +type Direction uint8 + +const ( + Up Direction = iota + Down Direction = iota + Left Direction = iota + Right Direction = iota +) + +func NewDirections(str string) []Direction { + direct := make([]Direction, 0, len(str)) + + for _, char := range []byte(str) { + switch { + case char == '<': direct = append(direct, Left) + case char == '>': direct = append(direct, Right) + case char == '^': direct = append(direct, Up) + case char == 'v': direct = append(direct, Down) + default: + } + } + + return direct +} + + +// ---------------------------------------- +type Field struct { + robot [2]int + field [][]byte +} + +func NewField(str string) *Field { + field := make([][]byte, 0) + var robot [2]int + + for y, line := range strings.Split(str, "\n") { + for x, char := range []byte(line) { + if char == '@' { robot = [...]int{x, y} } + } + field = append(field, []byte(line)) + } + + return &Field{robot: robot, field: field} +} + +func (f *Field) StepUp() { + switch { + // blocked + case f.field[f.robot[1] - 1][f.robot[0]] == '#': + return + // free to move + case f.field[f.robot[1] - 1][f.robot[0]] == '.': + f.field[f.robot[1] - 1][f.robot[0]] = '@' + f.field[f.robot[1]][f.robot[0]] = '.' + f.robot[1]-- + return + // infront of box + default: + loop := true + for i := 2 ; loop; i++ { + switch { + case f.field[f.robot[1] - i][f.robot[0]] == '#': return + case f.field[f.robot[1] - i][f.robot[0]] == 'O': continue + case f.field[f.robot[1] - i][f.robot[0]] == '.': + // shift boxes + f.field[f.robot[1] - i][f.robot[0]] = 'O' + loop = false + } + } + // continue shifting boxes + f.field[f.robot[1] - 1][f.robot[0]] = '@' + f.field[f.robot[1]][f.robot[0]] = '.' + f.robot[1]-- + return + } +} + +func (f *Field) StepDown() { + switch { + // blocked + case f.field[f.robot[1] + 1][f.robot[0]] == '#': + return + // free to move + case f.field[f.robot[1] + 1][f.robot[0]] == '.': + f.field[f.robot[1] + 1][f.robot[0]] = '@' + f.field[f.robot[1]][f.robot[0]] = '.' + f.robot[1]++ + return + // infront of box + default: + loop := true + for i := 2 ; loop; i++ { + switch { + case f.field[f.robot[1] + i][f.robot[0]] == '#': return + case f.field[f.robot[1] + i][f.robot[0]] == 'O': continue + case f.field[f.robot[1] + i][f.robot[0]] == '.': + // shift boxes + f.field[f.robot[1] + i][f.robot[0]] = 'O' + loop = false + } + } + // continue shifting boxes + f.field[f.robot[1] + 1][f.robot[0]] = '@' + f.field[f.robot[1]][f.robot[0]] = '.' + f.robot[1]++ + return + } +} + +func (f *Field) StepRight() { + switch { + // blocked + case f.field[f.robot[1]][f.robot[0] + 1] == '#': + return + // free to move + case f.field[f.robot[1]][f.robot[0] + 1] == '.': + f.field[f.robot[1]][f.robot[0] + 1] = '@' + f.field[f.robot[1]][f.robot[0]] = '.' + f.robot[0]++ + return + // infront of box + default: + loop := true + for i := 2 ; loop; i++ { + switch { + case f.field[f.robot[1]][f.robot[0] + i] == '#': return + case f.field[f.robot[1]][f.robot[0] + i] == 'O': continue + case f.field[f.robot[1]][f.robot[0] + i] == '.': + // shift boxes + f.field[f.robot[1]][f.robot[0] + i] = 'O' + loop = false + } + } + // continue shifting boxes + f.field[f.robot[1]][f.robot[0] + 1] = '@' + f.field[f.robot[1]][f.robot[0]] = '.' + f.robot[0]++ + return + } +} + +func (f *Field) StepLeft() { + switch { + // blocked + case f.field[f.robot[1]][f.robot[0] - 1] == '#': + return + // free to move + case f.field[f.robot[1]][f.robot[0] - 1] == '.': + f.field[f.robot[1]][f.robot[0] - 1] = '@' + f.field[f.robot[1]][f.robot[0]] = '.' + f.robot[0]-- + return + // infront of box + default: + loop := true + for i := 2 ; loop; i++ { + switch { + case f.field[f.robot[1]][f.robot[0] - i] == '#': return + case f.field[f.robot[1]][f.robot[0] - i] == 'O': continue + case f.field[f.robot[1]][f.robot[0] - i] == '.': + // shift boxes + f.field[f.robot[1]][f.robot[0] - i] = 'O' + loop = false + } + } + // continue shifting boxes + f.field[f.robot[1]][f.robot[0] - 1] = '@' + f.field[f.robot[1]][f.robot[0]] = '.' + f.robot[0]-- + return + } +} + +func (f *Field) Print() { + for _, line := range f.field { + fmt.Println(string(line)) + } +} + +func (f *Field) Gps() int { + acc := 0 + for y, line := range f.field { + for x, char := range line { + if char == 'O' { + acc += 100 * y + x + } + } + } + return acc +} + +// ---------------------------------------- +func check(err error) { if err != nil { panic(err) } } + + +func main() { + dat, err := os.ReadFile("data.txt") + check(err) + + input := strings.TrimSpace(string(dat)) + + field := NewField(strings.Split(input, "\n\n")[0]) + directions := NewDirections(strings.Split(input, "\n\n")[1]) + + //field.Print() + for _, d := range directions { + switch { + case d == Up: field.StepUp() + case d == Down: field.StepDown() + case d == Right: field.StepRight() + case d == Left: field.StepLeft() + } + //field.Print() + } + fmt.Println(field.Gps()) +}