From 1a711cd261976913c15747c690c9116de9ab1941 Mon Sep 17 00:00:00 2001 From: JISAUAY Date: Mon, 1 Dec 2025 14:23:49 -0600 Subject: [PATCH] Solved 2025 Day 1 Parts 1 & 2 --- 2024/day15/input.txt | 71 + 2024/day15/main.py | 342 +++ 2024/day15/test.txt | 9 + 2024/day16/main.py | 91 + 2024/day16/test.text | 15 + 2024/day17/input.txt | 5 + 2024/day17/main.py | 167 ++ 2024/day17/test.txt | 5 + 2024/day17/tests/p1.txt | 5 + 2024/day17/tests/p2.txt | 5 + 2024/day17/tests/p3.txt | 5 + 2024/day17/tests/p4.txt | 5 + 2024/day17/tests/p5.txt | 5 + 2024/day17/tests/test2.txt | 5 + 2024/day19/input.txt | 402 ++++ 2024/day19/main.py | 72 + 2024/day19/test.txt | 10 + 2025/day1/p1/input.txt | 4099 ++++++++++++++++++++++++++++++++++++ 2025/day1/p1/main.py | 45 + 2025/day1/p1/test.txt | 10 + 2025/day1/p2/input.txt | 4099 ++++++++++++++++++++++++++++++++++++ 2025/day1/p2/main.py | 46 + 2025/day1/p2/test.txt | 10 + 23 files changed, 9528 insertions(+) create mode 100644 2024/day15/input.txt create mode 100644 2024/day15/main.py create mode 100644 2024/day15/test.txt create mode 100644 2024/day16/main.py create mode 100644 2024/day16/test.text create mode 100644 2024/day17/input.txt create mode 100644 2024/day17/main.py create mode 100644 2024/day17/test.txt create mode 100644 2024/day17/tests/p1.txt create mode 100644 2024/day17/tests/p2.txt create mode 100644 2024/day17/tests/p3.txt create mode 100644 2024/day17/tests/p4.txt create mode 100644 2024/day17/tests/p5.txt create mode 100644 2024/day17/tests/test2.txt create mode 100644 2024/day19/input.txt create mode 100644 2024/day19/main.py create mode 100644 2024/day19/test.txt create mode 100644 2025/day1/p1/input.txt create mode 100644 2025/day1/p1/main.py create mode 100644 2025/day1/p1/test.txt create mode 100644 2025/day1/p2/input.txt create mode 100644 2025/day1/p2/main.py create mode 100644 2025/day1/p2/test.txt diff --git a/2024/day15/input.txt b/2024/day15/input.txt new file mode 100644 index 0000000..fdfa581 --- /dev/null +++ b/2024/day15/input.txt @@ -0,0 +1,71 @@ +################################################## +#OOO.O.#...O.O..#.....OO...#.....OO.O..OO.....#..# +##.O...O.OO#.#.O.#.O.O...O#.OO.....OO..OO.O..#...# +#OO.O....O....O..........O.O...O........#.OOO....# +#..#.O#..O.O..O.O#..OOO...OO.#......O...O.O.#.OOO# +#...#..OO..........O.O...O....#....O#OO.O..O.#.#.# +#.#.O....O..OO....O#....O..OO...#.......O..O.O...# +#O...O.#OO..O...........OO.....#O...O.O.#.OO.OO..# +#O.O......O..#..O.#.##OO........#..##O.O#......#.# +#..O........#............OO...OO...OO###..O.OO.OO# +#..O..OO.......O.......#O..O#O..#.O..O...#......O# +#OO..#........#.O..O........O.OO.O#...O#......#..# +#.......#...#.....#..O.O.......OOOO#....O..#.....# +#....O....O.O.OO#OO#..OO.....#.##..O#O.....OO..O.# +#...OOO..O...OO..O..O.OO.O.#O..#O#..O.O...O...#.O# +#O.O...O..O....#.OO....O......O....#...#.O.OOO#.O# +#O#O#.O#......O.OO.O..O....#..#O......O....O.O..O# +#...##..O.O......O.#.O.O...O...O....OO.....O..O..# +#O..#.O...O.O..O....#.O....O....##O..O.OOOO.....O# +#.O.O...O.#..OO.....O.#..#..#....OO.......O.#OOO.# +#.O#...O..O...#...#..OO..OO.OO.OO..O#.....O...O.O# +#...O.O.OO.O.O.O.........O.........O..........O#.# +#....#....O##.OO.OO......O.OO.#.O.#.O...O....O..## +#..O...O..O.O..#O.O..OO.OOOO..............O#O....# +#...O#OO....OO.O..OO.OO.@....OO.O...O....O.O...#O# +#...O....O..#.##..O....OO.O.O.O..#.OO.#OO....O.OO# +#..O.O..#.O......#O..#O.O.#....O....#...O...O..OO# +#..O...OO.....O.O..O.O..O......O.OO.OOO...OO.O#..# +#....#.O..OOOOOOO..O#.O....O.O..OOO.O...#.O...OOO# +#O...O...O#...##...O....OO...O.O.OOO.O#.#....OO.O# +#..O.#.O#.OO..O.O.#..OOOO##O.O....OO.O.O.O#O.OOO## +#.O.O..O.....O..OO..O...O.............O.O........# +#.O.O.....O#OOO..#O#O...O.O.O..O.OO...#OO....O.OO# +#....#....O#OO...O..#...O.O...O...............#O.# +##....##...O#..O.OO.O..O.O..#..OO.O#....O.O..#O.O# +#O...O.O...........O##..#.O......#..#.#..O.O#..OO# +#.#.O.O...OO..OO.O......O..O.OO.O.......O..#.#...# +#.......O..#..#...#.......#OO.OO...OOOO.......#..# +#.#.......O.......#....OOO......#....O.O.O....O..# +#O#O..#..OOOO..OO.O....O.O......O##.OO......O.O..# +#..OOO.....OO..#......OO.##.O..OO...O.....OO....## +#.OO...OO..O#..O.#O.O..OOO..OO.O.OO......O....OO.# +#O..O.......O.O....OO....#.......O.....#.O.......# +#...O#...OO..#O##.O.O.O#O..OO...OO.O.OOO...O...O.# +#.#...OO.....O.#.OO...OO..#O...O...O.....O..O..O.# +#..#O......OO.....O..##...OOO..O.OO..O....#...#OO# +#......OO..##...OO.....#.....###...#O#O....#.....# +#O.#O#......#..OO........O#.OO........O...O......# +#...O..#...#O.....OOO...O..#.O..O.#O.O..O.....O..# +################################################## + +^<>^<^>v^^^v><^<^v^<><><^^^>><>>vvv^^^^v^>v>><<^>>^v<<>vvv<^>^<^<>><>vv^>vv^>^<^>>v>>><>^v^v<<^<>>^<<>vv^vv<<<<^^v^^^<^^^>>>v^^<>>^^>>><><^<><>vvv<^^><><>>^>v<^>>><^>^v^v>v>^>v^v^v<^^<<^vv<^v><^v<><>vv><^>^<>vv^>>>^><>vvv>^^<^>^>^v><^<^v<^^>^><^<>^v^^<^v>>v<<^<^><^><^><<<>^>>>>v^>>>^>v<<<>v^><<^<><<^v^v^^^^>^^^v^<v>><<^v<><^^^v>^^v^v><^>v<^^^^<>>>v<<<><<v^vvv^^<>v><>v^^>>v^>v<^vv^v^>>v>^vv><><<^>^>v^^>v^>>^^>v^<<>>^^v^^^>>v><<<^<^>^^^<^>v>^>><^vv<>>^vv>>>^<>^^^<>^v^^<>vvv>><>>>^^>^<>v>>v<^^v>^<^^v>v<^^v^<>v>^^<<^<>>>^><^^v><^<<<<>^v>><><^>^^v^>^^>vv>v>><>^<>>^<^>v><<<>>>^vv<<^>vvv<^v<><>v^<<<^><<<<v^>>v^>vv^><<>><<^>>>^^>v^><><>v^>>>^v><^v^<>>v^<>v^vvv^>>>v><<v<>^<>v^^^^v>v>>v^<^<^<< +>>v^><^^^^><^<<><<<^>>vv<^v^>^v>vv>><^^^^>^v>^>>vv>^vvvv^^v^vv>>v^^>^vv>>vv^v>vvv>v^><><^>>><^<<>><>^>^v<<>>>>>v>vv>^^v<<^^>vv>v^<^>vv^<^vv<^v^>^^v^v><>^>^v<>^^>v^<^v^><<>^>^^<>v><^>>v<^>^^<^^^^>>vv^^^>^>^^v<>^>v>v^v<^^<>^v>vv>>>v><^vv^<<^vv><^^<^>v^>^^^^^<>v>vvv>^^<^<>><>^v>v^v^<^<>v>^>^^^>v>^<>^<<^v><>^^v<^<><^>>vvvv^<>>^><^<<<><<^^>v>v>v^^>v<<^>v^vvvvv^v^^>>>^^><>v>v>^>vv^v^v^>vv>v^<^^<>>vv>>^^^<>v>>vvv^>><<^>v<^^><<<^<^>><^^<<^v>^^><<<>^^>>>>^^>v>v^<^<<>vvvvv<<<^v>vvv<>^^<<^vv<>^v^>^v>>v>v<>^<<^<>v>^>><^>^><>^<<^v^vv<<^><<^<^>v^^>^<<^v^v>^vv>^<^>^>><^>^vvvvvv>^>^<>>>vvv^>v^^<>v<^>v>v<<><<^>^v>^>v^<^<>v^<<>^>^^v<^>>^vv^<>^v<><^>>v^>^<<^vv<^>vvv^>v><<>^^^v>v<<^>><>^<><<<>>v<>>vvv^>><<^v>>>v>^v>><^>^v>^>^^^^v^<v^>>^^^^vvv +v<<^<^><><>^>v^>^^>>^<<^^<>^^^v<><^^v<<<>v<^vvv>v^v^<<>>vv>^^v<^vv>>>>>>^<^^>^v<<^<<>^^>^>^>^^<^<>><^<>v^<>><^<<v<>^<<>>>^v^>>^^v<<>v^>^^>>^vv^>^<^^^<^^v^><>>>v>>^v<^>vvv^>^^>^><<>^><<^>v^^v>^^v<<>^<<>><^v^^v><><><<>^>>vv^^>v^>v<<<^^<^>^vv><^^>>^v^^<<^vvvv^v>>v>>v^<^>>>^^<>^>vv^v^<<^^v>^vvvv>^v<>vv<<<>^>v<<^><^^><<<^^^^^>v>^vvvvv>^>^^>v>>vv^<^<^v<<^>^>vv<^>>v>v<>><<><>>v^v>^v>^^>>vv>>v<<<><^>>>vv^>v>v^vvv>><<^^<^<>>v<>>^><>^^^^vv<^^<^vv>>v^^v^>>^v>^>v^>^>^vv>^^^>>^>^v<^^^v^>>>^>^>v^<<^^>^<^>vv<^^^v^^>^^v<>^^<^v^<^>^^><><>v^vv^>^>>>>^>v>vv><^vv<<<^>^<<^v^<^>><<^<>^><>^v^>vv>^v>>v<>v<^v<><>>>^^^<<^>>>v<<>>vvv>>>^>v^v^vv>>>v<^<<v>^><>v^^^><<^<<>><<<<^>^<>>^^^>^>vvv<<<>v^<><^^<^<^>^^v^>v^>><><>^ +>v^vv>^^>^v^>^<>><^vv<>>^v>v<<<^<<^>>>>^^v^>v^>>^><<<^^v^>^^^>><><<^vvvvv^<>^>^>^<^^<>^>vv<>^>^>v>^>>vv>v^<<^^v^^v^^v<<>^^v<>v>vv<^^><<^<^^>vv>^<^<^vvv<>>^><^^<>vvvv<<^^><vvv^>^<><<^>>v>v><<>v^vvv<>v>>>^>v<^>v^v^^<^>>><>>>^<>v<>>>>>>>><>v>v<<v^>v<^^<>><>><^^^^^^v>vv^<^^<><>^vv^v^<<^v>>^v^v>^v>vv<^<<^v<>vv<>vv>v>^vv^<^>vv>v^^v>vv^<>v^^>^<^^vv<<><>>^>vv^<^>v^vvvv^v^<^v<v<^<^^>v^^>^v><^v>v>>^^vv<^v<<<>^<^>v<<<<^<^>v<>^vvv<<<v^>v^^<^^v<>><<><^<>>^vv>^^<>v<^^<>^>^^v<^<^^vvvvv>^>^v>^>vv^v><>^^>v>>^^^vv^<<^v^v^v^<<<>>><^<><>>^>v<>v>v>>>v>^^>><>>v<^<>^<>>^v>>>v^>>>v>v<^<^v>v^<<^v>>^<><^^vv^<>vv<^<<><>>^v<>>v^vv^<<<^vv^vv^^v<^v<>>^v>^<>^v>v<<^vv^>>^^^<^>>>>>^<<<^v>v<>><^v>^><<^><>vvv^^^vv^><>><><>^vv>^>^^<^>v^v^^^^><^v>>^<^<>^<^^v<^^>>>>>><^<^v<^vv<^>v<>^>>> +<<^>v>><>><><<>>^>>^>^<>^^v<<<^>^v><^><>vvvv^<^^>>v<>^>^v>^v>>^vv>^<>^v><^<^vv^vv^^<<>^^v^v>^v<>>vv<>v>vv<^^v^v^<<><^>^^>^<>v<^v>^<>v<^<^<^>>^<<^^v^vv^><^<>^v^>^^v>^>><^>^>^^v><<^<^>v<^>>>v>v^>^<<^><^^<>^^vvv^v>v<><^<>v<<^><>^>v^^>v>^^^>v^v<<>>>^v<><>^v^<^<><^v>>v<<<^v>^v^^v^>^<<^^>v^>^v<^^<>><><^v>^<><<>^><<>>v>^^v^><>>>>v<<><>>^^>^^vvv<<>><>v<<v^v>vvv<^>^vv>>>v>>^><^vv<^^<^^^<>v>^<^>v^>vvv>^^>^<<<>^v>vv>><<^v^>v^>^<<>^>v<>><^^>^v>^><^>><>^v<>v^<><^>^<>^>>^>>>^<<<v<<>>v^>^^v><>>v^<^>^<<>^<^^v<^v>^^<>>v<>>>^><>v^>^^^^>v^<>>^^^<<v^<>>>v>>^^>vv>>><<^>v<^<^>v<<^^<<>>>^^<^>>>^>^<<^^vvv>>^>>v^<>^v<><<^>><>v>v>v<>^^v>^>vv>>v<^^^v><>v>^v^<>><^^^vv^>^^vv<>>>><^<>v><^>vv>>v^^^>v>v>>vvv<>^>^^<^vv^<^<>^><^<>^>^><v^v>^^>v^^>vv^>^v>^>>v>^>v<<^v<^<>>vvv<^^vv^< +<>>vvv><^<>>^^>v<>^v^^^v<>v^^v^>^^<^^<^^><<^^^>^^><>v<^^><^<v>><^^<^>^>v<^vvv<^^>>><>>vvvv^<<><>^<>vvv^>v^^^v<^^^^^<^^<<><^^^^v<<>><^>>v>>>>v^v>v><<^>v<^^<><<>v<<^<>^<^>^v>v^<>^v<>><<<^^v^v<<^^><>>vv<<<^<>><^^>>^<>^<<^^>>>>><<><>^>^^>>v^v^>^>v>v>vv<>>^^>><<^v^>^vv>>v>><<><>^^vv^v^>>vv^>v^>^>vvvv<^>^>^><^>v^<^^vv>>^<>^^^^<^><<^<^^^v>v^<<><v>>v><^>^vvv<^><<^vvvv>v>v>v>><><<<>v^v>^^vv<>^^>><>>>^>v>^^v^^<>^>^^vv<><<v<^<^vvv^vvv<>>^^^v>v^<<<^^>^>v^^v^>^>^vv><^^^>vv>v^<^^^v^^<>>^vvvvv>^<>>><^><><<^>>>^<<>v^v^<>>v^^^vv^^<>^><^<>>>v<^>v^^^>>vv<^<>v^>>>>^>><>^<<<>^v^v>vvvv^^v^v^v>><<>>><^^>>v>v<^>^<>^<><<v^v^><>^>^v>^^><^^vvv^><><<<^>^<<<<<^^>^vvv^v^^^<<>^^^>><<^v^<^>>^v^v^><<>v<<^<^<<^>v^>v>^v^^vv>^><<^v>^<^>^>v^^v<<><>^>^<>><^><<^v<^vv^v^>^^>^^>^<<^<<^<v^>^>>>vv^<>>^<>v>>>^><<<><>^>^<^v>>^>>>v<>v<^vv^^^>v>v^>vv<^<><>vv>^^<<^v^>^v^vv>v<v^v>v><^^v^^v<>vv^>^<>v^^>^vv>v^<>vvv<^vv<>^^<<^^<>v^v^<^^^^>^^<>>^^v^v^><^v><>^>v^><>^vv<^<<>vvv^^>v>^v>v>^^v>>vv><^<>^>vv<>v<>>>^<>^^^vv>v^>v<>v^vv^^vv>>><>v^><v^<<>^<>vv><<<^<>>v^<>^><^<>^>^v^><^^>vv^><^v^^>v^v<^^^<>^v^^<<><<>v><>>>><>v<<^^^vv>^^>^<<<>>>v>>v>>^>^>v^^<^vv>^<<<>^><>^v<>^v>^><<^>^>v><^^<^>v>v>^v<^<^vv>v>v>>v>>><^^>v>^^<>^^v>^<<<>^<^v>v>^^^>vv^<><<<>^^^v<<<<<<>v<^v^>>>vv<^<><^>^^>>><>>^>>>>^^<>^^^>vv>v<<<><vv>v>>^v^^vv^>v>>><>v^^>><>^^<<>vv^v<>^<<><v<^v^>>^v><>vvv^<<^>^>v<>^vv<>^>>^<><>>>v^<>v^v^<^>><<<>>^v>vv^ +>v^vv><^>>^v^<<<<>vv>^<^v^<><<>vvv^<^v^>>>v>^^>>^vv^^v><><<^>^<<>^><>^v^<><><<>v<><^^><^<<>>>v^>>v^^^>^^v><>>v>^^v^^^v<^^v^v>^>>v><>vvv>vv^^><<^>^>>^>^>>^>><>>v<<<>^v<^<>^><>><>>^v>^v>>v^<<<^v>>><><^vv>>v<^vvv^>><>>>v<<>vv><>v^^v>vv><<^vv>v<>v^^<<>^<<>^^>^><<^^>^^>v^>>^>v>^v^v>v<>>>^<<<<^v^^>^>^^v>^>^v>^^>^vv<>vv^>>>^v^>><>><<>v^>>v<^v<><><<<>^v^>>^^v^^>vvvv>^><<>v^^^^<^>v<^<>^^v<>>^<^<>v>^>><<>><<>^^^v>^^^>^v^<>v^>><>^>>vvv>^^>vv<^>^<<>^v>>^<^^vv<^>vv<^>^v>>>v^>>^v><>v><^^>><>^v<>vv>>>^v<^v<<<>v^<>><>^vvvv^vv>>>>^v>><^v><^^<v^v>><<^^><>^>^>^v><^^<>v^>v<>^v^vv><<<^^>>^v>v>v^>><^<<>>><>><^v>><^<^^v^^>>>>>>>>^<<^><^>vvv^^^^<>^vv>^vv^v^>v<>>^>>^><^v><<<^<<v^><>>v<><><^v<^>v^v +><>^vv><^<><<^^^^v<^>v<<><^^^vvvv^v^^v^>v>><>^^>>>vv^<<^>^>>v>v^^<<>^>v^^v<^v>^>vv^v<><>^>>^>v<<>v^^<^^^>>v>>><^^^vvvv<^^vvv>v^^v^^>^v^>^v^><^^<>>v^<<>v>v<<<^^^v^^<>v^>>vvv>v>v>^v^v<<^^vv><>^v>^v^>>^^v<>v>v<^^^<<vvv^vv><>^<>><<^^>^v<^vv<<<<>>><>^><vvv>>>v^v>><>>^<>v><>v<<<<^^v<^>v<<<^^^>^>v<^v^<<^<<>>>v<^vv><>>^>>>v^^vv^<>>^^^v^<>><>^vvv^v>^^v>^^<^^v<<^>^><>^v>vvv>>>>^^^><<<>><>v^vv^^^^<>v<^^v^v>>>^^><><>>>>^v^>^v^v^vvvv>^^^<^><>^^v>>><^<^^vv>>^^^v^v><>vv><<>^v^>>^v>>><^vv^>>>>vvv^^vvvvvv<^vvvv<v^<<^vv^<^>v^>>v^>>v^^<^vv>>>^vv^>>>v^v<>^^>^>v<>vv<<<<^<<<>^^v^v^^<><^<>v>^v>vv^><<^>><^<^^<^>>>>vvv<^>vv>^>v<>><<^>^vvv^>>v<><^>v^v<^<>>><^^^vv^<<<^^^<>^^>v>^v><>^<<<^^^^<<><^^v>><<<^<^ +vv>>^vv^^<^vv<^v>^<>^^^vvv>^<>^<<<<^^>^^>>v<^>>v<^vv^^^<^<<^^<>^<^^<^>>^<^><>>>vv>^>v^^>v><^<^>>>v<^^>>^v^^<<>>vvv>v<<<<>v><>^^vvv<<>><>>^v<^>>^v>>>>v>v<>>^<>><>>v<<>v<^>^^v^^vv<<^<<<><^<>>v^^^v><<^<^<^^>v<<><<^>>v>^v^<<<^vv>>>^^^vv<<<>^>><>v><<<>>v>^vvv<v>><<>^v<^><<^v<<^v^>>>v<^<^>^^><>>v>^^^>vv>vvvv<>v^>^^vv^<>>vvv>^<>v<>vv^v>v^^>>>>^^v>>v>^^<>^>^v^v^v<>v>^v^v^>^<>>vv><><>>>vv>^^vvv>v<v<>v<<<<^vv>v^^>>v<^>>v^>^<>>v<<^<>v^^^v^>>>^^<>^<<<>>^<<^v<>^<<>>^v^^v<<<^^^>vv>^<>v><>>v<^^<<^^><<^^>v<>v>^<<v^^>>v^v>vv<>><<>^^^^>>^vv<>>>vvv^<><<>^^<^>^^><^^v^v^^>v^v^<<^v>>vv><>v>>vvv^v<^>>^^<>vv>^>vv^v^<^^vv>^>>>^>vvvv<^v><>>>v<^<^v^>>v^>v^^^vv^v>v<^v>^^>>>v>vv^v<^^>^<>v^v^v^^vv^<<> +^<^v<^v>^^^>><<<<^v^><^v>v>>^><>v>^<>vv>vv^^>>v<<><>v>vvv^v<>v^^<^v<<^^^^<^>>v<<<^^>v>vv<>^^<^^^>^<^v<<><^>vv><<>^vv><^<^^^^vv>^^<>>v>^v><^v^>vv><<^v>^v<<>v^<>^<^>^>v^>^v<>v>^<<>vv>^^^>^^><>v>><^v^>^v^>>><<^v<>><<^vv<^>>^^>^>v>v^^>v>vvv^>>v>>^<vvv^^v^<>^^^^v>>^v^<^<^^>><^^<><>^v<^>>^>^^<<<><<^>>v>vv^^v^<<<<^^^>v><>>>>>v^v^>>>>>>v^^<<><<^>^<^>^<>v>v>><><>vvv>>v<<>^>^^<^<^v^^>^<<^^<^>^^<<>^><^<^><<v<<>>v^<<>>>^v<>v>>^vv^>v^>^^v<^^<><>v<>>v^^>><<<>><>>>^^<>^^^^^^vvv<<<v^v<^<<^v<>^v>>^v<<<<^<>>vv^vv<^>>>>>^v>v>>^^v^<<><<>v^<><<^<><^><>v^^^>>v><^^^<<<><^<^<<>^^^v^v^>^v><>><^<^^>vv>>v>>><>^<^v^>^>>v<^v><^^v>^<<<>>^vv<^^^<>>><^<^^>^>>>^<>><^<>^>>v>^^<>^v^vv^>><^>v>v^vv><^^<^^^^^^<^v^^>vv>^>>vvv<^>>vv> +<^<^>^>vv>>^><<>^<^>vv<>^^v^^><<<vvvv>vv<^><^^>>^><^v^<^^>v^<>^>>^^^<>v<>>^^vvvv<^<<<>^<>><^^v<<>v<>^>><^>v^^<>^>><>vv>^^<^^vvv^v<^<^v>^^<^>v>^>>>^v>>v^v><>><><<^>^<>>^^v<><^v^<<^^<^v^vvv>>v^^>>v>><^v^>><<^>>><<>^v<^^^<>v<^>>><>v^>>vv<<><^><<<<^v<<v^<^>>v><<^><^<>^^vv>^<<<<<^>^>^^><><^^>><<>^^><<^v>^<<>v<>v<<><<<><>>^<^^v^^^>v<<^^^<<^><^^v<>^vv^<<<^<<v<^^>^><^^<^<^<>vv>vv>^^^^<<<<>v<<><<<^^>^>^>vv>^><^><<^<<^<>>v<^><>^vv<>>>>^>>^<^v^^<>v^v>^<>>>^^^v^<>v<>v><<^v>^<^<<<^^^<^vv^<>v<<>^vvv^v^^^>v>>>v^^<^v^^^>^v^^^>v<^v<<^>><^v^>^v^v<<>>>>>^v^^v<<>v<^v<<>vv^vv^<^><>><<><^v^>v^>^<<>^>^^vv^^<<^>>^>vvvv^<>v>v<^><^^>^v>>v^><>^^^^^^v^>>v<>vv^^^<>^<^^< +>>^v<<<^>v><<^<^<<^^>>v<>^<^<^^^v>v<>v^><>v>^<>vv>><^^<^<>>^vv^vvvv<<^<>><>v>>^><>v^vv<^v^>v^^vv<<>v<<^^>>v^<>^^^><>v^<<>vv^><<>^>>>>^<^<^^>v>><^^v>v^v<><><^^^^><>^^<<>vvvv^^>v^v>v^^>>><<^v>>><<<<><<>v>>v<vv^>>vv^vvvvv^>v^vv>^<><^>^>vv>>^vv^v><^<>>^><^vv^v^<^v<<<^^v<>><^v^>^>>>v<<^v<>>>>vv^>^^vv>^vv<<<>^v^^v>vvv^^^vv<^>^^<<>v>vvv^>^>vv><<>>v>><<>v>v<>^^^^>><<>vv^><<<<^<^vv>>^<^^^<^v>><^vv<>v>>v<><<^<>>vv><><^v<<<^^>>v>^^^^v<<<^^^vvv^^^v>>vv^<^^<>v^>>^^v^vv^><^^>>^>>vv>v<>^^>v>v>v^<>v>><^^vvvv^<<<>v^<<^^>^^^><^vvvv>>v^^>>>v<<<<<>v>>v>^>v^<<><^^>><^<^>^>v<>^>v^^v^<<^^>v><<^>><^v>v>^v^>vv^>vv^><<>^^^>>>v>>^<>v>v<^<<^v^<><>vvv<^<>v>>><<>v<^^^<^><<><>^>>>>^^>><>^^v<^^^<>^^^><>>>v>^>^v^<>v>^>v>v< +^>vv>^<<<<^><<^>^^<^^<^<^v<^><^v>^<^vvvv><><<^^v>^^<^v>>^>><^v^<^^<^vv>v^vvv^^><>>v>>^<^^^<>v^^<^>^>v^<>^<<>>>>^^v^^^<>>>>vv<>>^^v<<><>>v<>^<<^<^v><^>v^^>>vv>^^v><><<^vv^v>v<^^vv^v^^<^<^^vvv^^^^^v^^>^^>^>^>>>^>v^>v<^^<>v^vv^vv<>v^^v>^v<^^^v>><<^>><^>vvv^vv<^>v^^<>^<<^^>vv<^>^>v><<^>^>^v^^>v><>>>^^^^^v^vv<<^<^^v^vvv^vvv>v^<^v^^>v^vv>^v^v>>>v<^>v^v^<<><><^vv>v>>>>^v><>><>v^vvv>v>^>v>>><<><>v^v^>^v^^>>^<<>><^<>>><>v^v<^vvv>^v<<^<>>^><>>^>^v>>vv>>><<<<<>^<<<<^^^^^^^>v<>^>^v<><<^>>><^>^^^^v>>^^>v^>v<^v^v>>v^<><><>>v>^>>>^<<><^^^>^>v>^v<>v^<>>^><^^<<^^^<^>^<<<>>^vv><>^<^^^>^<><^v><<<<^>^>v<>v^>>^^vv^vv>^<><^v<^^<>vv>>^^<^v<<^>^v<^<^>v^^^v^<><^<<^<<>>>^>^>^^vvv>v>^v>^>v<vvv>vv<<^>^^v>^>v^^<>vvv^^^v^^^^>^v^<^>^<^<^><><<>^^^v<>><><>>>>>vv^v^^v>vv^<<^<>^^<>>^<>^vvv^vvvv<<<v<>v>>v<>^<^<^<^v<<>v>^<<>>v^vvv^>^<<<^><><<>><>>^v>vv<<^^^^^vvv^><>v^^^v^^^^vv^^v<<^><^^<^<^vvv>v>>>vvv^v<^><^v^v<<^^<>>><>^^<^<vv^^>v>v^>v^^>v>v>v>^><^<>><><^v^vv>>^<<^<^^>v<>^>>^^vv>>^^vv>^^^^>^>^<>>v<<^^v>^^^v^<>v^><<>>^><^>>vv^<<<^^v>>^^<^v^v<><^<^vv<>v<^>>><^v<<^<^vv<^>>><^>^<^<<^^^^^<^>v<>v^^>^^>^>^v<^^<<^>>^>v>v>>^<^>>vvv^>>^<vv^>v><^v^v>^v>^^>v>^<>vv>^v<^^v><>v<^<>v^>><^><>>><^^vv<^^<<^^<<<<^<><<>v><>>>>>v><>>^^>v><>>^>>>>v<>^<>><>vvv^>>v>^>v^>v><^>><^^v>^<^v^<>^v>v^><^^vv<><>^vv>vv><^<<>v><<<<>><><^^v^vv>>^>>>v>^<<<<^>v^>>v<^>v><^>^>v>^v^v>v>>><^>>vvvvvv<<^>v^v>>^>^vv<>v>^<^^<>^>vv<^v<^^v>^<^^<<<>^>vv>^v^^vv><<>^vv>v^>>v<^<<<^><>v><^><v<><><^v>v^v^<^>>vv^v^v^<^^vv^^v^v^v<^<>>v<<>v<>>>>>>v^>>^v^<^>^>v>^^v<<^<>>>^>><<>>^>vv<>v^><><>^>^<^<^v^^>>v<>vv^>>>>^<><<><><^^<^><><^>v>v>v^vv<^^<^^>><^><<>^^^^>>v>v<><>v<^v>v>v^v>>^<>>>v^^v^>^>>>v^v^>^>>^<><>>^<<>^vv^^>^v<>>^^^vv<^>^^vv^^^<^^>v>^^>>v^>>>>v^><>>>^^<<<^v^v^^<^v><>^^vvvv^<<>^<>>>v^<>^>^<>>>>^<<>^^^>v^<>v><<>>>^v^vvv^v>v>v><^>vv>^>>^v^<^><<>^v^v>>>^^v^<>>^<>v>^><>>^<^v<^<<<^vv^v^<>^>>v>>^<>^v^>vv^^^^v>>^>>vv>>^v<<<^>^^>^vv^<<<^^>>^<><^<<^v<>^^^v^>><<>v^vv<><>^>><>^^v><<^^<^<<<>>v<^>^>>v<^<^<<>^^^^^^^v>>v^^>^><><^v<<<^>>>^^^^>v^>>^>>^><^<>vv>^>v<><^<<>v<<^>vv>^^v>^>^v^>^>^>^^><^>v^>><^<^vv^<<<>^^vv>^<>vv>< +^^>^vvvv>^<<>^^<>>^vv^^^><^<<>v>><^v>v^>^v<^v^>>^<^v^^^>v>^<>>^vv>v<^v><>^v<>^><<>>>v>>v>vvv^v>vv^><<><>vv>>^v^<<^v>><><><>>>><<^^<>>vv<>v^><^>>^^^v<>v>v>^^vv^v<>^>v^<>^<^>><>>><<>v>><>^v^v><>v>>^>><^^<<^v^>^>^<^<>>v<<^^^vv><<<^v>^^vv^^^>>v>v>v<>vv<^<>vv><><>><^>>vv^vv^^^<><>^^<>vv<v^<>>v^^^v><>><>^v^<<^^v>vv<^>>v^vv^^>>><>v^^>^v^^v^<<>>v>^^v<>v>>v^vv^>^<^<^<^vvv>v<^<^<<^<<>^v>>>>^^>v<^v<^>v^<>>v>>><^^<^v<^^^vv>>>>v^^>^>^<><<>v^v>^^vv^>><>>^vv^^<>v>v>>>^v<><>^>^>^<>>v^><<><^^<^><<^vv<>^>>^^^v^^<^<><^v>^<^^v^v<><v^>v^^>vv^<><^<><^<^>v>>v^^vv<^<^>^>>v>^<>>v^>v>^>^^<><>vv<>^<^v^<>^^>v><^<>>vv>v^<>^<^v><<<^^>^v^^>^^^v>^v>v>>^^v<^v^<>>><>v<>vv^>>^vv>v^v^vvv><^><>v^><<<<^v^<^> +^>>^^^vv>>^^<<><<^v>>><^>^v^^v^v<>vv^><^<^^v^>><<^>><>v^v^^vvv<<^^^><^^v<<<^>><^><^^><<>^><>>^v>><>>^><^^^^^vv>v<<><^>>^^vv^>>^vv<^vv^^>vv<^>^^v><><<>v>>>^v>^vv>>>v^<>>>vv^<^v>v>v><>vv^>>>^v<>v^v^^>v<><<>><>^v^vv^<^<^>^>><>^<>^^<>v<>>><vv^>v<^<><^<><^>>^v^><^vvvv^<>^vv<><<^^^v^<>^vv>v^v>v>^^<<^^>^vv<<<><^v^^>^<<><<^<^>^<^<>^^>><^^vvv>><<^<^^^^<^<^^<>v^>v^^v><<^><^^^^<>^><>v>^v^vv^^>>^^>>v^<<<^vv^>vvv^^^^>v<<>>><^v<><v^v^^^v^<>>v^v>^>><^^<>><<^^>>v^^<^>>^>vv^^v<^<<<^^^v>^>>^><^^vvv^^>>>^v^v>>v^>><^v^v^><>v><>v>vv^>>><^<^vv<><<^<<><<^^^^>v<^>v^>>vvv>v>^<^v>^vv<<^<^v<>v<>^^<>>^><<>^^v^<><^v>^>^>>>^^<^^>vvvv^vv<>^>v^v>>vvv>>v<<>^vv^vv><>^^<<^<<<<<<<>^^<>v<<<^<<<<<<><>^>^vvvv<<^>><^^^vv^>v^v<<>^>>^^>v^<<<<<<<^<<>^<>v^v^^v +v^v^<vv^^><>v><^^^^^>>>>>^<^<>^^<^<<>>vv<>>v^>^^><<^^^^>v>>><<><>v^^v>^vv<>>v^><v<>>>>v<^vv<>>>v>^<^>^>>^>^^><>^^^v<^v^v><^<>v^<>>^<<^<>>^^vv^v^<<<^>v<<<<^^>>v><<<>vv^<^>^^<>>v<^^v<<^>^^v^^>><^vv<><<>>^^<>>vv^^^<>>^v>v^v^v^>^v<><>^vvv>><<^>v^^<<^v<v^<^>>vv>v^vvv^^>^<<<><^><<v^v>v>><^>^><>^v<^^>>v<^vv^^v^^vv>^><>^^><>vv>>^v>>>>v>><>v^v^^<^>v<^>>^>vvvv>^^><^^^><><^vv<^<^vv^^<vv^^>v><><^>^<^vvvv<^<>><><>v<^>><<^<<^v>v><><<><^><>v^v^v>^v>>^^vv<>>><><>v^v>^^<^^^>vvv<^^>>v^>>v^^v<><<^v>><^>>^v^><>^>v><^><<^v^^v>^><>>>vvv<^<<<<^^vv><<>vv^v>v<>vv>v^^v<^>>vvv>^>>v><^v^<^<><<^><>^v^v^v<^<>^>v^v^<>>>>v<<>^^>>^^vv<>vvvv^<<<^^vv>>v>v<^v^v>v^^v<>v>v>v<^<>^>^>>^>^<<vv^<> +>^vv^>^v^<<^><^>>^^<<^<^<<>>^<^^v><^v>>^>^^<<^^v^vv^^<^>v>v^<^^<>^^^>>v>><^<>^<^v^>vv>v^^v^^>^^<>^>^>^<^><^><>^^><<<<>v^vv^v<>v>v^<^>^<<>>>^>^^<^<^v>>vv>^vv>>vvv>^^<>vv>v><>^<>v>^^>^v^^vv^^v>>^<>>^^<>vv^<>v><^>^<v>^v^<v>>^v><<^>^^<<><<<^^v^<>>vv<>v^v^>v<vv><>v<^^^<>>v>v<^v>>>v><<>>>vv><>^<^>>>v^><^^>>^>v<<>>^^<><^vv><^vvv<^<v>^v<>^>^><<>v>vv><>v^>^<>v^vv<<>^^^v>v^>>^<>^>v^^^^>^^>^<^v^^v^v^<^v^><>^v<^^^>^><<^^^^v>v>>>v^>v<>v<v>>>^>>>^<>>>>v^>vv<<>^><^v^v><v<<><>v^vv>^>>^^><^^v^vvvv<<^>v<>vvv^<><<<<>vv^^>>><>v>v<^^v^^v<<<<^>^v>>>^vv>^v<<^>vv<^v>>^<>>><>^^<>^v^>vvv^v^^v^<^^v<^>v^^<>^<^>^v^^>><>v>^^^><<v>^v^vv>vv<<>^^<^>>^<<>><>^v^<<<<^^^<^v<^^vv> \ No newline at end of file diff --git a/2024/day15/main.py b/2024/day15/main.py new file mode 100644 index 0000000..39243c2 --- /dev/null +++ b/2024/day15/main.py @@ -0,0 +1,342 @@ +ROBOT_SPEED: int = 1 + +class Coord: + x: int + y: int + + def __init__(self, x: int, y: int): + self.x = x + self.y = y + + def __str__(self) -> str: + return f'({self.x}, {self.y})' + + def __eq__(self, other) -> bool: + return other.x == self.x and other.y == self.y + + def __add__(self, other): + return Coord(self.x + other.x, self.y + other.y) + + def __sub__(self, other): + return Coord(self.x - other.x, self.y - other.y) + + def __mul__(self, other): + return Coord(self.x * other, self.y * other) + + def __rmul__(self, other): + return Coord(self.x * other, self.y * other) + + def copy(self): + return Coord(self.x, self.y) + +class Warehouse: + robot: Coord + walls: list[Coord] = [] + boxes: list[Coord] = [] + width: int + height: int + + def __init__(self, warehouse_map: list[str]): + for y, line in enumerate(warehouse_map): + for x, c in enumerate(line): + match c: + case "#": + self.walls.append(Coord(x, y)) + case "@": + self.robot = Coord(x, y) + case "O": + self.boxes.append(Coord(x, y)) + + self.width = len(warehouse_map[0]) + self.height = len(warehouse_map) + + def __str__(self) -> str: + w = [['.'] * self.width for _ in range(self.height)] + + for box in self.boxes: + w[box.y][box.x] = 'O' + + for wall in self.walls: + w[wall.y][wall.x] = '#' + + w[self.robot.y][self.robot.x] = '@' + + s = '' + for row in w: + for c in row: + s += c + s += '\n' + + return s + + def move_robot(self, command: str) -> None: + + dx, dy = 0, 0 + match command: + case '>': + dx += 1 + case '<': + dx -= 1 + case 'v': + dy += 1 + case '^': + dy -= 1 + + movement = Coord(dx, dy) + + new_pos = self.robot + movement + + if new_pos in self.walls: + return None + + if new_pos in self.boxes: + if self.push_box(new_pos, movement): + self.robot = new_pos + return None + + self.robot = new_pos + + def push_box(self, box: Coord, movement: Coord) -> bool: + new_pos: Coord = box + movement + + if new_pos in self.walls: + return False + + if new_pos in self.boxes: + if not self.push_box(new_pos, movement): + return False + + self.boxes.remove(box) + self.boxes.append(new_pos) + return True + + def score(self) -> int: + total = 0 + for box in self.boxes: + total += 100 * box.y + box.x + + return total + +class BigBox: + right: Coord + left: Coord + + def __init__(self, left: Coord): + self.left = left + self.right = Coord(left.x + 1, left.y) + + def __add__(self, other: Coord): + return BigBox(self.left + other) + + def __eq__(self, other) -> bool: + return self.left == other.left and self.right == other.right + + def __str__(self) -> str: + return '[]' + +class SecondWarehouse: + robot: Coord + walls: list[Coord] = [] + boxes: list[BigBox] = [] + width: int + height: int + + def __init__(self, warehouse_map: list[str]): + for y, line in enumerate(warehouse_map): + offset = 0 + for x, c in enumerate(line): + match c: + case "#": + self.walls.append(Coord(x + offset, y)) + self.walls.append(Coord(x + 1 + offset, y)) + case "@": + self.robot = Coord(x + offset, y) + case "O": + self.boxes.append(BigBox(Coord(x + offset, y))) + + offset += 1 + + self.width = len(warehouse_map[0]) * 2 + self.height = len(warehouse_map) + + def __str__(self) -> str: + w = [['.'] * self.width for _ in range(self.height)] + + for box in self.boxes: + w[box.left.y][box.left.x] = '[' + w[box.right.y][box.right.x] = ']' + + for wall in self.walls: + w[wall.y][wall.x] = '#' + + w[self.robot.y][self.robot.x] = '@' + + s = '' + for row in w: + for c in row: + s += c + s += '\n' + + return s + + def move_robot(self, command: str) -> None: + + dx, dy = 0, 0 + match command: + case '>': + dx += 1 + case '<': + dx -= 1 + case 'v': + dy += 1 + case '^': + dy -= 1 + + movement = Coord(dx, dy) + + new_pos = self.robot + movement + + if new_pos in self.walls: + return + + if box := self.is_box(new_pos): + if self.push_box(box, movement): + self.robot = new_pos + return + + self.robot = new_pos + + def is_box(self, pos: Coord) -> BigBox | None: + for box in self.boxes: + if pos == box.left or pos == box.right: + return box + + return None + + def push_box(self, box: BigBox, movement: Coord) -> bool: + new_box: BigBox = box + movement + + + + + # def push_box(self, box: Coord, movement: Coord) -> bool: + + # if movement.y != 0: + # return self.vertical_push(box, movement) + + # new_pos: Coord = box + movement + # new_pos2 = new_pos.copy() + # if movement.x > 0: + # new_pos2.x += 1 + # else: + # new_pos.x -= 1 + + # if new_pos in self.walls: + # return False + + # if new_pos2 in self.boxes: + # if not self.push_box(new_pos2, movement): + # return False + + # self.boxes.remove(box) + # self.boxes.append(new_pos) + + # return True + + def vertical_push(self, box: Coord, movement: Coord) -> bool: + pass + new_pos: Coord = box + movement + + # other_new_pos: Coord = new_pos + # if box in self.left_boxes: + # other_new_pos.x += 1 + # else: + # other_new_pos.x -= 1 + + # if new_pos in self.walls or other_new_pos in self.walls: + # return False + + # if new_pos in self.left_boxes or new_pos in self.right_boxes: + # if not self.vertical_push(new_pos, movement): + # return False + + # if other_new_pos in self.left_boxes or other_new_pos in self.right_boxes: + # if not self.vertical_push(other_new_pos, movement): + # return False + + # if box in self.left_boxes: + # self.left_boxes.remove(box) + # self.left_boxes.append(new_pos) + + # self.right_boxes.remove(Coord(box.x + 1, box.y)) + # self.right_boxes.append(other_new_pos) + + # else: + # self.right_boxes.remove(box) + # self.right_boxes.append(new_pos) + + # self.left_boxes.remove(Coord(box.x - 1, box.y)) + # self.left_boxes.append(other_new_pos) + + # return True + + # def can_push(self, box: Coord, movement: Coord) -> bool: + # new_pos: Coord = box + movement + + # if new_pos in self.right_boxes or new_pos in self.left_boxes: + # return self.can_push(new_pos, movement) + + # return new_pos in self.walls + + # def score(self) -> int: + # total = 0 + # for box in self.left_boxes: + # total += 100 * box.y + box.x + + # return total + + +def main() -> None: + + with open('test.txt', 'r') as file: + data: str = file.read() + + warehouse_map, movements = [s.split("\n") for s in data.split("\n\n")] + movements = ''.join(movements) + + # Part 1 + print('<', '=' * 25, ' PART 1 ', '=' * 25, '>') + + warehouse = Warehouse(warehouse_map) + + print(warehouse) + + for command in movements: + warehouse.move_robot(command) + print(warehouse) + print('Score: ', warehouse.score()) + + # Part 2 + print('<', '=' * 25, ' PART 2 ', '=' * 25, '>') + + warehouse = SecondWarehouse(warehouse_map) + + print(warehouse) + + # for command in movements: + # warehouse.move_robot(command) + # print('Movement: ', command) + # print(warehouse) + # input() + + + +if __name__ == '__main__': + main() + + + + + + + diff --git a/2024/day15/test.txt b/2024/day15/test.txt new file mode 100644 index 0000000..dfe6a69 --- /dev/null +++ b/2024/day15/test.txt @@ -0,0 +1,9 @@ +####### +#...#.# +#.....# +#..OO@# +#..O..# +#.....# +####### + + str: + return f'({self.x}, {self.y})' + + def __eq__(self, other) -> bool: + return other.x == self.x and other.y == self.y + + def __add__(self, other): + return Coord(self.x + other.x, self.y + other.y) + + def __sub__(self, other): + return Coord(self.x - other.x, self.y - other.y) + + def __mul__(self, other): + return Coord(self.x * other, self.y * other) + + def __rmul__(self, other): + return Coord(self.x * other, self.y * other) + + def copy(self): + return Coord(self.x, self.y) + +UP = Coord(1, 0) +DOWN = Coord(-1, 0) +EAST = Coord(0, 1) +WEST = Coord(0, -1) + +class Maze: + map: list[str] + start: Coord + end: Coord + + def __init__(self, file_path: str): + with open(file_path, 'r') as file: + self.map = file.readlines() + + for y, row in enumerate(self.map): + for x, char in enumerate(row): + if char == 'E': + self.end = Coord(x, y) + elif char == 'S': + self.start = Coord(x, y) + + def get_pos(self, pos: Coord) -> str: + return self.map[pos.y][pos.x] + + def is_wall(self, pos: Coord) -> bool: + return self.get_pos(pos) == '#' + + def is_end(self, pos: Coord) -> bool: + return self.end == pos + + def lowest_score(self, pos: Coord, score: int | None = 0, dir: Coord | None = None, facing: Coord | None = EAST) -> int: + print(pos) + if self.is_end(pos): + return score + + if self.is_wall(pos): + return float('inf') + + if dir: + if dir != facing: + score += 1000 + facing = dir + + score += 1 + pos += facing + + + return min([self.lowest_score(pos, score, dir, facing) for dir in [UP, DOWN, EAST, WEST]]) + + +def main(): + maze = Maze('test.text') + print(maze.lowest_score(maze.start)) + + + + + + + +if __name__ == '__main__': + main() diff --git a/2024/day16/test.text b/2024/day16/test.text new file mode 100644 index 0000000..6a5bb85 --- /dev/null +++ b/2024/day16/test.text @@ -0,0 +1,15 @@ +############### +#.......#....E# +#.#.###.#.###.# +#.....#.#...#.# +#.###.#####.#.# +#.#.#.......#.# +#.#.#####.###.# +#...........#.# +###.#.#####.#.# +#...#.....#.#.# +#.#.#.###.#.#.# +#.....#...#.#.# +#.###.#.#.#.#.# +#S..#.....#...# +############### \ No newline at end of file diff --git a/2024/day17/input.txt b/2024/day17/input.txt new file mode 100644 index 0000000..adfaba2 --- /dev/null +++ b/2024/day17/input.txt @@ -0,0 +1,5 @@ +Register A: 62769524 +Register B: 0 +Register C: 0 + +Program: 2,4,1,7,7,5,0,3,4,0,1,7,5,5,3,0 \ No newline at end of file diff --git a/2024/day17/main.py b/2024/day17/main.py new file mode 100644 index 0000000..495eb37 --- /dev/null +++ b/2024/day17/main.py @@ -0,0 +1,167 @@ +import logging + +logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') + + +class Machine: + register_a: int + register_b: int + register_c: int + + ic: int = 0 # Instruction Counter + + program: list[int] = [] + + def __init__(self, program: str): + self.register_a = 0 + self.register_b = 0 + self.register_c = 0 + + self.program = [int(x) for x in program.split(',')] + + def interpret_combo_operand(self, operand: int) -> int: + match operand: + case operand if operand in range(0, 4): + return operand + case 4: + return self.register_a + case 5: + return self.register_b + case 6: + return self.register_c + + def adv(self, operand: int) -> None: + operand = self.interpret_combo_operand(operand) + self.ic += 2 + self.register_a = int(self.register_a / (2 ** operand)) + + def bxl(self, operand: int) -> None: + self.ic += 2 + self.register_b = self.register_b ^ operand + + def bst(self, operand: int) -> None: + operand = self.interpret_combo_operand(operand) + self.ic += 2 + self.register_b = operand % 8 + + def jnz(self, operand: int) -> None: + if self.register_a == 0: + self.ic += 2 + return + self.ic = operand + + def bxc(self, operand: int) -> None: + self.ic += 2 + self.register_b = self.register_b ^ self.register_c + + def out(self, operand: int) -> int: + operand = self.interpret_combo_operand(operand) + self.ic += 2 + return operand % 8 + + def bdv(self, operand: int) -> None: + operand = self.interpret_combo_operand(operand) + self.ic += 2 + self.register_b = int(self.register_a / (2 ** operand)) + + def cdv(self, operand: int) -> None: + operand = self.interpret_combo_operand(operand) + self.ic += 2 + self.register_c = int(self.register_a / (2 ** operand)) + + def run(self) -> str: + output = [] + while self.ic < len(self.program): + + opcode = self.program[self.ic] + operand = self.program[self.ic + 1] + logging.debug(f"IC: {self.ic}, A: {self.register_a}, B: {self.register_b}, C: {self.register_c}, Opcode: {opcode}, Operand: {operand}") + + opcode_out: None | int = None + match opcode: + case 0: + opcode_out = self.adv(operand) + case 1: + opcode_out = self.bxl(operand) + case 2: + opcode_out = self.bst(operand) + case 3: + self.jnz(operand) + case 4: + opcode_out = self.bxc(operand) + case 5: + opcode_out = self.out(operand) + case 6: + self.bdv(operand) + case 7: + self.cdv(operand) + + if opcode_out is not None: + output.append(opcode_out) + + return ','.join([str(x) for x in output]) + +def part1(): + INPUT_FILE = "input.txt" + + with open(INPUT_FILE, 'r') as file: + data = file.readlines() + + reg_a = int(data[0].split(':')[1].strip()) + reg_b = int(data[1].split(':')[1].strip()) + reg_c = int(data[2].split(':')[1].strip()) + + program = data[4].split(':')[1].strip() + + machine = Machine(program) + machine.register_a = reg_a + machine.register_b = reg_b + machine.register_c = reg_c + + print(f'Output: {machine.run()}') + logging.debug(f'Final Registers: A={machine.register_a}, B={machine.register_b}, C={machine.register_c}') + +def part2(): + INPUT_FILE = "input.txt" + + with open(INPUT_FILE, 'r') as file: + data = file.readlines() + + reg_b = int(data[1].split(':')[1].strip()) + reg_c = int(data[2].split(':')[1].strip()) + + program = data[4].split(':')[1].strip() + + program_len: int = len(program.split(',')) + + reg_a = 8 ** program_len - 1 + + # machine = Machine(program) + # machine.register_a = reg_a + # machine.register_b = reg_b + # machine.register_c = reg_c + + # print(machine.run()) + # print(program) + + # exit() + + # Naive solution but it works (in time) + while True: + logging.info(f'Testing Reg A: {reg_a}') + machine = Machine(program) + machine.register_a = reg_a + machine.register_b = reg_b + machine.register_c = reg_c + + output = machine.run() + logging.info(f'Output: {output}') + + if output == program: + print(f'Correct Reg A: {reg_a}') + break + + reg_a += 1 + +if __name__ == "__main__": + part2() diff --git a/2024/day17/test.txt b/2024/day17/test.txt new file mode 100644 index 0000000..36fbf8d --- /dev/null +++ b/2024/day17/test.txt @@ -0,0 +1,5 @@ +Register A: 729 +Register B: 0 +Register C: 0 + +Program: 0,1,5,4,3,0 \ No newline at end of file diff --git a/2024/day17/tests/p1.txt b/2024/day17/tests/p1.txt new file mode 100644 index 0000000..320b9e0 --- /dev/null +++ b/2024/day17/tests/p1.txt @@ -0,0 +1,5 @@ +Register A: 0 +Register B: 0 +Register C: 9 + +Program: 2,6 \ No newline at end of file diff --git a/2024/day17/tests/p2.txt b/2024/day17/tests/p2.txt new file mode 100644 index 0000000..a5b54a3 --- /dev/null +++ b/2024/day17/tests/p2.txt @@ -0,0 +1,5 @@ +Register A: 10 +Register B: 0 +Register C: 0 + +Program: 5,0,5,1,5,4 \ No newline at end of file diff --git a/2024/day17/tests/p3.txt b/2024/day17/tests/p3.txt new file mode 100644 index 0000000..0270ece --- /dev/null +++ b/2024/day17/tests/p3.txt @@ -0,0 +1,5 @@ +Register A: 2024 +Register B: 0 +Register C: 0 + +Program: 0,1,5,4,3,0 \ No newline at end of file diff --git a/2024/day17/tests/p4.txt b/2024/day17/tests/p4.txt new file mode 100644 index 0000000..1829ed9 --- /dev/null +++ b/2024/day17/tests/p4.txt @@ -0,0 +1,5 @@ +Register A: 0 +Register B: 29 +Register C: 0 + +Program: 1,7 \ No newline at end of file diff --git a/2024/day17/tests/p5.txt b/2024/day17/tests/p5.txt new file mode 100644 index 0000000..b8e011d --- /dev/null +++ b/2024/day17/tests/p5.txt @@ -0,0 +1,5 @@ +Register A: 0 +Register B: 2024 +Register C: 43690 + +Program: 4,0 \ No newline at end of file diff --git a/2024/day17/tests/test2.txt b/2024/day17/tests/test2.txt new file mode 100644 index 0000000..2ed9dda --- /dev/null +++ b/2024/day17/tests/test2.txt @@ -0,0 +1,5 @@ +Register A: 2024 +Register B: 0 +Register C: 0 + +Program: 0,3,5,4,3,0 \ No newline at end of file diff --git a/2024/day19/input.txt b/2024/day19/input.txt new file mode 100644 index 0000000..a5ccebc --- /dev/null +++ b/2024/day19/input.txt @@ -0,0 +1,402 @@ +grbb, burb, wrwbrwg, uwwb, bwbbw, ubgrbu, gguu, uru, gwr, wrw, gubwb, g, gwbu, rbw, bbuu, rwgbr, urrr, rwww, wrrb, ug, rubbwuuu, gbrbr, brb, wrubb, gwrgbbgu, wggwbrww, rwwb, br, buuwr, rgrbb, wgubb, gbb, gbrb, rubw, ubr, guu, wrugbg, gubwru, bww, rbu, burr, ugu, bbggguw, bguw, ubu, uuuw, uugww, urugr, uwgur, gugrgggw, b, gugu, wgb, rwgwuu, guw, brg, ubur, wbwwb, ggbg, wr, urw, wur, brwgrw, uuur, rwwg, rrbrbggw, gwrurwg, rurru, r, bug, ruwrww, brgwu, bwgurbu, rwuu, guub, rrbwb, rbgwbr, grbrugbu, bwugwugb, guwww, ugwggg, buggrug, urb, bbbwuur, ururgur, wu, bbbru, ruuw, grr, buw, bub, gbwwug, rwrbw, wrbg, wubr, u, wgrb, wbuub, ugrugwg, wggbrr, gr, uur, ugb, wbg, uub, bbbrww, uwbr, buwguww, wbwgw, ubuuwr, wuuwgr, wggw, gwurgub, rwwu, bruwg, bgbrbwb, rbgg, rbg, bubggwu, gubgrur, gwb, rgu, wrr, uug, bgw, ruuugu, uwbg, rgurgwwb, wrwgb, brbbr, wgrgu, brgbwb, gub, uugw, wrrbb, wwruuru, grrw, urgg, gbwg, ubbur, bggwwgw, ubggw, uwgw, ruu, wwuu, bwuu, uggw, gwu, urg, rwbb, uwwub, ruug, bwbbu, wbb, bwwwu, rbwrruu, gg, ugrbbwgb, wbbwwr, bbwrrrb, rgwwu, bbr, wbuwb, grub, ubwwgu, ubb, brrbuu, grw, bwugg, wurbu, uwrb, rwgg, rurbuu, gbrug, brwgr, gru, bgrub, uuwr, gbwww, bbrw, rbr, bwrg, ruur, gbbgr, brgwug, ugg, bwgubu, rrg, ub, gbuwu, ubuwuw, ggw, wrgww, uuwb, bwr, bb, ruwu, bwugrw, buu, wug, gggwbwu, brurg, rrur, gb, wg, ggruwbu, gbg, bruur, gug, rgr, gwuuu, uwwurr, ubw, uugbuw, ruugwu, bu, ubrbw, ggu, rug, wgurwurr, ugrrbr, brgrb, rrbrgwww, rrgg, grb, brbw, bruwgw, uwbw, rgg, wrg, rrruwr, gguw, bugbbrw, bbg, rwg, wbuwg, uuu, wruwur, ugwb, bur, urgb, bg, uwubrwu, rwbwwg, rub, wwwwbw, rbbugbr, wgg, bwbb, brw, ggugb, guggw, bgg, wwr, gwrbb, rbb, bgb, brrubwb, wwu, bggrrwu, bugb, gwugw, grg, wrb, wuub, bru, gggrr, wuw, uwg, gbgurg, wguwug, gbwgw, bgrb, wguuw, rwr, ubuww, wruuw, wurur, wuu, bbw, brbgubb, bubg, wgw, wwuwrw, bbwu, bbrgubw, uwu, bw, wbr, bbu, bgr, ubg, rwrgg, uggu, wugggb, wwbgguur, wrwuwb, rgrr, wgbu, ggb, ubuw, rgugg, gwuru, guuubbw, bgbrrw, rrgwg, gbw, wbu, wuwg, gugb, uww, ruugb, rubu, ugwbw, bbrgrg, grbrr, guwgruwr, wwbr, wgruw, grwg, wgr, ururwr, gbbg, gbuub, uwr, grwgrwr, ruw, wru, ggr, guwuu, uwuuwu, gbu, rwbbgg, ruruww, wwwur, rgrug, rbbwg, rgwugwg, wbw, bbru, ggg, bbuugrrg, uugb, rw, gburwww, rububugg, gguubbg, rrrurwwg, buruwrb, bbwrggwb, gbrbwr, uruwwu, wwwurbu, rrwb, bbb, bwg, wurggubb, wgu, gwwg, wururruu, bbbu, ur, rwb, uwww, wgwr, rr, rru, uuw, uu, bwgw, brr, wub, bwgbrrw, gwrgrw, uw, ggguwbg, bubbur, ubbggu, ugr, rrrw, ru, rb, gwwbgw, rrr, rrw, gruw, rwrrbb, rugr, uubw, ruwb, uubbbu, gur, wb, rrrrwww, bbub, bgurwg, ubbugw, gwbw, gggbru, ugru, brru, ggwg, wwg, ugubr, urggbu, ggwuww, gbr, guwubu, rwu, gwg, rrbur, gwrg, wwubr, uwb, gbrr, rurburb, brrg, ggur, rurbw, uwbu, grbbu, wgur, urr, rgggg, rrb, ww, rww, bwwwr, wubwubgw, ggubw, wwb, uurb, wbrggwu, ugw, rggwwr, urwu, gwwggg, uwuubwr, gwuubww, uwbwu, www, gwgwr, bwu, gu, rur, wwwg, uwruub + +rrwuwuurrrguggbrrrrgwwururguggwuwrwwurwuuwbw +wrrugrgbuuuurgubbbbbggrrwgrbgggbwuwwbuubwrbgwwgbww +uurwwrgbuuburbgbrrgugrgwugbwrwguruugwwgguwugrgwggrur +rgruurwubbgggwwuwwgurrwuugggbrbuwgwrubrgw +gugwbgbwbbgurrbrurwbwwgwwgbrgwuwruubwuwuggrrrgbgb +urwguwuggwbbwgbrbbgubwbggwggwgrbrrruguruggbgruwb +grwbubrugwuuubgbgburrgbuuuwruruuugrwgrrbwwrgbwrbwrugubgu +wwrbruwrgbgubuurwrgbubbwwgbwurwrrbwwurrgugggrbwurrrb +bwugbgrugbuwbuurrgurwbrggrggrbrgurgwwbbgrrbgbubrgrrbwgrbwu +grggrbwrwbuwrgwrbggwrrggugugggrwbwwrguuuuwgrrgbgwuurug +gbugrrruubgbgwrggbwgrwwubrrbubrgbbgubbbuurwbb +bgrrbbrwbrguurggwrrrgrrgwururbggururgwwgrwgbuugbg +uwwubbuwgwuggrruuuwbgwrrgwrbbrgggubwugubuuubwwbbwuwru +ruwgguggbgbbwwrbbrubrrruugbwwgrguwubwgbbgburu +wrbubwugwgurrrrrbwwwuubbubgrbbgwrurrrrbugggw +rbwbbrbrrwbugurbbbrubbgbbgbuwbrbbwrggwbrwbguguubggwgbruww +gggwrrgubuurrrrrurwubgwgbuuggrrwrurbbgugruruwrrgurugu +gurrbwbrbubguwbbrgwggruwuwrrrwwrggggrwuwubgubugwwgbgwrwgurgw +grbgrgguwrwrububbrburbgrubuwrwwbbwwgbbuwwwbubgrbgbr +ubbuwuguwbwwbubbbbburbuububwrwwbwgubrubuwwwuwrrwrwwggubggg +buwrgrrbuuwbbrgggbbwuruugbwwgwggwwgrrbbggrbuwuu +gguguwbwrrggguurrrwuwbrwwwwrruwuwguuggrrrbgwwgrbbbrgrbrgb +bgbugwgwwgwwwgrbwuwugwbgbururwugwuwwurwwbuubrw +gwggguurbubwbgwgrwwrgrubuurrrugrbbuugrrgbuurggbgwbwwwur +gwruwwbrwwgwrbgbguwwugrwruwrgubwbbwbbugrwbgguwurguwu +gwbruubwwrbbbbbgruwgwgwgbrwgururrrwugwgrubbggbuwuwwbb +buuuwwguwbwgwbbuwgubbrggwgggburwbgbwwrbuguwgwbwugrggr +ubwrubuwgbgbwgggwrwgrwrrggrgbgrbbuwwggbwgbwbbgurbrguguwrrgw +wrrubggwruurbbbrgbwguwbwgggbrrwrwgubwuguwbrgw +rgbwwuurgwbwrrwwgruurbruubwurggugbuubgrrrwbgrggrggrgwbr +grurgwbgbggbwbwwuuubugbuuugbbwrwuugbbubbuw +ubggwwbgwwrruuwwuwbrrbbwugwruurrugrbbwgbwwwgbwbwbwbubbrr +wgbwubuugwrrgwrwbbwwgrrgwuggrubgrrubwrubrwuurgruwwwgrwr +uggwguwruuwugbwbuwwgwugwrbbwrubrburgrgbuuburw +grbbrgbwbbubwrwrurgugbggrwbuugbubbgugbwrgrwwgbbbguuwg +rwurubwguwuububwrurwgrrwuubbubrwwbrgugrbgubu +grrbrgrbbuguwgrwugurrbbwrggwbguguugrurgw +gurrwrwgruubrubgrgbrwbrgwwrbrgbugrbwgwgbbgw +wubrubbuwrubrrrrwgbgugbrrbrgwbwgrwbuugugbgrbuur +bbrgbbgrbrbwgruwrgwgrgugrrwgruwwgwwbwwwguurbuwbwruwbubr +wugrwrggbwbwrbwrwbbggrgburuggwurbubruugbwgruwbrguwb +buwrbwruwrbgrrruugbruugrrwbgrwgwugrbwgbrwwuuwbwgurgw +wwggrrwwbgrbwguwwuwwurbgwburwggrwugwguubugwgugggbwb +ubwrguuwrgbgugurgguuwwggbuuubwgwwrwuguubgwbwgrwuwwb +rgurubgwubguggbgguwwwwwuuwugrwgubrrurgubrrgw +uggggbwwgbbrbwururggrwugggurgugubrbrgrurbgb +rwrrgbbbbrwggbrgguwubrgwwuugugwwwbuburugubguwguubuguwrrug +rggguuwuuburuwubgbuwwrububgwrrbwwrubbrgw +ggrbrbbrgrwuggwubrbbwwbgruubrbgggguuggrgw +rwgwubgrruggwruurwwuubgbrwggwbrwwbggbrgw +gbrrrggwbrrbwwuugwgbugrrgggwubgruwburburrbbrggwbbgww +wruwbbuwubbwwrrubbbrurwrbggwwgguurrruwubruuwwuwubgbwug +rbuwguwbugbrrrrbubbwubgwuwbuwwrwuugbubrggrbrwrwwbrwbrgrwbb +gwbuububgrwuuwbwbwbguwggubgrgubgwrrrbwgrrwwwbugb +wwrbugruuwrgwubgbwrwugwwrgrrubggubuwurwgurwubruu +ubgwwuburrwrgrbgurbgubgwwwbwurgbbbwwrgwrbgguguwbbuug +wwwburwwguwrbugwgwwrbwbruugbggburrgrbruwggrrgw +wubuwruubgwubrwwbrrrgwruwgbuugburrbgurbwrruugwbgrwu +brugwggbbgbbgggwbwuuwbuuggwrbuguurwubrggbrggbw +uuurbrwbbbbwggwbrruggwbwwurbbbbubbwwuwuurrgruububwrgrrwubb +gbwugbgbrurrbrggguwuwrgburwbwbuwuurwubwbwguugurrwrgguwgubg +bwrrrrbgwuubggbrbguuuuwwbwbgggbwbguuwbrgwggbuug +rrwwwubwurguurrggbbgrbrrbbrrbrrwurwwgrrbugugbb +wwbwrurrwrgbgggguruurwbrwbbrbwubwubgwgruruuuwrubbgwwrgw +wuburburbbrbbwrugbbrbbbuwbrwrbuwgugrugbgwrrgrwguggbg +gugrggwurbuuwgrwguwbrwubrbrwuwugbuwgbwbwrwrrwwrgbuurg +wwbwbwrwrruuwbbrrggbugwbrwbbbubugbrwruuwbg +urbwgrrgbbgbrgwbwwrrrbrgubrwrrwrwwgurgubuguwwuurgw +gwwrwbuurrbgbwwbwwwurburrgrwggwrrwwwrbbrwgrrgw +rwruurbbbwrbrgrwbbuwrwbbuurrgurrrwggbubwwwguwgbwgggruuugrr +uwbbuwbggbrrbwrrrrgbrbwwgbbruguwubwbwuwuggb +uburbbwbruuwugwrgwwuwrbrrrbgrbwrwrurrbubrgugurgbrgbgb +wbuwrwwruwguggbwrwwrbburgguwgruubuwgurugbgugbubbgbrrguwbg +rbguwgburgwgrwubggbbggwwguwuuuwgbbuwbrbrwrrbgguwr +guwbgwwwgbrrbuwbwbrbbwrbbgbguuwbwrbugbbbgu +rwrbgwggubwbwuubbwruwbgrbgrbuubrurgrwbgbgwbrwbburub +gggwbrugrbbbuwbuwrwgugrugrrrrbwrgbbwwgwwgugggr +wwrrbrwrgugrugwrbuugrrgrbwwrbuggbbruuwrrwrwrugbwbgurrrrr +burwrruurbgggguuwubrrrgubgruwwwrwuggbwbwuwurg +ubbgbbrguwubrwwbrurbuuuguwggruwgrgbbrgbbgbburwrbrguwrgw +rwrgbbrbwwrwggwwbguwrgrrrurgrrgruurbuugbbgb +ggugwrrgwgrrwbwrwgrurggggwurgbgwwurwrrwrrgwubrw +rgbuwbbrrguuwwgbrugruuurbgwuwwuurbugrbrugbuwubbruuggug +rwuwbwrgrwbwugrwubrgbubuwuwbbbwwgggugrbuwrrbbgbwurgw +gubgbwuurgbwbguuubgurggwwrgrwbuwbuugwuugwubwwwwggugr +wbrbrbugwrwrwurrbrruubgbbwwuuuuwwrwwwurruwgwbgugw +wurbrruububbrgwwrwbwurgggrrbrgrwbgbbrwbbrbwbuwugwgubwur +gbwbgbgurwurguwgrgwbwubgggruuuwuuggggbguugbrwgbwburgw +ugbwbbubwrggwuwwubbguurbbrubburuwugwrurbugurbubrgbrrrrr +wrwrrwgwbwrwurggrrbbgrwgbrbguububrwrururrrrrwuwbbgrrbrgg +uuubrrrubwguurguwgruwrbruwugrubuubbrbwbugwrwwbruurwbur +wwwwwbbbggggubguuugbbbbuburrugrbbwubrgbrguuug +wwbgguguugbggrrbwwuwrubgugwuwugbgrwwrggwgwrwurburgbrb +ubrgwbwbwwuwbwggrrrrwwbwgruuurbwrruwwrgburrwurrwrr +uuwrgwbbbrggrrruurwrrrrbrwgbgugbburbuburwrrbubr +gbwubgbggwwbgbwbbwwwwwrwbbwwrgbrgwwwrrbrgwwwr +bbuubrbuwrgrbrgrrbggbuwrugrwubwwwbwbbrwggugurwgbrgbrgbb +bbuwrurgurgrbubuguwrrurwrbggwuwguwugbwbwbbwrbugrw +brrbububggbrgurwurwbwuguwuwrgubwugwrrbugrbrwgwgrgguwg +burgwuurbrgruwbrrwurwuwwgwuubwrgrgwgrguubguggbbuugrrggrgw +rgwrgwurbgguuwrbguwwgwuwubgwguwgbruwrrguuwbbwbr +brrrubwrugrggugrwgbwgugggbuugrwguuwrwwgwuruwwbrg +rggbwgwgugrrbrbwububgrwgubrwbwbubwburbubbw +uubrrwwuugwubguruggugwwrrggrrwwgugrurubrgbwurgrwug +uwrwwbguggwugwwrguuwbrugggugbburgwubruubgugbwgurgw +wbwgugrurrbgbuggwwwrrwwgrgubgbbgbwrrwrrbubuwbr +uwggguggbgwgrgrbbgruwurwggburububrgbwwwguburubrugrruugbwu +wgwgbrwurgwbrrbgwruugurbgwguurbuwubbuubrbuwwwgbuwbb +guwrrbwwgburbgggggrguwuwbbwrbuurrwururgw +rurwbgrwurugrwwwbgrrubrwwwbugurbbwbrgurbgwrwwrgwrwwgwbr +rurwbbwwbubwbrgugwbggbbbguubwrbwbwggwwbguurrub +gbuwbugrrwgwrgbbguugwuwwwubuuwugggrbbbggwrugbubu +bguubggwggrwuruubgubrrrwbwuuggwwbwwuuuurbuugbggrrwbu +uguuwugurrbgbwggwrrgwruwuwrbruruuwwuwrubrruw +rbgwbrbrwbuuwgrgrwwggwrwggrgwgbgrubbgwwuwwrgw +guwuugbwubruguwbbgrbbbwbwbrrurgrbrurrbgbbbwbubr +uubrbuubrruwwggguugrugburwrrrubbbggbbrrbuwrwrurgw +wubbgrruruuwrgubgruwubruggwrwgbwwwggwurggwgrrub +bugbbrbwruuwbrbrguwrbbbgbgwbbbwbbwwwwbwwurruuubururuwwbuw +wrubrrguurwrbwwrwrwugwuuurbgbrgrwrburbrrgwwbbugwwbgbrugb +wwrrurrwugubgbuuurrgrbbwwgwurugurbgurbuwwrguurbguu +wbugrbwggburugrbgguggwbuubbgbggbbburgbbgugurrurgguggw +buurgrruuwwggbwwrrbrbwgbgruwbwwbwrrurwwbggbwwbuggbuwrgw +ggwuwgubbuwwwurbugrbwbrburrgggubuwwururruuwgbwurwwu +uwuburwwrrwggrgwbubwrwuggurububrrubgwbwbrruubrrbrww +wurgwwggruuurwuwbburbrurburbwubuubbwwwwuubwugbrrrgw +wwubbbgbwgbgruruwbrgugubrrwwugrrwwwubrrwuubrwwrgggbwrb +rbbbrbwburbuwwwwurrrgrbwubbbubbrbubggrguuwrrggwrgr +gwwrrwuurgruwburuugrwugrbgbwgugrgggwubbrguwrrwwgrwbrgw +wwbwggbbbuuuugbgwubwurrbgwrwggwgbrwgrbrwwuuuurwwwwwwguuwbu +wuurwbwrgbrwrgrwuruwbuugurgwwwbrwwgbwuwbuwburuuwbrwbwuwuwg +rgurgwwbwrbbbuuuugbrgububwgbrbwgguuuggbbgrrrgrgw +rubgruwurburuuuwbwrrbwuggbbuggwurbburrrurwgrrgruuw +urbgbggrwgrgwwuubwrguwwgbbbrbbrgugrwuwbuwwb +ugwwrwgurrruwbrbbrurgurrubrbgrrbuwbwwubgbbguugwuguurrgw +gbugwbrwbgrguwrrwgrwbbwgrubgrggrrwwwgguurguguggbgrwurgbr +grrbruubggggbbbrbrwgbubgbgwugbrrrgrbuubgrrwbbuwrgugrbw +uuuwbbbgrwurruwrubbrgggrrgubwwbbgwuugbubrrggbgbwguwwwru +guwrwggurbrguubgrruwgggugrbwwrwwbwwbuwgwwgwwuwggwbgbwgbww +uguugggrbwgrrgruwbuwugbrrwuggrwbwggbgbburburbw +bbbwrwbwgrugbbgrwruwwwuwwrbguwbbuuurrgwrbgguruugwbbbb +gwgwugwurwrwbwggwrgwuuugwgwbbuurguugbbruwwrwwgrwrgrwb +grwrwggrrwgubrrrbbubwwwwbugwurbuuuwbuwrbbwgwbwwubugg +wgbbrbbrbgugwugbrwwuwuuurgrgwbbwwwwuwguubbubwwwbrrbuwgwgwr +rwbububrwrggubbwrbuugbugrrrggbrwrrbwbbbbrgw +uwuuuugrguwububurbrrruwwgrbubwrwurwrggrrgw +bgurrrrbwgrgbbwbwbwgrubgurgbgbgwurbgugrwrb +rwrugruugugrwruwbwrrguruuurgwuuuwurbgbwrrwrgwurburwrrugbbrgw +ggbwrurrrgurwgwwuwgwggrbbwgwwuugrgggrbguugrur +gruubgbuubuwguggrwrgguwbwgrggrrbbruubrrrbbuw +rgggbugbgrwwbwbwburrgubrgugwwwrrwburbwuubwuwrrwuu +wguwggrbgrbgwwrgwuwbggbuwwwururuurbburwwwbbrburugrwrbwrrg +urrbrgbrgbbruuwruwubgwbrbuwruwbwbuwgrwuwwwuwbwwuwgggb +guwuwwwruuuugrwgurbbwgbwrbbrwrgbubrbwgwwuubgrbrwggrwwww +buwgggwrggrbgwwwwbubrbbrgbwrrgruwrurrgrgw +gwgbubruwbbwbbwgwbbruwbbubwugwugbbgwgbwuurgw +bwwgwwuugrwwbuurgrwrrrbrbrruwrgugurururrwbrwbwwrwurwuu +wwrwgbgugwuwuuurwgbbbggbbbugubbgbwgggrbwrgw +wburrrrguggbrwuwbbrwwwuuurrwrggrbgwrrwurgw +ururggggrwwrwgrbuwbbgwbugrrbgbwbgbrrbugwgbuuwwrbrw +wbwwrbgbgwgurrrwburgrurwgrgrubrrwwuububwrrrwwggubuwwrgw +brwrwgwubrrbgrwbrwbrurbburrgurbrgwggrubuwrgb +wggbgubrggbwrguwuubguwuubbwwguwggrrggbwugbbgugrgw +ggbbugbruwwubrrggrugurbuubbbwrwurbbgubbrrwgggbg +bwbgggguuggggwurgwbggbggugwrbugubbbbwrgwwwwwbwrrrgw +wrruggrwwgwbrwbgrrrwuurwuuurubwrgwwbrbgubrgwugbwgbwgrwrgw +gwbgbwbrwbbruuwbwugrgbbrruwurbggrburrbrggggub +uwbgwuurbgbgwwrgbbbbrbuwrwruwwuuurgrbwrgrruwwrbwrgrrw +rwguugrubggguuwrgwugwbgubrrrurwwgbuwgbgggwwwrrrwrgw +uugggwurbwrrrubwggwburwuwurwwguugrwruguuruguugwgb +grwguguuwwgwbwuuruwwgwrugggugbbwwgwruguburb +rbugruwbrgrrbrugwbwrgggubguwurruwrggbggguwwubbu +uwbgbuubbgurbggubbbuwwurrwbuurwurwrrwuwrrbgwrwwb +guuwrruggrbbrbwwrubwrwbwggbwubgrwwrbwggrgwbw +rbwgggrgurgguwuguurwugwuurburbgbbgburuwbrgw +rubugrgwwggbuubrbgrwwgruwbugbbbruwgwgbgrugrrrwbrrbuwuubwu +gurggrgrrrwrwuwbbggbubgurbwuwrgbbwbgrrggwrgwrgg +urgbrbbgguugwubrgwuuwbrbgbrbuurggrrwbrgw +bguwwwbwbruwggubwguwrwugrgrubrrbuuuuubrwbrwbubububbwruuru +ububgwgbrgrwwrguuwrgugbggwubrbgurwwbgguurbgrgwwgrbuggrwbrgw +uwbuguggbgrurrgrurrwbrubrrubbwrrgguwugubrrurbrbrrgwwg +wwurrbrguuwwrbguggbuwruwgruurwwugugggurggrrrgwrruwrubbwwur +wruurbrbbbuwurrrwwrbrwwbwrbrggubwuubbbbuwbrrrwbggwwrgg +bwrwburrgwgurbrbwbrruburgrgwwubguguwwwgwbrbuggrwubbr +gbgrwuugbuwrwgrgrburwwrggrbgwrgguugrwguubrgwwrrwrrgw +rgugubugbrwuwugwbgrwugrurwwrrwguwbbruwbwrww +wrurwbbgwrrgbgwggrrgbrrwuwubrrbuuwrwgrrgrggbbwrubwrbwwgrwg +rrubrwgwuwbbbugwrbbuuwgwbubgwgwuwuwgrurrwrwwgrgu +ubrurbbwururburwrbubbuggggrrwrrrgwgbbwuuggubwbu +rggwwuubbggugwubggwuwugwwrrguuwbwrrrbwwgbgwwbrurw +bgbgguwbbrwrwburbubwrgwruuwgwrbgbrggbgbgrrrrw +uwgrrggrwbbbuwbgbbrrwgwbbburwuuggwwurguuuwruwubrburgw +uubugwbbrrwbuwggwgrwgwrrwggwwuugburgrrugbbuwg +gbbwwgubugwbubwggwbrwwrwwrgbbbwgurugwrwwbwwgggbgrwwgubg +ubgbwwburgbwuuwbrruwbwruwuugwbgwggrgrwbwurbbbwrgurwbg +wrwgbgbgrwwbbbgwrggwbbwurggggbgwuuguugrgw +bgrbwggwgbrgguwwwwbuuurgwrwuubbuwuguwbgbwggbgbrwbbrrwbu +gwubwgbrurbwwrrgugwwgbwbwuuurgwbwrurrgwurgw +rurwuwugruguggwugruburbwuuwgbrwwbrbwrgbgwgurwurrgw +uburgrbugbbubbrubbrbgwbrrbugbguguurrgrrgwwrrbgbbbu +gbwbggrbuwbrrbbrgugwwrbuwggwggwgrrwwuurgurggbww +ubwbrbwwwwwrguruuuwwwrbwurrruguubruuwbuwruub +bbwwgrbbbbbbwwugggugwgrbwrbbbbbbrrwrrwrwgwb +wuubbrbbbuubruwurrwuuruurbwbguwuugbrugwwwbugbruu +gbwwuwgbubwwrwguugwwbwrgbwuuggrwbgbuwwguggb +wrwwwwbwugbgbuwwrrwuwbbuwgrgwwwwrbrgggubbrbuburwr +uwruubbrwwrrgrururgwuguwbgbbgrwrrugbwuububrbgwuwwrbbwwr +grggbuwbbrwbgubwwuuwbggrugwgggurbbburubuurrguuuwrrw +gbbbbugruwwuuubguuugbuwwwugrggbrggurwbwubrrbwurgwggbgrgrr +uguububuwwurruuggwgrruwbwrrbwwgwwgbgrrbgrgw +rrwuwguwubggrwbwbruuwggruuwrbwgrrgugbwrugwguwugbbrb +wbwggrbrwguwwugggwwrbwrrbrgwwwgubggbrgrrrgububgwubrgw +wrrrrrwrrwrrwuwrbugbbwuubugrburgrbbrruurbuwwbwrrbubrgw +gburugrbrugbuwgbbwuwgugrbwugwwrbuuguggurrgw +rbgwwwwgwwburwbbruurggwbwggwuggwrgggwgggwwubgrbggwugbgbrww +gwurwuugrbrwgbbbuwguggwrurrurwguurgururbbrruwwgrrwgbrgw +rwuwgbuwrbbgwbbwgggugggwrgwuguwururrrbwggrwubrwgrrwwbubgb +rwrgubburrbuwurubbwrbwgbgbuwrbrrubbwuuurguwururgw +ggbguuububgggurgruwgrrggwrbwubggurugugrgggwurwbgbwr +brgwrububuwrrwrbwuuugugwururbuuwurrubrbrwwuggggruburbub +uuuggrrbgurruurrbrurgguuuuggrbgbwgbrurwwgwurrrrgrbu +wrrrbrbggwwrgrgbuurbwggrguwwurwrrrrubgrgw +wbwbrwrubwbbubgugruwrwubwguurwbwbwwgurggggrgguuug +rrrbrbggwggggrurbugbuwwrgwburgbgrwgbwgrgwb +ugggurrgrgwgrruguwwwbugrbrbuggwwubgbbgrggrbbuuwuwwbbubrgg +wrwbuwrrburbgurggbwubrwurwbgrggbwbbruggguggbrr +rbbububbrrrrwrubwrwbrugrwbgguwurbwgburrgbwwwwuug +gbgubuugubwwuwrbwwgwugrwgrggruwbugwbuwubgbwrurwrgurrgr +uubwbgubbrrbbggrgwgubwwgrwggrbuwbuwrbwwrguubwrgw +ruwuurggwwuwbbrwbwugwugbwbgugwwburbgugwrwggrbruwgwbuggg +bburgrgwuurgbrbwbgurwwrrwwgbgurwubwbbggbbrugrruugbgr +grwuugwbbugrgrbuubrgurrbubbwurgbuurrurgw +ubwggrrrrurwggwubbbrgbrubwbrgrbrwuruubrubugbr +urguggggggguwbrbbubggbrwuurrrruugwrbuwrgwbubbbrg +gbgbwggwubrgwburbuwgburgubwbwgggguwwrrwuwwuggwubwbbwbrrgw +urbwbgbuguuuwwuwbgrbuwbbuuuwugwgwbgurwbwgwugbu +urrgrrruwwwubbbbgrruuwwgrwbbgwrbrubggubrwwbubguu +rbwwuubwwbbrbubrbgbgwbrrguwrrbwruwbugwbrgw +wwggwwwbrgwwurubbggrrwgwgwbrbgbbggbrgrubgrb +brbwrrugwgrgwgugrugugwurburrbwrrrgrrbrbbguwbuburgw +wruubbbuwwuubgwrwwbuurgbrwrbuggggbwuwrbubggwruwwwbbguu +burgbbrrurburwbuuwbgwbwrgrrwwuwuugbgubgbwwggubr +uuurgwugggubbbbugrugwuurwururuguwwbgrwgrgw +ubrbbbgrgwgubuwggwrrbuuuburuwwgbguruwbuuugwguruuurgubrbrug +rwgwguwrgrwbbbruwrbbwbguburbguwbuwrgrwwuubrub +rrbbgrurrwwwbwwgbbbwwbbrbbbbwwgguggwbubuwbuuwuubuurgu +ggwgggwbwbwuburugrrbwuwuwwbgbwrubrubugruubrug +wrbbgbgbubrugrruugbuggbbwubwwrbrgbwurrrubgrrrgubw +rwuurgubwbwurbuguwwuwuguwruuwrrwbbrrrrwrrbgrgggburwgrbb +wggwruurrwbuggruwbububgwrbburwgwbgrruwruggrgbgbguugwuwuw +rurbrwgrbwwgrurwgbwbwugubwbrbgrgbgubggwbbrubugrrr +ururuubgwwrwwwrbrgguwurgbbuugguugbuwurrwrurwuwrburburuwub +uwwwbwrbgururuggburruguurrrwgrbgwbwbrbgwburbw +ruwggwubwbwggruggbgubrubuuwuurugwrwuuwgbubrrurwuwu +wwrubrbwrbwwuwgurbrwrurrubbwrbwwbrbrbubwwubbgbubwruwgwuw +bwwbuggruwwurgbuwgurubuwugbgwuruurruwuurgrgrrr +urbuwrbwgwurwrggugrbruwbgwggwggrubwwuubwbbububg +rwbgwgbwwuggruubguubugbuggrrwbwrrbwbwruububw +rgbrrburwugurwrrrubwwgwrwuwwurbwbuugurbrbuuggrrwrrw +bgbrugurrrgrubrbrwwrbwurggubbuwrrgwrrgbrgw +ugrgbbbrwgrbguurwbburuurwwrggurgggrrubrrbrbrugwurubbw +rrwbgburwrwgwurwrwbrgrwgbuuurwuguubgguggwbbuwuubguwrrb +rguuurbruwgwrugwwguuuwwwrgruwururgwrruwbbbuuwggurbu +wuwguurrgwubruurruwbwbgwgrrbuwgrwbubwuwrbbubu +wbbggubrgbgggbrwbwwruwwruwwgwrbgrgbwbbuburb +guburbrwbgwubwwwubbggggwbwrguguwwbrbbgwuwguwrwgwg +gwgwggwuubuggrburwwrrgggubuurubbgbwbrgbwwwrbgwbbbubru +wbbwrbgbugbugwrgrwuguwrrrwgrugrbbuwbrwubuu +gwgrrgwrgwwbgbbrububbgwggrbgwrrwubgwbguggggurgw +bwbbgrwuwuugbbugbwwwgwwbrburggbbubrwuggurrbwwbrrgb +gbrrbgwwrrgubbgggrgbubrgubguwrugrrguwgruwubuwbgbwguwgruwrgw +bwwgwgrwbgrrgwrugrbwwwurwwrguubuwgwgrugrrgrgw +rwuubggrgubbwuwgrrwurwwwbrruwrububuggbrggrggwrgwrgw +rbuubuwrbbruwbuwgubguwrurwrgbwugbwwrgbrwwwggwbuubgw +ubrrbwwgrbrrubuwbrubbugwbugwrrbrrubrwrurubggrgrgbgburu +buwrwggubrbrrgrwwugwwburgburrgbuugrwruuuwuuwggubwbgwurw +bugbwrrrwbbbubwgrrwrrbruurgruugbbwbwwurgwwrgw +ugwgwrgbbguwubrrbugguruggbrwwgrwgrgwgrbrubuwwrwguwrwurgw +rubwgbrgguwrgbwurugburwwwrbrgwugbbgburubwrrgrgbggu +bwuubbuurbuwburwwuubuuwgggbbbgrwrgbwwwrbbrrubruuw +wbbwggbbwbrgwrrbgwwwwuburwuwwrgubgububwwuuwrbrrgw +rbgwrwuwuugrwwbwgrgbgruugruwrbwgwugrwbrggbgrgbrrrwuru +ubgwbwwrugggrwgurrwbwwrbwgrgwggwbrubwwwuggrwgbb +rgwubwbrgrbggbwuwuwugruggbrrgbbwrgruwuwrgw +urwrwrurubwwgbwgguruwbuugrugwggrwurgbrwbbrgbwbgbugrrg +bbrwgbuwubwubgwgrwrwuruwrrbubrwrgggugwruwwubw +rrbuwbwrrwgburbwguugwbwgwuwrwwrbwgwrgubbbugbrbggbbgbruu +ugwgubrbbwrbbgrgrubbwrubrbgwuuruwgugwbwgwwwrrggwgbrwuwbwb +bbrbrbwrggbbuwgwburwuwuggrbgrrugwgwurrgrwuubwguuwrgw +rbbuwwwbbgwurwbgbgrbguuwrrwggwguwggbuwbwbggwbb +uruurrrrbrrgwbrgbuuubugggrwwgrbugrgbruwbggwuugrugububgugw +wwuwwruuwwgrgwbuwruuwrbuubgrrububuggubwuuru +ubwbggggwubruguwwgbwbubwwubgwbuwbwbwggrgw +wurrbrbbubbbwguwbuugbwbrbwguwurwrrwgwwwugurrguuwuubbrugrwu +wrrgugrwwgugrwgwgwbwrwwrrbwubwwrguuruggrugbwgrwrrbgbrwwrb +uuwuggggwuuwbuubgbwrrrugwuuwbbwgrrbbrwbuururgbruwr +rwbubbgwugbgbgurgggugwggbwrwubuwbwwgggbwrwrgrwubrwgwg +wbwrwwurgrgrrrwwuwgbwbugbwgbwbbrggwbgwbgrggbgrrwgwrbrb +gugbguwbwrwbrgbgggrrwrgbuuuggbugbwubugbbgbrrbrruburgbu +rururwrrugubugububbubgwugurwgwwbrbgrwbrwbbwgu +wrbggguruwgwgbrwrgguburbgwburggrbrwwuwuggru +rbbbwbrbwbgbwrbbwuggrbgwbrgugggbwburwubgbrgwuuwrbguurwrg +gugrrggbbwrbwrwbubuurrbrbruuwwuuugurwrrrrggwuwgrruruw +uruurwbwbuwrbubbgrwwgbwurbguubbuwgrrwrbrrwrggbwrr +wrbwuuwgwrgrubrurruubburgbrbbubuguurugwurbgubuuwrwrbwr +wrugbwrugwggwrubguwguggbwrwwgbgwuubbubuurbubwbuuuwu +uuuwurgwgubuwrwwgrwuguwggrwgggrwruugbbugggbrwrbugw +bbbuuubwrwbwrwwurugrwwbrwrrrubrwwwggrurbgggbg +wbgguwwwbgbrwrrruurubggrwbwwrurgurwrgrrgbuwwggg +wuwwurugwugbuwgbuggwrbrugbgrgrruwwbwugbrwwbwrwgwgguubuurb +bubwubbggruggwububwuwrwgbugrwgbrwgruurbgrrrwbbrgrwurrgwuwb +rgrgrgubbwgwbrgrbururbwwwruwwwbrbwbbuuwbbwgbwrgg +wwgbbuwgubbubrbgrbwrggggbgrbwgwurrrggugwbgbgrrurruwrb +rgruruwrggwrrggbugwgguuggbgwbrwwguuuugbbbwruuugrugubbgwg +rrrrurrubwrrugbgbubrbgrgbwwbbrurrrrurwwgbggr +bwwrgguubgwgruuuwrwgubbgubuurrurbrgurgbwrbuwbgrruuuubugwb +rrwrubugggguwbuugrbubwwwrwbbrgggruwggbwubuubrurgw +bbgubbwrubguuubrwuggbwggggggbgubuguuwrwrggbwubgwrwuu +rugruwrbgrgguwwrwrbggruwrbwrrrurrgggubuggugubrww +bwwgrgwgwgbgggguurrwgwuugbwwrwbbuurrgwguubg +wgwgwuburrwbgbuurggugbburwubwuwgwuubwwrgbrrrw +wgggugwwwggbggbbgbwurwwwurbgrwugugggguubbbw +grburguwbwrrgwubbbuburgburrgubbruwrwggugrgrbrubg +uruurubuwgurgrubuwuwgbbrgguwubuurgwrwwbwbbuu +wgurrrgwuugburwrrwwbrugwbwwrgrgwwwugbwggbgruubwurgw +bggwrwggrgrwgrrbburubrbwwbrubbbbbuuuuubrwbbbwrbwubgbwrgr +uwuguuwbruurwgugbggrrgrruugrrbrwrurrgrrrgbbbgwurbubrgw +grwbwruwwbwrugubwrwguguwwrwgruwrgbguugwwwbuw +brbggwbruwggrguruuurrgrwgugwgurbrurrburwrbubuggbguwurrgw +rgubuguruuwuggurbuuuwwrrbbuburwruuwuggruggwrwwrgwrrubrrur +rgbwrggwrrgurrgrrbrgrggrbbbgwubbrbgubrguwuurbwggbgwwwu +grubgrwgrgrurrgrggubgugbgwrbbuwgbgruwwwbbrwruu +grgwrwrugggubwgwwgwwwgrgruurbrrwuurgubbbbgrbbwrwuubgrwwb +gwbuuubbwgwrbubuwbbbgrwgrwgwuubgwwrwbbbbwugugrrwwuuruuggu +bgwubrgwuwwuruwbbgugbgruwwuuuggbrgbggbwgwubbbrrbggu +rruuuburggwbrbwwbwrurgubburggbggwrugururbugwgwbgggu +buwubugbwrgwbrrwuuurubwuubgrwrwrbubwrbwrugrwrbgrur +rwbbwbrbrgwggwwubgbbbguubwwgbrwbwbguburrwbg +uwwbubbbbgugrrgbrwbgwuwwwgwuwwrwurwrgwwuugrbbwgbburrbgrgw +wbbgwrbrwbrubbrgbgwrrwggwubbbgbgbwwbggwrbguwwggurggurb +bwrbuwwgubwubggwgrwwgbgbgwguwuuguuuuggbugwgrwgwwgbr +ugruwubuwurwbgbwubuwggrbbbbburgbggrbrwrwrgrbugwwgubgguuwrgw +wuwgggggbrwugbrguwururruugwwgugggwbwbbruubgbbrwwrgw +rbbgggubgbburgbrrgubwubrburwggbrugbgbuwgbuwbubggugrrubuw +rgurugguguwwrgbbrwbggwrggbwbrwgruwuburbwbggrgwwwuwwgur +ubbbwurwuugrubwrurrrggwggbugbbwwurggubbwrrggwwbrbwbbbgrbub +bwgrgbugggbgrrwwbuwuwwwbrubwuugrurrwuwugbggbubrbgubrbbgww +brrggurwgwuuwburuwruugbwbuuuwuwrbugurubugbwwu +uubrbgguggbbbwgwubwgrrbgbwggrrubrrrwubugbbgwrrrbg +uwuruwrrwwgbwwbgbruuuggrguwbrubgbuugggrbgbugubbgwwrwrrgwbgw +wgrbwurwbubwggugrgwubuggrrurwwrwuuuuggbgrbbguuuwguwgg +wwururbgrurgwruuguwrruwuggrugwbrurruwurrbubb +urrrbggrwwwbwbbrubwrgbwwrwrwrrruuurwggrrwgurrrrgbrg +gbbugbwrggwgwrbbbgwgbuugbruguuuwuwrgbgrbwgrgw +uggbrrwwubgwbrwrwrbugurgrubwbgbuuububruurrbrbwbrgw +bubrrwuubuuugrbggrbrwgrrwwggwrurruuwguwrurg +ggggbbuwuugbubwgugurwwwrbgbrburrbwgbgrwrugrrbggbgubbwggrgb +wbrbwwwrubggwggbgubbrrubgrggbuggurgrwrrwruurubb +uwbgrbgubwguuwrbburrugugbwbrggubgrrrwbubrruwbggurrwbbrgw +ggbwbruwubggburubuuuuggbbburwgbwuwrwbwggwb +ggwwuwwuuwruwgurbuwbgguwurbuububrwbubgwububuggb +gbgbbbbrwwwgwbgrbbuwuggwrugbugbuwuuruwgwruguwuwgrrbggr +rruburbbrrguwwgguguwrruwgwrrbrwbbuuuwwgurbwuwbg +gwwwbwwrrgwwgurwruwbwbrgubwgbgbwurrrgwugbbugwrbrg +urgrwgbbwrbgwbwggbugguwwrgggugbbbrggubbgbrugwgrgw +uwgrwwbbbwwrgbbwrwrubuurbugwbwugrbbgrruururuuurbuurw +uggrwwbrurgbwrggugrrbbwwwwbrwgrwbbbuwgwuuwuwbrrb +wruuwuubrwbuubbbbwgwrubugbrrbgwgrguuuwbbwggwggugr +wuubrurgwrruwguwgrguwugugwggrrgwwbruwrubwrrbg +wwrugbubuurwuubburubwrwuwuuwrgbwbrggwbuwgru +wrbggbrbgwwrgrggggwruwrwbgbuuuubwwuuurrgbbrurbgggurrrgw +rwgwbbgbbbgrbgbwbrguuwgwrwrwwwuurwrruwburbwgbgbguguwrbwurg +gwrbwguubgrubgwwuguuwwgugbwggrgwrbrgwbbugugrbrbrrw +wgwugbbbbbugrbggubrwwbgguurggbgbbbwwrwwgrrrrbggrgrbb +gggbrbuuugubgwgwuggguwbgbbugwbwrgrbrrwugrggurrwgur +wbggbwgbuwuwgwgbwwgrrwrgugggwwbrwrrrbwwrgw +gwgubwbrgurrguubburuwguwwbrggwwbbbuwuubbggbruu +gubwrbrwrwrwwrwggbgwbggbgwgwwguwubrrwguuguubrrwruuwuwurrgw +guuwrurguurguruuuwrwbgggruwrbrbbwrrrwwbuburgbwwrubwrgwwbgb +rgwwuruwrrrrrrbwrrbgrurgwwuggrrubgwurwrugrrbrwgwwwrwurgwbrgw +ggwggurwbggwwubwrbrurbuubrrubguuruuwbgrububbgrgw +gbwwggggurwggbuwrrgrwrububwggbwbwbruubrgrrrubuurwwbuwwuu +ugggbwbwbrbrgwwburbrrubbwuuugurwbbbgbuwbbwuwrbgwgwruw +gwgrwurgwgwrwgbruruwrugwwguuuugugggrbgbwgbw +bwuwwguggbwrrbgburbwbguwwuwwbwurguwwbugwrgw +bbwbwwrgburgbbuurggwrururwruwrugbubuguwwbrubuugg +gbgwwrurgbuwuwbrwubwbbgruwbbgbgrubuwwgrwgg +rruggbugrgurwuburgubwbbgburrwwbggwwrrwbbwwbrwwrw +grrbwrgwurbruwrbgurubrbugbuwwrbrugwgwuurggbwrguggbwruw +ubbguuurwwrgbuuwwgrrbububugwbuuburwwuububwbwubrwguwwwrbw +rwugwbrrwwuwwuuruubwwbwbuwuwgurwurrrrbgubwggwrwbwrgbww +brbburrgububgburgbwuubrrubgbrrgwbuwwwbgwguwuurubrubur +bwwubguwbrwbrbugwurrruguwwbuuuwrbbbbwwbuwwbbgggurgw +wbuguubruburgwguwguwwbggruwubwbuuggwuwburburbuu +brwwbwrwbgwugubuubrbwrbgbgrggbuuwwurburgbbuwruggwrrrrgb +brrbbugwbgrrwwbuurbbuwbggubuwurbgwwbubwwubruuuwbwurgw +urbbgbwbwbgurbubuwurggrubwgrgwwrgrrggubwrgg +urgwggurwburbggugwwwugwbguwuwgbbrrbwurggugugrwurgwwrb +rggwuwruugrwgbwuburuwbbwrrrgrubuugwrurggburrgw +wrurbgbbugurwugrbbbwugbwubgubgruwuuguburrrwggbuuggbrrbw \ No newline at end of file diff --git a/2024/day19/main.py b/2024/day19/main.py new file mode 100644 index 0000000..02ff5e9 --- /dev/null +++ b/2024/day19/main.py @@ -0,0 +1,72 @@ +from functools import cache + +with open('input.txt', 'r') as file: + data: list[str] = file.readlines() + +parts: list[str] = data[0].strip().split(', ') + +starting_letter: dict[str, str] = {} + +for part in parts: + first_char = part[0] + + if first_char not in starting_letter: + starting_letter[first_char] = [part] + else: + starting_letter[first_char].append(part) + +designs = [design.strip() for design in data[2:]] + +# this solution is pretty slow and stupid but it works, i think some variation of KMP would be faster? like a graph based search with a large amount of pre-processing +# Could maybe use memoization on substrings +@cache +def search_designs(design: str) -> bool: + if not design: + return True + + first_char = design[0] + + if first_char not in starting_letter: + return False + + possible_matches = starting_letter[first_char] + + possible = [] + for possible_match in possible_matches: + if possible_match == design[:len(possible_match)]: + possible.append(design.replace(possible_match, '')) + + return any([search_designs(m) for m in possible]) + + +possible_count = 0 +for i, design in enumerate(designs): + if search_designs(design): + print(f'Design {i} finished search') + possible_count += 1 + +print(f'Possible Designs: {possible_count}') + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/2024/day19/test.txt b/2024/day19/test.txt new file mode 100644 index 0000000..ad43a74 --- /dev/null +++ b/2024/day19/test.txt @@ -0,0 +1,10 @@ +r, wr, b, g, bwu, rb, gb, br + +brwrr +bggr +gbbr +rrbgbr +ubwu +bwurrg +brgr +bbrgwb \ No newline at end of file diff --git a/2025/day1/p1/input.txt b/2025/day1/p1/input.txt new file mode 100644 index 0000000..2dbdb4c --- /dev/null +++ b/2025/day1/p1/input.txt @@ -0,0 +1,4099 @@ +R10 +L39 +L30 +L9 +R28 +L27 +R14 +L48 +R8 +R9 +R29 +L13 +L15 +R24 +R11 +L24 +L34 +R9 +R2 +L44 +R18 +L39 +L30 +R31 +L13 +R23 +R7 +R14 +R15 +R25 +R44 +R23 +R18 +L16 +R21 +L16 +R48 +L29 +L9 +L13 +L15 +R33 +L35 +L23 +L49 +R24 +L19 +R19 +R5 +R32 +R99 +L4 +L79 +R94 +L11 +R96 +L63 +L37 +L93 +L7 +R35 +R65 +R34 +L91 +L41 +R98 +R22 +L2 +R80 +L66 +L9 +L25 +R45 +R55 +R15 +R32 +R56 +R97 +L78 +L22 +R46 +L84 +L70 +L27 +R35 +R83 +R23 +L6 +L43 +R43 +R62 +R38 +R77 +L75 +R93 +R12 +L38 +R31 +R4 +L52 +L266 +L97 +L10 +R21 +R67 +R33 +R189 +L80 +R66 +R18 +R51 +R56 +R71 +L96 +L475 +R46 +L46 +L60 +R260 +L6 +L330 +R36 +R191 +L19 +L41 +R47 +R22 +L36 +R98 +L266 +L96 +L88 +L12 +R81 +L81 +R44 +L44 +R41 +L98 +L43 +R1 +L49 +R80 +L32 +R29 +R407 +L18 +R18 +R670 +L6 +L43 +L57 +R28 +R11 +R41 +L45 +L35 +L69 +R151 +L59 +R65 +L74 +R86 +L575 +L49 +R85 +L61 +L641 +R41 +L67 +L68 +L75 +R37 +R73 +R80 +L15 +R322 +L23 +R11 +L832 +L744 +L59 +R60 +R27 +R73 +R88 +L62 +R16 +L42 +R56 +R63 +L19 +R89 +L889 +L99 +L48 +R47 +L6 +R68 +R56 +L88 +L170 +R140 +L960 +R60 +L897 +L54 +L49 +L772 +R72 +L95 +R95 +L836 +R989 +R42 +R5 +L54 +R54 +L28 +R28 +R82 +L82 +L7 +R559 +L52 +R49 +R622 +R529 +R20 +L6 +R86 +L16 +L14 +L5 +R601 +L66 +R531 +R87 +R82 +R805 +R95 +R22 +R78 +L9 +R9 +R160 +L83 +L77 +L14 +R15 +R99 +L31 +L77 +R20 +L81 +R3 +R59 +L71 +R58 +L488 +R88 +L80 +L828 +R94 +L69 +L39 +L72 +L46 +L40 +R522 +R97 +L83 +R885 +R17 +R62 +R87 +R77 +R436 +R81 +L81 +R105 +L92 +L666 +L47 +L95 +R95 +R7 +R51 +R42 +L7 +L77 +L91 +R5 +L443 +R77 +L64 +R960 +L80 +R720 +L54 +L76 +L70 +R40 +R60 +L570 +R70 +R67 +R33 +L29 +R74 +L70 +L75 +L99 +L21 +L80 +R55 +L55 +R1 +R99 +R17 +L39 +L78 +L69 +L31 +R832 +L32 +L38 +R74 +L20 +R18 +L47 +R284 +R48 +L6 +R4 +R44 +L661 +L754 +R77 +L23 +R868 +R63 +R69 +R75 +L75 +R90 +L64 +R74 +R360 +R440 +L41 +R75 +L49 +L85 +L1 +L99 +L55 +R55 +R5 +R95 +R86 +R606 +L91 +R99 +R9 +R535 +R4 +L61 +L87 +R57 +L32 +L625 +L769 +R746 +R23 +R9 +L34 +R7 +L91 +L95 +R634 +R41 +L45 +L6 +R93 +L68 +R32 +L61 +L598 +R61 +L82 +L497 +L38 +R38 +L406 +L35 +R68 +L27 +L36 +L473 +L72 +R81 +R955 +L67 +L417 +L44 +R56 +L59 +L67 +L56 +R23 +L24 +R59 +R73 +R46 +L7 +L775 +L17 +L54 +R16 +R74 +L15 +L42 +R42 +R49 +R67 +R84 +L66 +L77 +L314 +R67 +R527 +R63 +R78 +L36 +L88 +L54 +R47 +R955 +L2 +L914 +R60 +R68 +R76 +R23 +R50 +L682 +R28 +R91 +R774 +L74 +L14 +R74 +L2 +R960 +R82 +L59 +R4 +R35 +L55 +L25 +R561 +R4 +R83 +R32 +R20 +R463 +R71 +R369 +L85 +R92 +L16 +R781 +L75 +L369 +L31 +L72 +R72 +L779 +L64 +L106 +L230 +R84 +L405 +R574 +R29 +R72 +L875 +L143 +R39 +R1 +L24 +R27 +L69 +R69 +L57 +R84 +L22 +L875 +R82 +R77 +L89 +R88 +R40 +R92 +R54 +L91 +R322 +R625 +R71 +L36 +R26 +R9 +R157 +L32 +R75 +R32 +R68 +L978 +R78 +L80 +R86 +L6 +R66 +L566 +R2 +L2 +L95 +R72 +L118 +L20 +R61 +R26 +R26 +L65 +L77 +L65 +R53 +R2 +R43 +R88 +L31 +L24 +R34 +L35 +L21 +R8 +L47 +L78 +L74 +L89 +R26 +R248 +L987 +R340 +R65 +L66 +R322 +R45 +R833 +L20 +L80 +L592 +R92 +R6 +L71 +R98 +L38 +R29 +R36 +R87 +R42 +R11 +L46 +R58 +R879 +R9 +L91 +L216 +R7 +L387 +R87 +L16 +L84 +R75 +R25 +L25 +L341 +R70 +L42 +R38 +R65 +L51 +L14 +R72 +R38 +L626 +R16 +L3 +L62 +L38 +R99 +R4 +L19 +L14 +R33 +R847 +R82 +R71 +L41 +L59 +L798 +L68 +R51 +R915 +R365 +R20 +L70 +L15 +L76 +R68 +R8 +L93 +R93 +L80 +R854 +L8 +L66 +L85 +L15 +L241 +R41 +L35 +R39 +R745 +L185 +L66 +L98 +L38 +L4 +R48 +R35 +L36 +L288 +R54 +R621 +R32 +L24 +R92 +L75 +R83 +L59 +R93 +L62 +L884 +L88 +L16 +R46 +R9 +R93 +R68 +R50 +L72 +R31 +L305 +R96 +L48 +L52 +R93 +L93 +L428 +R20 +L654 +L55 +R92 +R10 +L78 +R93 +R56 +L731 +R75 +R37 +L285 +R40 +R508 +L74 +R35 +L761 +R52 +L12 +L39 +L36 +R461 +R80 +L6 +R77 +R23 +L71 +L834 +R23 +R97 +R90 +R48 +L28 +R949 +L8 +R55 +L21 +R85 +R215 +R36 +R55 +R58 +R45 +L94 +L376 +L95 +L87 +L71 +L584 +R313 +L6 +L62 +L32 +R15 +L42 +L85 +L488 +L58 +L59 +R17 +R189 +L189 +L69 +L98 +R91 +L243 +R76 +R43 +L93 +R93 +R85 +L83 +R98 +L38 +L102 +L60 +L88 +L7 +L34 +L71 +L439 +L15 +R354 +L49 +R345 +L3 +R85 +L61 +R794 +L11 +L702 +L903 +R5 +R39 +L639 +L57 +R43 +L639 +R55 +L87 +L5 +L51 +L659 +L50 +R658 +R92 +L496 +L4 +R82 +R18 +L11 +R766 +L72 +R65 +L79 +R61 +L54 +R24 +R98 +L97 +R515 +R20 +L64 +L49 +L46 +R22 +L99 +L835 +L34 +L576 +L55 +R96 +L96 +L44 +R44 +L27 +R5 +R22 +L4 +L32 +L77 +L25 +R25 +L37 +L650 +L51 +L61 +R512 +R11 +R35 +R55 +R99 +R19 +L19 +R26 +L26 +L64 +L36 +L910 +L180 +L1 +R91 +R672 +R58 +L88 +L3 +L239 +R39 +R65 +L52 +L64 +R44 +L32 +L128 +L572 +R52 +R68 +L51 +L45 +L88 +R56 +L92 +R363 +L82 +R66 +R863 +R60 +R72 +R9 +R95 +R54 +L10 +L367 +R74 +R89 +L92 +L998 +R87 +R74 +R43 +L42 +R42 +R2 +R291 +R30 +L609 +R786 +L1 +L99 +L36 +R36 +R37 +L37 +L47 +L53 +R49 +R51 +L403 +L28 +R17 +L69 +L795 +R78 +L70 +R70 +R33 +L52 +R44 +R79 +L104 +L85 +R62 +L77 +R49 +L49 +L84 +R92 +L22 +L85 +R20 +R79 +R29 +L67 +R38 +R52 +R518 +R930 +L78 +R32 +R15 +L69 +L35 +R35 +R98 +L66 +R11 +R29 +L97 +L147 +R613 +L72 +R697 +R34 +L17 +R475 +L21 +L94 +L35 +R92 +R9 +R471 +L80 +R63 +R68 +R91 +L22 +L59 +L41 +L47 +L958 +R5 +R69 +L69 +R650 +R21 +R80 +R24 +L775 +R341 +R59 +L985 +R33 +R23 +L23 +L59 +R11 +L97 +L94 +L209 +L89 +L313 +L67 +L875 +L3 +R484 +R11 +L65 +L83 +R11 +L89 +R110 +R23 +R23 +R2 +R20 +L26 +L471 +R4 +L211 +L8 +L34 +R546 +L421 +L9 +L70 +L240 +L104 +L956 +R407 +R134 +L41 +L84 +L16 +R532 +L32 +L13 +L587 +R213 +R64 +R155 +R12 +R25 +R28 +R70 +L627 +R423 +R49 +L12 +R27 +R46 +R27 +R42 +R69 +L51 +R81 +R267 +R74 +L99 +R1 +R16 +R85 +L59 +L26 +R99 +R95 +R85 +R21 +R28 +R86 +L77 +R298 +L35 +L56 +R56 +L94 +L17 +R11 +R35 +R796 +L6 +R75 +R37 +L37 +L81 +R81 +R86 +L72 +R3 +R490 +L10 +R27 +R787 +R38 +R18 +R70 +L73 +L570 +L751 +R6 +R96 +R91 +L87 +R51 +L94 +L6 +L99 +R72 +R22 +R12 +L33 +R78 +L44 +L70 +L603 +R86 +L42 +L74 +R52 +L57 +R113 +L78 +L35 +R590 +L90 +L16 +L85 +L99 +L45 +R39 +L94 +L29 +L71 +R76 +R24 +R83 +R35 +L34 +L55 +R16 +L45 +L60 +L40 +R91 +L10 +L75 +R94 +L49 +L2 +L241 +R7 +R85 +R47 +L47 +R29 +R71 +L45 +R18 +R51 +L32 +L23 +R938 +L91 +L16 +R80 +L37 +L28 +R85 +L41 +R66 +L98 +R38 +R543 +R69 +L77 +R32 +R63 +L60 +L35 +L18 +L682 +R46 +L88 +R42 +L76 +L41 +L21 +R38 +L73 +R6 +R94 +R990 +R83 +R41 +L47 +R51 +L54 +L92 +R87 +R14 +L86 +R86 +R65 +R35 +R87 +L84 +R97 +R61 +R93 +R73 +L538 +L95 +R65 +R39 +L313 +L81 +R96 +L24 +L762 +R60 +R65 +L49 +R28 +L18 +L52 +L48 +R12 +R186 +L19 +R121 +L77 +R84 +R6 +R14 +R673 +L19 +L481 +L59 +R24 +L65 +L28 +L95 +R20 +L97 +L4 +R4 +R378 +R58 +L102 +L57 +R23 +L51 +L49 +L91 +R91 +R9 +L68 +R59 +R5 +R88 +R7 +R668 +L68 +R48 +R52 +R98 +L68 +R70 +L421 +R19 +R17 +R62 +R23 +R858 +L79 +R2 +R54 +L2 +L30 +R7 +R73 +R48 +L31 +R93 +R54 +R63 +L10 +R42 +L679 +R65 +R584 +R88 +L13 +L24 +L31 +L32 +L63 +R63 +L89 +R87 +R2 +L87 +R290 +L3 +R326 +R53 +R59 +L70 +R70 +L9 +L29 +L79 +R83 +L528 +R13 +L27 +R23 +R89 +L59 +R51 +R29 +L95 +L910 +R110 +L70 +R18 +L48 +L22 +L20 +L13 +R55 +L22 +R39 +L64 +R96 +R41 +L88 +R92 +R924 +L18 +L831 +L90 +R39 +L58 +L60 +R93 +L893 +L81 +L32 +L87 +L46 +R260 +L37 +L41 +L836 +L9 +R24 +R33 +L48 +L81 +R89 +R67 +R25 +R820 +L703 +R83 +R70 +R13 +L83 +R89 +L35 +L122 +R68 +L56 +L59 +L84 +L77 +R70 +L81 +L349 +R36 +R63 +R4 +L867 +R70 +L704 +L4 +L83 +L66 +L30 +R72 +L55 +R74 +R67 +L82 +R51 +R90 +L24 +L76 +R909 +L9 +L72 +L65 +R53 +R63 +L79 +L78 +L20 +L86 +L9 +L264 +R57 +R5 +L78 +R80 +L9 +R86 +R16 +L21 +L90 +L90 +L15 +R17 +L98 +R709 +L212 +R79 +R92 +L297 +R63 +R63 +L729 +L601 +L40 +R13 +R67 +R90 +L68 +R53 +R52 +L37 +L19 +L81 +L67 +R67 +R29 +R13 +R50 +R52 +L761 +L83 +L999 +R99 +R507 +L266 +R59 +L31 +R26 +L52 +R57 +L90 +L10 +L46 +L334 +R17 +R65 +L195 +L239 +R132 +R972 +L99 +L30 +L43 +L34 +R13 +R556 +L35 +L23 +L77 +L90 +L32 +R184 +L62 +L5 +L295 +R988 +L62 +R475 +R969 +R87 +L57 +L91 +R91 +R49 +L66 +R64 +L347 +L761 +R61 +R30 +R306 +R49 +R615 +L47 +R47 +R31 +L531 +L90 +R64 +L475 +R1 +L33 +L67 +L422 +L78 +L25 +R616 +R481 +L72 +R612 +L306 +L75 +L51 +R16 +R83 +R96 +L87 +R31 +R81 +L34 +L18 +R52 +R1 +L80 +R7 +R88 +R84 +R589 +R37 +L94 +R54 +L190 +R4 +L590 +R7 +R943 +R40 +R75 +R225 +R50 +R50 +L92 +L8 +L21 +R21 +L22 +L47 +R9 +L6 +L34 +R36 +L87 +L49 +L78 +L7 +R65 +R37 +R707 +L768 +L56 +L754 +R59 +R695 +L65 +R65 +R924 +R81 +L82 +L82 +R159 +L74 +R9 +R66 +R99 +L76 +L49 +R512 +R96 +R23 +L71 +R50 +R92 +L77 +L89 +R16 +R31 +R47 +R97 +L95 +L11 +R6 +L23 +L79 +R226 +L4 +R19 +L741 +R75 +L75 +L89 +L8 +R9 +R88 +R46 +L46 +L36 +R65 +L38 +L91 +L260 +L35 +R195 +R81 +R19 +R84 +R3 +L494 +L87 +R23 +L29 +L64 +L694 +L42 +L14 +L486 +L33 +R81 +L19 +R71 +R18 +R82 +R58 +L365 +L95 +L50 +R99 +L547 +L93 +L8 +L53 +R24 +L60 +R2 +R388 +R86 +L86 +L82 +L18 +R345 +R360 +R618 +R13 +R64 +L766 +L926 +L154 +R31 +L879 +L6 +R80 +L97 +R1 +R96 +L33 +R64 +L7 +R496 +L63 +R84 +R503 +L24 +R45 +L2 +L343 +L95 +L5 +R47 +L647 +R40 +L340 +L8 +L92 +L77 +R56 +L79 +R68 +L91 +R57 +R66 +R29 +R71 +L87 +L870 +L29 +R86 +L87 +R15 +L974 +R446 +R163 +L74 +L189 +R615 +L23 +L692 +L88 +L12 +L16 +R58 +L95 +R353 +R52 +L38 +R86 +L75 +R75 +R90 +R96 +R25 +L57 +L24 +L82 +L364 +L584 +R3 +L441 +L94 +L68 +L44 +R2 +L74 +R16 +L58 +R574 +L816 +R66 +L9 +L57 +R783 +L83 +R25 +R58 +R493 +R142 +R308 +L380 +L654 +R77 +L36 +R93 +L126 +L35 +L65 +R28 +L27 +R99 +L12 +R12 +R864 +L85 +R38 +R49 +R27 +R38 +L4 +R84 +R481 +L10 +L8 +R14 +R12 +R140 +L57 +L83 +R51 +L51 +L67 +L15 +L18 +L48 +L43 +R91 +R71 +L658 +L51 +L90 +L18 +R46 +L58 +L42 +L26 +R84 +L17 +L41 +R508 +L308 +R47 +L208 +R226 +R37 +L802 +R689 +R11 +L396 +R296 +L760 +R60 +R90 +L49 +L41 +R75 +L93 +R598 +L63 +L17 +R55 +R12 +R77 +L44 +R325 +L541 +R16 +R64 +L64 +L23 +R23 +R6 +L6 +L67 +L10 +R77 +L373 +R73 +R90 +L90 +R18 +L34 +R361 +L45 +L64 +L85 +R18 +L95 +R82 +L17 +L39 +L50 +R95 +R78 +L52 +R13 +R16 +L878 +R78 +R15 +L15 +R48 +L37 +L32 +R97 +R24 +L265 +L79 +R44 +R77 +L77 +R917 +R93 +L87 +L66 +L13 +R189 +L85 +L48 +R30 +R84 +R86 +R19 +R48 +L67 +R25 +R285 +R72 +R53 +R52 +R13 +L394 +R194 +L15 +R84 +R85 +R12 +L66 +L71 +R71 +L720 +R20 +R78 +R58 +L272 +R36 +L90 +L10 +L27 +L41 +L32 +R86 +R9 +L95 +R37 +L77 +L60 +R35 +R6 +L41 +L1 +L99 +L40 +R40 +L483 +R651 +L868 +R761 +L714 +R549 +R304 +R22 +L222 +L62 +R28 +L66 +R36 +L156 +L81 +L99 +R371 +R29 +R89 +L25 +R928 +R8 +R39 +R8 +L46 +R50 +R49 +L49 +L251 +R7 +R37 +R56 +L78 +L622 +R98 +L31 +L95 +L85 +R13 +R111 +L19 +L92 +L36 +L64 +R27 +L27 +L24 +L20 +L68 +R76 +R13 +L72 +L5 +R619 +R181 +R49 +L11 +L88 +R77 +R409 +R511 +L29 +L502 +L73 +R48 +L91 +L79 +R74 +L59 +R12 +L76 +L68 +R96 +L29 +R929 +L22 +L72 +R74 +L43 +R74 +L32 +L79 +R51 +L34 +L17 +L53 +L20 +R73 +L15 +R15 +L97 +L3 +R97 +R61 +L58 +L2 +R26 +L24 +R59 +L54 +R33 +L538 +L222 +R695 +R26 +R66 +L56 +L68 +L13 +R8 +R868 +R936 +R49 +L89 +R37 +L82 +L38 +R83 +R113 +L508 +R22 +L127 +R419 +R64 +R17 +L71 +L59 +R324 +R98 +L130 +R38 +R913 +L13 +L56 +L44 +L5 +R35 +L73 +R51 +L79 +R227 +L54 +L23 +R294 +L243 +L130 +L812 +L88 +L65 +L35 +L558 +R58 +L90 +R5 +R49 +R59 +L28 +R5 +L63 +L952 +L85 +L20 +L80 +R40 +R1 +L46 +R905 +R766 +L46 +R380 +L55 +R23 +R690 +L787 +R10 +R12 +R901 +R6 +R96 +R404 +L77 +R486 +L9 +L197 +L3 +L89 +L111 +L20 +L4 +R3 +L85 +R44 +L38 +R89 +L50 +L874 +L15 +R50 +R50 +R90 +L55 +R15 +L552 +R81 +L18 +L31 +L49 +R69 +L874 +R55 +L61 +L763 +L257 +R82 +L72 +R82 +R8 +R19 +L72 +R53 +L2 +R69 +R913 +L480 +R598 +R2 +L45 +R70 +L78 +R12 +R42 +R1 +L508 +R8 +R99 +L1 +L67 +R49 +L82 +R570 +L91 +R747 +L8 +R51 +L22 +L647 +R940 +R960 +R7 +R93 +R96 +L82 +L59 +R60 +L515 +L647 +L49 +L54 +L39 +L11 +L23 +L43 +L34 +L41 +R41 +L24 +L98 +L32 +L46 +R68 +R66 +L34 +R14 +L91 +R96 +R29 +L48 +L37 +L61 +R651 +L53 +R53 +R247 +L24 +L76 +R78 +L812 +L15 +R40 +L91 +L32 +L61 +R76 +L90 +L93 +L15 +L935 +R50 +R56 +L56 +L31 +L64 +R435 +R86 +R14 +R560 +L37 +R28 +L69 +R78 +L68 +L9 +L23 +L71 +R235 +R62 +R74 +L63 +R23 +L16 +R15 +R41 +R53 +R512 +L70 +L47 +L48 +L2 +R2 +R20 +R63 +R17 +R436 +L7 +R170 +L99 +R57 +R22 +R11 +R610 +L8 +L92 +L83 +L17 +L414 +L486 +R99 +L6 +R47 +L46 +R6 +L86 +R86 +L73 +R68 +L68 +L13 +R9 +L75 +R67 +R38 +R13 +R634 +L70 +R70 +R89 +L89 +L56 +R72 +L93 +R96 +L19 +R92 +L692 +L45 +L73 +R18 +R20 +L20 +R58 +L955 +R36 +L5 +R66 +L17 +R81 +L47 +R15 +R568 +L10 +L39 +L53 +L98 +R79 +L75 +L91 +R87 +R24 +R76 +L15 +R20 +L25 +R37 +R18 +R43 +R57 +R97 +R68 +R587 +L27 +L13 +R870 +L146 +R73 +R56 +R74 +R15 +L47 +R30 +R13 +R35 +R80 +L75 +L1 +L24 +R17 +L58 +L75 +R806 +L114 +R24 +R47 +R753 +L263 +R97 +L7 +R639 +R87 +R12 +L19 +R54 +R37 +L58 +R23 +R98 +R89 +L489 +R88 +L88 +L86 +R6 +R4 +R52 +L62 +L80 +L32 +L391 +L11 +L36 +R861 +R75 +L20 +R31 +L11 +L4 +L96 +R732 +R68 +L866 +L68 +R65 +L31 +R761 +L11 +L56 +R6 +L595 +R73 +L35 +L43 +R46 +R54 +R53 +R747 +R82 +R34 +R40 +L885 +L34 +R2 +L67 +R828 +L77 +L19 +L61 +R32 +L76 +R21 +L50 +R55 +L89 +R91 +R73 +L63 +R94 +R11 +L42 +L46 +L954 +L39 +L61 +R55 +L22 +R57 +R872 +R59 +L9 +L5 +L7 +R64 +L221 +L743 +R35 +R82 +R88 +L10 +L495 +R66 +L807 +L644 +L15 +L79 +R36 +L5 +R20 +R34 +L6 +L52 +L48 +R74 +R26 +R34 +L58 +R24 +L86 +R17 +R69 +L10 +L90 +R5 +L45 +R19 +R621 +L22 +R41 +L85 +R26 +L60 +L36 +L723 +L63 +L986 +R815 +L20 +R13 +R9 +L109 +L11 +R30 +R95 +R386 +R72 +R528 +L21 +L79 +L23 +L723 +L54 +L87 +L35 +L94 +L75 +L9 +R22 +R78 +L23 +L94 +R17 +L889 +L11 +L532 +L57 +L94 +R83 +R19 +R70 +L342 +R53 +L922 +R22 +R944 +L91 +R9 +R18 +L80 +L64 +L36 +L96 +L4 +L71 +L1 +L28 +R9 +R57 +R51 +R917 +R166 +L283 +L517 +R27 +L15 +L199 +L13 +L29 +L67 +L4 +L421 +R2 +R62 +L43 +R518 +R82 +L51 +L89 +R54 +R66 +L90 +L3 +L7 +L37 +L57 +L48 +L9 +R351 +L39 +L718 +L81 +R12 +L67 +R51 +R91 +L29 +R262 +R6 +R71 +R61 +L38 +L83 +L68 +L11 +R50 +L29 +R876 +R3 +R91 +L30 +R939 +L780 +R1 +L770 +L51 +R35 +R38 +L62 +R78 +R11 +L17 +L45 +R62 +R67 +R21 +R54 +L17 +R275 +L31 +L127 +R58 +L8 +R39 +R88 +R97 +L786 +R17 +R148 +R12 +L657 +L68 +L889 +L46 +L47 +R52 +L35 +R12 +L31 +R2 +L2 +R21 +L77 +R564 +R21 +L17 +L56 +L21 +R92 +L3 +L84 +R41 +R21 +R29 +R71 +L54 +L46 +L328 +L70 +R98 +L8 +R8 +L117 +L86 +L57 +R45 +L199 +R503 +R33 +R42 +L40 +R77 +L201 +R72 +R28 +R12 +L12 +R66 +L407 +L59 +L18 +R18 +L90 +R93 +R97 +L89 +R89 +R82 +L682 +L24 +L76 +L77 +L23 +L96 +R96 +R58 +L67 +R9 +L203 +L97 +L67 +R85 +R12 +L666 +L64 +L39 +R907 +R32 +R91 +L71 +R93 +L913 +R76 +L76 +R21 +L51 +L18 +L84 +L33 +L235 +R446 +R54 +L72 +L78 +L17 +R52 +L68 +R83 +L707 +L49 +L185 +R41 +L60 +L33 +R531 +R20 +R48 +L54 +L98 +L96 +L18 +R81 +R79 +L72 +L28 +R40 +L69 +R22 +R657 +L93 +L72 +L26 +L17 +L788 +R9 +R91 +R48 +L2 +R89 +L35 +R11 +L13 +R49 +L1 +R75 +L475 +L39 +L988 +R27 +R356 +R44 +R97 +R74 +L71 +L6 +L94 +R82 +R47 +L830 +R58 +L908 +L49 +R22 +R59 +R19 +R44 +R39 +L83 +L97 +L39 +R68 +L16 +L316 +R3 +L115 +R12 +L23 +L53 +L24 +R58 +L61 +L22 +L675 +L9 +L189 +L702 +L19 +L81 +R72 +R317 +L48 +L8 +L79 +L947 +R693 +R25 +L25 +R35 +L37 +R2 +R54 +L54 +R148 +R152 +L96 +L77 +R345 +R54 +R98 +L24 +R437 +L14 +L12 +L411 +L32 +L60 +L43 +L132 +L133 +L80 +L84 +L65 +L3 +R32 +L76 +R94 +R82 +L73 +R85 +L19 +L226 +R39 +R99 +L5 +L9 +L13 +R68 +R74 +R80 +R97 +R46 +R657 +L24 +R424 +R49 +R17 +R65 +R90 +L21 +R85 +R448 +L71 +R38 +L935 +R78 +L86 +L2 +R143 +R2 +R814 +L359 +L39 +R578 +R6 +L69 +R69 +L70 +L71 +R84 +R50 +L765 +R172 +R50 +R50 +R47 +L226 +R93 +R11 +R32 +L31 +L46 +L21 +R55 +L14 +R45 +R35 +R27 +R93 +R94 +R26 +R37 +R943 +L712 +R57 +L12 +L743 +R95 +R85 +L98 +L20 +L91 +R239 +R55 +L75 +L80 +L589 +L51 +R40 +L34 +R2 +L68 +L90 +L77 +R67 +R68 +R63 +L31 +L7 +R7 +L69 +R93 +L45 +L19 +R73 +L7 +L26 +L789 +R72 +R17 +L9 +R9 +L42 +L52 +R94 +L298 +R261 +L86 +R11 +R20 +R53 +L61 +R77 +R73 +R90 +R81 +L21 +L43 +L57 +L76 +R76 +L5 +L9 +L76 +R95 +L705 +L67 +R940 +L73 +L33 +R319 +R40 +L26 +R466 +L20 +L961 +R120 +L223 +L651 +R63 +R83 +R23 +L74 +L4 +R78 +L96 +R96 +L24 +R849 +L82 +L643 +L560 +R43 +R36 +R92 +L18 +R72 +R784 +R35 +R510 +L55 +L498 +L71 +L70 +L291 +R60 +R63 +R29 +R57 +L15 +L98 +R550 +R93 +L244 +L98 +L606 +L56 +L96 +R52 +L78 +R362 +R43 +R50 +R43 +R25 +R81 +L26 +R48 +L15 +L934 +R7 +R516 +L122 +R39 +L73 +L52 +L72 +L653 +L537 +R40 +R8 +R446 +R54 +R730 +R70 +L46 +R1 +L59 +R335 +R69 +R54 +R73 +R61 +L88 +L94 +R58 +R12 +L32 +R38 +L82 +R5 +R87 +L43 +L53 +L71 +L757 +R897 +L65 +L34 +L71 +L462 +R97 +L41 +L45 +L816 +L988 +L54 +R347 +L97 +R67 +R85 +R22 +R90 +R42 +R58 +R99 +R28 +L492 +L30 +R26 +R69 +R88 +R61 +L32 +R90 +L343 +L703 +R12 +L93 +L80 +L61 +L36 +R324 +R851 +R90 +L68 +L63 +L19 +L28 +L24 +R93 +L44 +L15 +R49 +L49 +R10 +L10 +R26 +R74 +L33 +R15 +L82 +R92 +R67 +R36 +L95 +L450 +L76 +L74 +R24 +R93 +R53 +L87 +R17 +R907 +R5 +R86 +L1 +R3 +L762 +L755 +R17 +L74 +R3 +L16 +L24 +L78 +L381 +L10 +R80 +R82 +R418 +L87 +L56 +L64 +R870 +R37 +R68 +L688 +L648 +L32 +R450 +R50 +L57 +R32 +R56 +R73 +R96 +R14 +L14 +L35 +R32 +R73 +R31 +R75 +L76 +R70 +L84 +L986 +L675 +R75 +L3 +L5 +R93 +R15 +L27 +L73 +R16 +R941 +L5 +R98 +R50 +R57 +R41 +R25 +R77 +R90 +L9 +L81 +R39 +L39 +L917 +R662 +L13 +L32 +R282 +R34 +L67 +R52 +R1 +L2 +R63 +L9 +R198 +R63 +L15 +R877 +R76 +L53 +R65 +R19 +R149 +L33 +L744 +R44 +R84 +R62 +R226 +L72 +R58 +L621 +R463 +L3 +L97 +R601 +L301 +R44 +R66 +R3 +L713 +R68 +L45 +R38 +R640 +L5 +R4 +R61 +R11 +R30 +L4 +R74 +L79 +L93 +L637 +R95 +L358 +R69 +L57 +R930 +L42 +L53 +L215 +L32 +R69 +L513 +R97 +L8 +L98 +R153 +R67 +R62 +R171 +L40 +L60 +L74 +L26 +R22 +R61 +L83 +R2 +R67 +R31 +R27 +R56 +R53 +L336 +R353 +L53 +R23 +R52 +R25 +R67 +L707 +R840 +L298 +L49 +R47 +R28 +R94 +R14 +L36 +R78 +L25 +R847 +R42 +L150 +L92 +R806 +R19 +L61 +R136 +R38 +L138 +L54 +L46 +R17 +L17 +R78 +R38 +L43 +L220 +L74 +R21 +R43 +R60 +R59 +L244 +R33 +L69 +R28 +L610 +L57 +R57 +L667 +R10 +L69 +L15 +L18 +L41 +L949 +R139 +L94 +R804 +R59 +R20 +L48 +R911 +R99 +L289 +R348 +R57 +L39 +R359 +R364 +L41 +R16 +L16 +R87 +R113 +R59 +L82 +L126 +R49 +L10 +L56 +R18 +L12 +L45 +R56 +L12 +L39 +L61 +R353 +L7 +L93 +R8 +R96 +L59 +R840 +L77 +R80 +R94 +L874 +R30 +L43 +L64 +L61 +R257 +L28 +R8 +L65 +R66 +R893 +L370 +R65 +L558 +R70 +R15 +L32 +R84 +L46 +R579 +L252 +L76 +R102 +R914 +R12 +R24 +L24 +R43 +L43 +R528 +L28 +L74 +L360 +R72 +R70 +L21 +R73 +R40 +L338 +R861 +L123 +L87 +L22 +R94 +L634 +L39 +R88 +R94 +L94 +L44 +R44 +L8 +L48 +L44 +L92 +L44 +R36 +L10 +L28 +R77 +L39 +L87 +L17 +R71 +R19 +L30 +L208 +L74 +R91 +R29 +L82 +R88 +L18 +R3 +L24 +L34 +L93 +R43 +R3 +L43 +R63 +R43 +R14 +R69 +L1 +R75 +L77 +L23 +L683 +R893 +L39 +R29 +R63 +L2 +R39 +R71 +R37 +L276 +R988 +L20 +R32 +R568 +L72 +R72 +L453 +R18 +R494 +L79 +R193 +L73 +R719 +L494 +R18 +R430 +L89 +L98 +R14 +L680 +R43 +L94 +R531 +R2 +R56 +L58 +L37 +R588 +R42 +R51 +L74 +R30 +L17 +L383 +L75 +R75 +R46 +R54 +L18 +L78 +L4 +R786 +L37 +L71 +R22 +R27 +L59 +R32 +L83 +R94 +R19 +R15 +R55 +R74 +L74 +R44 +R55 +L99 +R21 +R79 +L43 +L34 +L23 +R26 +L26 +R24 +R76 +L44 +L188 +L68 +R80 +R93 +L957 +L32 +L984 +L995 +R7 +R88 +R77 +L63 +L595 +L119 +L369 +L68 +R37 +R21 +R25 +R75 +R79 +L490 +L45 +R48 +L13 +R46 +R78 +R65 +R28 +L13 +L4 +L80 +L632 +R81 +L30 +L32 +L99 +L3 +R84 +R11 +L62 +L49 +L62 +R673 +L236 +R36 +L665 +R9 +R56 +L25 +L75 +R503 +R97 +L23 +R48 +R475 +L6 +R48 +R554 +R4 +R37 +L61 +L76 +R84 +L84 +R2 +L2 +R62 +L13 +L49 +L75 +L370 +L97 +L19 +R91 +L14 +L24 +L71 +R20 +L94 +R30 +R35 +L37 +R55 +R61 +R236 +L27 +L33 +R33 +L9 +R9 +L98 +R49 +R49 +R17 +L87 +L15 +R26 +L41 +L68 +L10 +R5 +L27 +L74 +L2 +L88 +L50 +L86 +R64 +R236 +R19 +R81 +R831 +L662 +R61 +L11 +L95 +L24 +R93 +R25 +L53 +R88 +R815 +R86 +L53 +L69 +R92 +L79 +L17 +R72 +L9 +R250 +L41 +L580 +R26 +R454 +L5 +L1 +R6 +R29 +R30 +R447 +L1 +L54 +R96 +L547 +R25 +L131 +R79 +R27 +R34 +L29 +R91 +L96 +L1 +L99 +L60 +L98 +L10 +R68 +L11 +R4 +L19 +L274 +R88 +R12 +L95 +R24 +R49 +R192 +R435 +R92 +L13 +L884 +R9 +R732 +L41 +R27 +R47 +L480 +L42 +R14 +L81 +R992 +R38 +R93 +R76 +L84 +L939 +R7 +R90 +L58 +R74 +R55 +R75 +R95 +L899 +L3 +L17 +R9 +R11 +L68 +L23 +L9 +R77 +R23 +L79 +L21 +L624 +L76 +R19 +L19 +R458 +R42 +L301 +L524 +R25 +L93 +L31 +L9 +L98 +L40 +R29 +L437 +L21 +R79 +L16 +R92 +R719 +R44 +L415 +L3 +R93 +R7 +L52 +R91 +R61 +R91 +L91 +L88 +R988 +L64 +L336 +L36 +L41 +R939 +L95 +R333 +R15 +L15 +L37 +R61 +R76 +R890 +R61 +R83 +L19 +L72 +L97 +R786 +R68 +R97 +L97 +L25 +R162 +L58 +R6 +R45 +L20 +L10 +L38 +R356 +L29 +R20 +R44 +R78 +L56 +R618 +R7 +R86 +R83 +R31 +R628 +R96 +R58 +R65 +L75 +L72 +L265 +R819 +L61 +L285 +L15 +L65 +R341 +L11 +R642 +R93 +R678 +L795 +R20 +L95 +L50 +R33 +L536 +R852 +R66 +L66 +L22 +L36 +R26 +R30 +L98 +R86 +L37 +L74 +L74 +L61 +L76 +L93 +L58 +R91 +L893 +L35 +L76 +R51 +L76 +R47 +L92 +L36 +L37 +L156 +R47 +L148 +L49 +L23 +L28 +L59 +R22 +R63 +L29 +R3 +L547 +R465 +R207 +R415 +R73 +R15 +L54 +R26 +L93 +R930 +R83 +L62 +R5 +R337 +R301 +R99 +L86 +R89 +L54 +L49 +R66 +L66 +R631 +R869 +R424 +L46 +R22 +R44 +R25 +R41 +R37 +R84 +L43 +L45 +L43 +L23 +R92 +R75 +R98 +R92 +R40 +L941 +R767 +L37 +L63 +L15 +R15 +L15 +L59 +R42 +R83 +R212 +L229 +R666 +L97 +R97 +L44 +R78 +R66 +R62 +R538 +R58 +L83 +R25 +R68 +L68 +L74 +L639 +L87 +L18 +R18 +L22 +L710 +L43 +R567 +L67 +R853 +R8 +R53 +R61 +L69 +R269 +L564 +R419 +L98 +R55 +R88 +L96 +L45 +L16 +L179 +L977 +R353 +L40 +R2 +L43 +L14 +L3 +R30 +L72 +R24 +L24 +R64 +R61 +R31 +L70 +R14 +L33 +L851 +L16 +L420 +L54 +R74 +R468 +L68 +L79 +R51 +R5 +R23 +L846 +L48 +R556 +R75 +R63 +L83 +R78 +R87 +R60 +L18 +R31 +L83 +L835 +R25 +R38 +R79 +L26 +R27 +L57 +L76 +L47 +L98 +R98 +R14 +L71 +L43 +R91 +R9 +L90 +R33 +L43 +R32 +L17 +R26 +L41 +L52 +R93 +R60 +R5 +L6 +R58 +R56 +L6 +L8 +R77 +R23 +R12 +R92 +L4 +R74 +R26 +L26 +R41 +R33 +R77 +R79 +L89 +L45 +R86 +R44 +R88 +L21 +R89 +R41 +L97 +R69 +R55 +R49 +L29 +L28 +R45 +L30 +L25 +R49 +L19 +L6 +L49 +R36 +L41 +L26 +R36 +R33 +R44 +L48 +R10 +R5 +R49 +R1 +L26 +L20 +L4 +R20 +L4 +L18 +L8 +L36 +R44 +L30 +L37 +L18 +R22 +R23 +R17 +R47 +L41 +R1 +R42 +R49 +R31 +L39 +L50 +R39 +L3 +R26 +L21 +L1 +R14 \ No newline at end of file diff --git a/2025/day1/p1/main.py b/2025/day1/p1/main.py new file mode 100644 index 0000000..df67403 --- /dev/null +++ b/2025/day1/p1/main.py @@ -0,0 +1,45 @@ +INPUT = "input.txt" + +with open(INPUT, 'r') as file: + lines: list[str] = file.readlines() + +place = 50 +zeroes = 0 + +# returns new place +# dir, 0: L, 1: R + +def move_dial(place: int, move: int, direction: int) -> int: + + if direction == 0: + move *= -1 + + temp = place + move + + if temp < 0: + place = 100 + (temp) + elif temp > 99: + place = abs(100 - temp) + else: + place = place + move + + return place + +for line in lines: + line: str = line.strip() + + direction: int = 0 if line[0] == 'L' else 1 + + # We only actually care about the last two numbers + if len(line) > 3: + move = int(line[-2:]) + else: + move = int(line[1:]) + + place = move_dial(place, move, direction) + + if place == 0: + zeroes += 1 + +print(f'Dial Zero Count: {zeroes}') + diff --git a/2025/day1/p1/test.txt b/2025/day1/p1/test.txt new file mode 100644 index 0000000..d03fad7 --- /dev/null +++ b/2025/day1/p1/test.txt @@ -0,0 +1,10 @@ +L68 +L30 +R48 +L5 +R60 +L55 +L1 +L99 +R14 +L82 \ No newline at end of file diff --git a/2025/day1/p2/input.txt b/2025/day1/p2/input.txt new file mode 100644 index 0000000..2dbdb4c --- /dev/null +++ b/2025/day1/p2/input.txt @@ -0,0 +1,4099 @@ +R10 +L39 +L30 +L9 +R28 +L27 +R14 +L48 +R8 +R9 +R29 +L13 +L15 +R24 +R11 +L24 +L34 +R9 +R2 +L44 +R18 +L39 +L30 +R31 +L13 +R23 +R7 +R14 +R15 +R25 +R44 +R23 +R18 +L16 +R21 +L16 +R48 +L29 +L9 +L13 +L15 +R33 +L35 +L23 +L49 +R24 +L19 +R19 +R5 +R32 +R99 +L4 +L79 +R94 +L11 +R96 +L63 +L37 +L93 +L7 +R35 +R65 +R34 +L91 +L41 +R98 +R22 +L2 +R80 +L66 +L9 +L25 +R45 +R55 +R15 +R32 +R56 +R97 +L78 +L22 +R46 +L84 +L70 +L27 +R35 +R83 +R23 +L6 +L43 +R43 +R62 +R38 +R77 +L75 +R93 +R12 +L38 +R31 +R4 +L52 +L266 +L97 +L10 +R21 +R67 +R33 +R189 +L80 +R66 +R18 +R51 +R56 +R71 +L96 +L475 +R46 +L46 +L60 +R260 +L6 +L330 +R36 +R191 +L19 +L41 +R47 +R22 +L36 +R98 +L266 +L96 +L88 +L12 +R81 +L81 +R44 +L44 +R41 +L98 +L43 +R1 +L49 +R80 +L32 +R29 +R407 +L18 +R18 +R670 +L6 +L43 +L57 +R28 +R11 +R41 +L45 +L35 +L69 +R151 +L59 +R65 +L74 +R86 +L575 +L49 +R85 +L61 +L641 +R41 +L67 +L68 +L75 +R37 +R73 +R80 +L15 +R322 +L23 +R11 +L832 +L744 +L59 +R60 +R27 +R73 +R88 +L62 +R16 +L42 +R56 +R63 +L19 +R89 +L889 +L99 +L48 +R47 +L6 +R68 +R56 +L88 +L170 +R140 +L960 +R60 +L897 +L54 +L49 +L772 +R72 +L95 +R95 +L836 +R989 +R42 +R5 +L54 +R54 +L28 +R28 +R82 +L82 +L7 +R559 +L52 +R49 +R622 +R529 +R20 +L6 +R86 +L16 +L14 +L5 +R601 +L66 +R531 +R87 +R82 +R805 +R95 +R22 +R78 +L9 +R9 +R160 +L83 +L77 +L14 +R15 +R99 +L31 +L77 +R20 +L81 +R3 +R59 +L71 +R58 +L488 +R88 +L80 +L828 +R94 +L69 +L39 +L72 +L46 +L40 +R522 +R97 +L83 +R885 +R17 +R62 +R87 +R77 +R436 +R81 +L81 +R105 +L92 +L666 +L47 +L95 +R95 +R7 +R51 +R42 +L7 +L77 +L91 +R5 +L443 +R77 +L64 +R960 +L80 +R720 +L54 +L76 +L70 +R40 +R60 +L570 +R70 +R67 +R33 +L29 +R74 +L70 +L75 +L99 +L21 +L80 +R55 +L55 +R1 +R99 +R17 +L39 +L78 +L69 +L31 +R832 +L32 +L38 +R74 +L20 +R18 +L47 +R284 +R48 +L6 +R4 +R44 +L661 +L754 +R77 +L23 +R868 +R63 +R69 +R75 +L75 +R90 +L64 +R74 +R360 +R440 +L41 +R75 +L49 +L85 +L1 +L99 +L55 +R55 +R5 +R95 +R86 +R606 +L91 +R99 +R9 +R535 +R4 +L61 +L87 +R57 +L32 +L625 +L769 +R746 +R23 +R9 +L34 +R7 +L91 +L95 +R634 +R41 +L45 +L6 +R93 +L68 +R32 +L61 +L598 +R61 +L82 +L497 +L38 +R38 +L406 +L35 +R68 +L27 +L36 +L473 +L72 +R81 +R955 +L67 +L417 +L44 +R56 +L59 +L67 +L56 +R23 +L24 +R59 +R73 +R46 +L7 +L775 +L17 +L54 +R16 +R74 +L15 +L42 +R42 +R49 +R67 +R84 +L66 +L77 +L314 +R67 +R527 +R63 +R78 +L36 +L88 +L54 +R47 +R955 +L2 +L914 +R60 +R68 +R76 +R23 +R50 +L682 +R28 +R91 +R774 +L74 +L14 +R74 +L2 +R960 +R82 +L59 +R4 +R35 +L55 +L25 +R561 +R4 +R83 +R32 +R20 +R463 +R71 +R369 +L85 +R92 +L16 +R781 +L75 +L369 +L31 +L72 +R72 +L779 +L64 +L106 +L230 +R84 +L405 +R574 +R29 +R72 +L875 +L143 +R39 +R1 +L24 +R27 +L69 +R69 +L57 +R84 +L22 +L875 +R82 +R77 +L89 +R88 +R40 +R92 +R54 +L91 +R322 +R625 +R71 +L36 +R26 +R9 +R157 +L32 +R75 +R32 +R68 +L978 +R78 +L80 +R86 +L6 +R66 +L566 +R2 +L2 +L95 +R72 +L118 +L20 +R61 +R26 +R26 +L65 +L77 +L65 +R53 +R2 +R43 +R88 +L31 +L24 +R34 +L35 +L21 +R8 +L47 +L78 +L74 +L89 +R26 +R248 +L987 +R340 +R65 +L66 +R322 +R45 +R833 +L20 +L80 +L592 +R92 +R6 +L71 +R98 +L38 +R29 +R36 +R87 +R42 +R11 +L46 +R58 +R879 +R9 +L91 +L216 +R7 +L387 +R87 +L16 +L84 +R75 +R25 +L25 +L341 +R70 +L42 +R38 +R65 +L51 +L14 +R72 +R38 +L626 +R16 +L3 +L62 +L38 +R99 +R4 +L19 +L14 +R33 +R847 +R82 +R71 +L41 +L59 +L798 +L68 +R51 +R915 +R365 +R20 +L70 +L15 +L76 +R68 +R8 +L93 +R93 +L80 +R854 +L8 +L66 +L85 +L15 +L241 +R41 +L35 +R39 +R745 +L185 +L66 +L98 +L38 +L4 +R48 +R35 +L36 +L288 +R54 +R621 +R32 +L24 +R92 +L75 +R83 +L59 +R93 +L62 +L884 +L88 +L16 +R46 +R9 +R93 +R68 +R50 +L72 +R31 +L305 +R96 +L48 +L52 +R93 +L93 +L428 +R20 +L654 +L55 +R92 +R10 +L78 +R93 +R56 +L731 +R75 +R37 +L285 +R40 +R508 +L74 +R35 +L761 +R52 +L12 +L39 +L36 +R461 +R80 +L6 +R77 +R23 +L71 +L834 +R23 +R97 +R90 +R48 +L28 +R949 +L8 +R55 +L21 +R85 +R215 +R36 +R55 +R58 +R45 +L94 +L376 +L95 +L87 +L71 +L584 +R313 +L6 +L62 +L32 +R15 +L42 +L85 +L488 +L58 +L59 +R17 +R189 +L189 +L69 +L98 +R91 +L243 +R76 +R43 +L93 +R93 +R85 +L83 +R98 +L38 +L102 +L60 +L88 +L7 +L34 +L71 +L439 +L15 +R354 +L49 +R345 +L3 +R85 +L61 +R794 +L11 +L702 +L903 +R5 +R39 +L639 +L57 +R43 +L639 +R55 +L87 +L5 +L51 +L659 +L50 +R658 +R92 +L496 +L4 +R82 +R18 +L11 +R766 +L72 +R65 +L79 +R61 +L54 +R24 +R98 +L97 +R515 +R20 +L64 +L49 +L46 +R22 +L99 +L835 +L34 +L576 +L55 +R96 +L96 +L44 +R44 +L27 +R5 +R22 +L4 +L32 +L77 +L25 +R25 +L37 +L650 +L51 +L61 +R512 +R11 +R35 +R55 +R99 +R19 +L19 +R26 +L26 +L64 +L36 +L910 +L180 +L1 +R91 +R672 +R58 +L88 +L3 +L239 +R39 +R65 +L52 +L64 +R44 +L32 +L128 +L572 +R52 +R68 +L51 +L45 +L88 +R56 +L92 +R363 +L82 +R66 +R863 +R60 +R72 +R9 +R95 +R54 +L10 +L367 +R74 +R89 +L92 +L998 +R87 +R74 +R43 +L42 +R42 +R2 +R291 +R30 +L609 +R786 +L1 +L99 +L36 +R36 +R37 +L37 +L47 +L53 +R49 +R51 +L403 +L28 +R17 +L69 +L795 +R78 +L70 +R70 +R33 +L52 +R44 +R79 +L104 +L85 +R62 +L77 +R49 +L49 +L84 +R92 +L22 +L85 +R20 +R79 +R29 +L67 +R38 +R52 +R518 +R930 +L78 +R32 +R15 +L69 +L35 +R35 +R98 +L66 +R11 +R29 +L97 +L147 +R613 +L72 +R697 +R34 +L17 +R475 +L21 +L94 +L35 +R92 +R9 +R471 +L80 +R63 +R68 +R91 +L22 +L59 +L41 +L47 +L958 +R5 +R69 +L69 +R650 +R21 +R80 +R24 +L775 +R341 +R59 +L985 +R33 +R23 +L23 +L59 +R11 +L97 +L94 +L209 +L89 +L313 +L67 +L875 +L3 +R484 +R11 +L65 +L83 +R11 +L89 +R110 +R23 +R23 +R2 +R20 +L26 +L471 +R4 +L211 +L8 +L34 +R546 +L421 +L9 +L70 +L240 +L104 +L956 +R407 +R134 +L41 +L84 +L16 +R532 +L32 +L13 +L587 +R213 +R64 +R155 +R12 +R25 +R28 +R70 +L627 +R423 +R49 +L12 +R27 +R46 +R27 +R42 +R69 +L51 +R81 +R267 +R74 +L99 +R1 +R16 +R85 +L59 +L26 +R99 +R95 +R85 +R21 +R28 +R86 +L77 +R298 +L35 +L56 +R56 +L94 +L17 +R11 +R35 +R796 +L6 +R75 +R37 +L37 +L81 +R81 +R86 +L72 +R3 +R490 +L10 +R27 +R787 +R38 +R18 +R70 +L73 +L570 +L751 +R6 +R96 +R91 +L87 +R51 +L94 +L6 +L99 +R72 +R22 +R12 +L33 +R78 +L44 +L70 +L603 +R86 +L42 +L74 +R52 +L57 +R113 +L78 +L35 +R590 +L90 +L16 +L85 +L99 +L45 +R39 +L94 +L29 +L71 +R76 +R24 +R83 +R35 +L34 +L55 +R16 +L45 +L60 +L40 +R91 +L10 +L75 +R94 +L49 +L2 +L241 +R7 +R85 +R47 +L47 +R29 +R71 +L45 +R18 +R51 +L32 +L23 +R938 +L91 +L16 +R80 +L37 +L28 +R85 +L41 +R66 +L98 +R38 +R543 +R69 +L77 +R32 +R63 +L60 +L35 +L18 +L682 +R46 +L88 +R42 +L76 +L41 +L21 +R38 +L73 +R6 +R94 +R990 +R83 +R41 +L47 +R51 +L54 +L92 +R87 +R14 +L86 +R86 +R65 +R35 +R87 +L84 +R97 +R61 +R93 +R73 +L538 +L95 +R65 +R39 +L313 +L81 +R96 +L24 +L762 +R60 +R65 +L49 +R28 +L18 +L52 +L48 +R12 +R186 +L19 +R121 +L77 +R84 +R6 +R14 +R673 +L19 +L481 +L59 +R24 +L65 +L28 +L95 +R20 +L97 +L4 +R4 +R378 +R58 +L102 +L57 +R23 +L51 +L49 +L91 +R91 +R9 +L68 +R59 +R5 +R88 +R7 +R668 +L68 +R48 +R52 +R98 +L68 +R70 +L421 +R19 +R17 +R62 +R23 +R858 +L79 +R2 +R54 +L2 +L30 +R7 +R73 +R48 +L31 +R93 +R54 +R63 +L10 +R42 +L679 +R65 +R584 +R88 +L13 +L24 +L31 +L32 +L63 +R63 +L89 +R87 +R2 +L87 +R290 +L3 +R326 +R53 +R59 +L70 +R70 +L9 +L29 +L79 +R83 +L528 +R13 +L27 +R23 +R89 +L59 +R51 +R29 +L95 +L910 +R110 +L70 +R18 +L48 +L22 +L20 +L13 +R55 +L22 +R39 +L64 +R96 +R41 +L88 +R92 +R924 +L18 +L831 +L90 +R39 +L58 +L60 +R93 +L893 +L81 +L32 +L87 +L46 +R260 +L37 +L41 +L836 +L9 +R24 +R33 +L48 +L81 +R89 +R67 +R25 +R820 +L703 +R83 +R70 +R13 +L83 +R89 +L35 +L122 +R68 +L56 +L59 +L84 +L77 +R70 +L81 +L349 +R36 +R63 +R4 +L867 +R70 +L704 +L4 +L83 +L66 +L30 +R72 +L55 +R74 +R67 +L82 +R51 +R90 +L24 +L76 +R909 +L9 +L72 +L65 +R53 +R63 +L79 +L78 +L20 +L86 +L9 +L264 +R57 +R5 +L78 +R80 +L9 +R86 +R16 +L21 +L90 +L90 +L15 +R17 +L98 +R709 +L212 +R79 +R92 +L297 +R63 +R63 +L729 +L601 +L40 +R13 +R67 +R90 +L68 +R53 +R52 +L37 +L19 +L81 +L67 +R67 +R29 +R13 +R50 +R52 +L761 +L83 +L999 +R99 +R507 +L266 +R59 +L31 +R26 +L52 +R57 +L90 +L10 +L46 +L334 +R17 +R65 +L195 +L239 +R132 +R972 +L99 +L30 +L43 +L34 +R13 +R556 +L35 +L23 +L77 +L90 +L32 +R184 +L62 +L5 +L295 +R988 +L62 +R475 +R969 +R87 +L57 +L91 +R91 +R49 +L66 +R64 +L347 +L761 +R61 +R30 +R306 +R49 +R615 +L47 +R47 +R31 +L531 +L90 +R64 +L475 +R1 +L33 +L67 +L422 +L78 +L25 +R616 +R481 +L72 +R612 +L306 +L75 +L51 +R16 +R83 +R96 +L87 +R31 +R81 +L34 +L18 +R52 +R1 +L80 +R7 +R88 +R84 +R589 +R37 +L94 +R54 +L190 +R4 +L590 +R7 +R943 +R40 +R75 +R225 +R50 +R50 +L92 +L8 +L21 +R21 +L22 +L47 +R9 +L6 +L34 +R36 +L87 +L49 +L78 +L7 +R65 +R37 +R707 +L768 +L56 +L754 +R59 +R695 +L65 +R65 +R924 +R81 +L82 +L82 +R159 +L74 +R9 +R66 +R99 +L76 +L49 +R512 +R96 +R23 +L71 +R50 +R92 +L77 +L89 +R16 +R31 +R47 +R97 +L95 +L11 +R6 +L23 +L79 +R226 +L4 +R19 +L741 +R75 +L75 +L89 +L8 +R9 +R88 +R46 +L46 +L36 +R65 +L38 +L91 +L260 +L35 +R195 +R81 +R19 +R84 +R3 +L494 +L87 +R23 +L29 +L64 +L694 +L42 +L14 +L486 +L33 +R81 +L19 +R71 +R18 +R82 +R58 +L365 +L95 +L50 +R99 +L547 +L93 +L8 +L53 +R24 +L60 +R2 +R388 +R86 +L86 +L82 +L18 +R345 +R360 +R618 +R13 +R64 +L766 +L926 +L154 +R31 +L879 +L6 +R80 +L97 +R1 +R96 +L33 +R64 +L7 +R496 +L63 +R84 +R503 +L24 +R45 +L2 +L343 +L95 +L5 +R47 +L647 +R40 +L340 +L8 +L92 +L77 +R56 +L79 +R68 +L91 +R57 +R66 +R29 +R71 +L87 +L870 +L29 +R86 +L87 +R15 +L974 +R446 +R163 +L74 +L189 +R615 +L23 +L692 +L88 +L12 +L16 +R58 +L95 +R353 +R52 +L38 +R86 +L75 +R75 +R90 +R96 +R25 +L57 +L24 +L82 +L364 +L584 +R3 +L441 +L94 +L68 +L44 +R2 +L74 +R16 +L58 +R574 +L816 +R66 +L9 +L57 +R783 +L83 +R25 +R58 +R493 +R142 +R308 +L380 +L654 +R77 +L36 +R93 +L126 +L35 +L65 +R28 +L27 +R99 +L12 +R12 +R864 +L85 +R38 +R49 +R27 +R38 +L4 +R84 +R481 +L10 +L8 +R14 +R12 +R140 +L57 +L83 +R51 +L51 +L67 +L15 +L18 +L48 +L43 +R91 +R71 +L658 +L51 +L90 +L18 +R46 +L58 +L42 +L26 +R84 +L17 +L41 +R508 +L308 +R47 +L208 +R226 +R37 +L802 +R689 +R11 +L396 +R296 +L760 +R60 +R90 +L49 +L41 +R75 +L93 +R598 +L63 +L17 +R55 +R12 +R77 +L44 +R325 +L541 +R16 +R64 +L64 +L23 +R23 +R6 +L6 +L67 +L10 +R77 +L373 +R73 +R90 +L90 +R18 +L34 +R361 +L45 +L64 +L85 +R18 +L95 +R82 +L17 +L39 +L50 +R95 +R78 +L52 +R13 +R16 +L878 +R78 +R15 +L15 +R48 +L37 +L32 +R97 +R24 +L265 +L79 +R44 +R77 +L77 +R917 +R93 +L87 +L66 +L13 +R189 +L85 +L48 +R30 +R84 +R86 +R19 +R48 +L67 +R25 +R285 +R72 +R53 +R52 +R13 +L394 +R194 +L15 +R84 +R85 +R12 +L66 +L71 +R71 +L720 +R20 +R78 +R58 +L272 +R36 +L90 +L10 +L27 +L41 +L32 +R86 +R9 +L95 +R37 +L77 +L60 +R35 +R6 +L41 +L1 +L99 +L40 +R40 +L483 +R651 +L868 +R761 +L714 +R549 +R304 +R22 +L222 +L62 +R28 +L66 +R36 +L156 +L81 +L99 +R371 +R29 +R89 +L25 +R928 +R8 +R39 +R8 +L46 +R50 +R49 +L49 +L251 +R7 +R37 +R56 +L78 +L622 +R98 +L31 +L95 +L85 +R13 +R111 +L19 +L92 +L36 +L64 +R27 +L27 +L24 +L20 +L68 +R76 +R13 +L72 +L5 +R619 +R181 +R49 +L11 +L88 +R77 +R409 +R511 +L29 +L502 +L73 +R48 +L91 +L79 +R74 +L59 +R12 +L76 +L68 +R96 +L29 +R929 +L22 +L72 +R74 +L43 +R74 +L32 +L79 +R51 +L34 +L17 +L53 +L20 +R73 +L15 +R15 +L97 +L3 +R97 +R61 +L58 +L2 +R26 +L24 +R59 +L54 +R33 +L538 +L222 +R695 +R26 +R66 +L56 +L68 +L13 +R8 +R868 +R936 +R49 +L89 +R37 +L82 +L38 +R83 +R113 +L508 +R22 +L127 +R419 +R64 +R17 +L71 +L59 +R324 +R98 +L130 +R38 +R913 +L13 +L56 +L44 +L5 +R35 +L73 +R51 +L79 +R227 +L54 +L23 +R294 +L243 +L130 +L812 +L88 +L65 +L35 +L558 +R58 +L90 +R5 +R49 +R59 +L28 +R5 +L63 +L952 +L85 +L20 +L80 +R40 +R1 +L46 +R905 +R766 +L46 +R380 +L55 +R23 +R690 +L787 +R10 +R12 +R901 +R6 +R96 +R404 +L77 +R486 +L9 +L197 +L3 +L89 +L111 +L20 +L4 +R3 +L85 +R44 +L38 +R89 +L50 +L874 +L15 +R50 +R50 +R90 +L55 +R15 +L552 +R81 +L18 +L31 +L49 +R69 +L874 +R55 +L61 +L763 +L257 +R82 +L72 +R82 +R8 +R19 +L72 +R53 +L2 +R69 +R913 +L480 +R598 +R2 +L45 +R70 +L78 +R12 +R42 +R1 +L508 +R8 +R99 +L1 +L67 +R49 +L82 +R570 +L91 +R747 +L8 +R51 +L22 +L647 +R940 +R960 +R7 +R93 +R96 +L82 +L59 +R60 +L515 +L647 +L49 +L54 +L39 +L11 +L23 +L43 +L34 +L41 +R41 +L24 +L98 +L32 +L46 +R68 +R66 +L34 +R14 +L91 +R96 +R29 +L48 +L37 +L61 +R651 +L53 +R53 +R247 +L24 +L76 +R78 +L812 +L15 +R40 +L91 +L32 +L61 +R76 +L90 +L93 +L15 +L935 +R50 +R56 +L56 +L31 +L64 +R435 +R86 +R14 +R560 +L37 +R28 +L69 +R78 +L68 +L9 +L23 +L71 +R235 +R62 +R74 +L63 +R23 +L16 +R15 +R41 +R53 +R512 +L70 +L47 +L48 +L2 +R2 +R20 +R63 +R17 +R436 +L7 +R170 +L99 +R57 +R22 +R11 +R610 +L8 +L92 +L83 +L17 +L414 +L486 +R99 +L6 +R47 +L46 +R6 +L86 +R86 +L73 +R68 +L68 +L13 +R9 +L75 +R67 +R38 +R13 +R634 +L70 +R70 +R89 +L89 +L56 +R72 +L93 +R96 +L19 +R92 +L692 +L45 +L73 +R18 +R20 +L20 +R58 +L955 +R36 +L5 +R66 +L17 +R81 +L47 +R15 +R568 +L10 +L39 +L53 +L98 +R79 +L75 +L91 +R87 +R24 +R76 +L15 +R20 +L25 +R37 +R18 +R43 +R57 +R97 +R68 +R587 +L27 +L13 +R870 +L146 +R73 +R56 +R74 +R15 +L47 +R30 +R13 +R35 +R80 +L75 +L1 +L24 +R17 +L58 +L75 +R806 +L114 +R24 +R47 +R753 +L263 +R97 +L7 +R639 +R87 +R12 +L19 +R54 +R37 +L58 +R23 +R98 +R89 +L489 +R88 +L88 +L86 +R6 +R4 +R52 +L62 +L80 +L32 +L391 +L11 +L36 +R861 +R75 +L20 +R31 +L11 +L4 +L96 +R732 +R68 +L866 +L68 +R65 +L31 +R761 +L11 +L56 +R6 +L595 +R73 +L35 +L43 +R46 +R54 +R53 +R747 +R82 +R34 +R40 +L885 +L34 +R2 +L67 +R828 +L77 +L19 +L61 +R32 +L76 +R21 +L50 +R55 +L89 +R91 +R73 +L63 +R94 +R11 +L42 +L46 +L954 +L39 +L61 +R55 +L22 +R57 +R872 +R59 +L9 +L5 +L7 +R64 +L221 +L743 +R35 +R82 +R88 +L10 +L495 +R66 +L807 +L644 +L15 +L79 +R36 +L5 +R20 +R34 +L6 +L52 +L48 +R74 +R26 +R34 +L58 +R24 +L86 +R17 +R69 +L10 +L90 +R5 +L45 +R19 +R621 +L22 +R41 +L85 +R26 +L60 +L36 +L723 +L63 +L986 +R815 +L20 +R13 +R9 +L109 +L11 +R30 +R95 +R386 +R72 +R528 +L21 +L79 +L23 +L723 +L54 +L87 +L35 +L94 +L75 +L9 +R22 +R78 +L23 +L94 +R17 +L889 +L11 +L532 +L57 +L94 +R83 +R19 +R70 +L342 +R53 +L922 +R22 +R944 +L91 +R9 +R18 +L80 +L64 +L36 +L96 +L4 +L71 +L1 +L28 +R9 +R57 +R51 +R917 +R166 +L283 +L517 +R27 +L15 +L199 +L13 +L29 +L67 +L4 +L421 +R2 +R62 +L43 +R518 +R82 +L51 +L89 +R54 +R66 +L90 +L3 +L7 +L37 +L57 +L48 +L9 +R351 +L39 +L718 +L81 +R12 +L67 +R51 +R91 +L29 +R262 +R6 +R71 +R61 +L38 +L83 +L68 +L11 +R50 +L29 +R876 +R3 +R91 +L30 +R939 +L780 +R1 +L770 +L51 +R35 +R38 +L62 +R78 +R11 +L17 +L45 +R62 +R67 +R21 +R54 +L17 +R275 +L31 +L127 +R58 +L8 +R39 +R88 +R97 +L786 +R17 +R148 +R12 +L657 +L68 +L889 +L46 +L47 +R52 +L35 +R12 +L31 +R2 +L2 +R21 +L77 +R564 +R21 +L17 +L56 +L21 +R92 +L3 +L84 +R41 +R21 +R29 +R71 +L54 +L46 +L328 +L70 +R98 +L8 +R8 +L117 +L86 +L57 +R45 +L199 +R503 +R33 +R42 +L40 +R77 +L201 +R72 +R28 +R12 +L12 +R66 +L407 +L59 +L18 +R18 +L90 +R93 +R97 +L89 +R89 +R82 +L682 +L24 +L76 +L77 +L23 +L96 +R96 +R58 +L67 +R9 +L203 +L97 +L67 +R85 +R12 +L666 +L64 +L39 +R907 +R32 +R91 +L71 +R93 +L913 +R76 +L76 +R21 +L51 +L18 +L84 +L33 +L235 +R446 +R54 +L72 +L78 +L17 +R52 +L68 +R83 +L707 +L49 +L185 +R41 +L60 +L33 +R531 +R20 +R48 +L54 +L98 +L96 +L18 +R81 +R79 +L72 +L28 +R40 +L69 +R22 +R657 +L93 +L72 +L26 +L17 +L788 +R9 +R91 +R48 +L2 +R89 +L35 +R11 +L13 +R49 +L1 +R75 +L475 +L39 +L988 +R27 +R356 +R44 +R97 +R74 +L71 +L6 +L94 +R82 +R47 +L830 +R58 +L908 +L49 +R22 +R59 +R19 +R44 +R39 +L83 +L97 +L39 +R68 +L16 +L316 +R3 +L115 +R12 +L23 +L53 +L24 +R58 +L61 +L22 +L675 +L9 +L189 +L702 +L19 +L81 +R72 +R317 +L48 +L8 +L79 +L947 +R693 +R25 +L25 +R35 +L37 +R2 +R54 +L54 +R148 +R152 +L96 +L77 +R345 +R54 +R98 +L24 +R437 +L14 +L12 +L411 +L32 +L60 +L43 +L132 +L133 +L80 +L84 +L65 +L3 +R32 +L76 +R94 +R82 +L73 +R85 +L19 +L226 +R39 +R99 +L5 +L9 +L13 +R68 +R74 +R80 +R97 +R46 +R657 +L24 +R424 +R49 +R17 +R65 +R90 +L21 +R85 +R448 +L71 +R38 +L935 +R78 +L86 +L2 +R143 +R2 +R814 +L359 +L39 +R578 +R6 +L69 +R69 +L70 +L71 +R84 +R50 +L765 +R172 +R50 +R50 +R47 +L226 +R93 +R11 +R32 +L31 +L46 +L21 +R55 +L14 +R45 +R35 +R27 +R93 +R94 +R26 +R37 +R943 +L712 +R57 +L12 +L743 +R95 +R85 +L98 +L20 +L91 +R239 +R55 +L75 +L80 +L589 +L51 +R40 +L34 +R2 +L68 +L90 +L77 +R67 +R68 +R63 +L31 +L7 +R7 +L69 +R93 +L45 +L19 +R73 +L7 +L26 +L789 +R72 +R17 +L9 +R9 +L42 +L52 +R94 +L298 +R261 +L86 +R11 +R20 +R53 +L61 +R77 +R73 +R90 +R81 +L21 +L43 +L57 +L76 +R76 +L5 +L9 +L76 +R95 +L705 +L67 +R940 +L73 +L33 +R319 +R40 +L26 +R466 +L20 +L961 +R120 +L223 +L651 +R63 +R83 +R23 +L74 +L4 +R78 +L96 +R96 +L24 +R849 +L82 +L643 +L560 +R43 +R36 +R92 +L18 +R72 +R784 +R35 +R510 +L55 +L498 +L71 +L70 +L291 +R60 +R63 +R29 +R57 +L15 +L98 +R550 +R93 +L244 +L98 +L606 +L56 +L96 +R52 +L78 +R362 +R43 +R50 +R43 +R25 +R81 +L26 +R48 +L15 +L934 +R7 +R516 +L122 +R39 +L73 +L52 +L72 +L653 +L537 +R40 +R8 +R446 +R54 +R730 +R70 +L46 +R1 +L59 +R335 +R69 +R54 +R73 +R61 +L88 +L94 +R58 +R12 +L32 +R38 +L82 +R5 +R87 +L43 +L53 +L71 +L757 +R897 +L65 +L34 +L71 +L462 +R97 +L41 +L45 +L816 +L988 +L54 +R347 +L97 +R67 +R85 +R22 +R90 +R42 +R58 +R99 +R28 +L492 +L30 +R26 +R69 +R88 +R61 +L32 +R90 +L343 +L703 +R12 +L93 +L80 +L61 +L36 +R324 +R851 +R90 +L68 +L63 +L19 +L28 +L24 +R93 +L44 +L15 +R49 +L49 +R10 +L10 +R26 +R74 +L33 +R15 +L82 +R92 +R67 +R36 +L95 +L450 +L76 +L74 +R24 +R93 +R53 +L87 +R17 +R907 +R5 +R86 +L1 +R3 +L762 +L755 +R17 +L74 +R3 +L16 +L24 +L78 +L381 +L10 +R80 +R82 +R418 +L87 +L56 +L64 +R870 +R37 +R68 +L688 +L648 +L32 +R450 +R50 +L57 +R32 +R56 +R73 +R96 +R14 +L14 +L35 +R32 +R73 +R31 +R75 +L76 +R70 +L84 +L986 +L675 +R75 +L3 +L5 +R93 +R15 +L27 +L73 +R16 +R941 +L5 +R98 +R50 +R57 +R41 +R25 +R77 +R90 +L9 +L81 +R39 +L39 +L917 +R662 +L13 +L32 +R282 +R34 +L67 +R52 +R1 +L2 +R63 +L9 +R198 +R63 +L15 +R877 +R76 +L53 +R65 +R19 +R149 +L33 +L744 +R44 +R84 +R62 +R226 +L72 +R58 +L621 +R463 +L3 +L97 +R601 +L301 +R44 +R66 +R3 +L713 +R68 +L45 +R38 +R640 +L5 +R4 +R61 +R11 +R30 +L4 +R74 +L79 +L93 +L637 +R95 +L358 +R69 +L57 +R930 +L42 +L53 +L215 +L32 +R69 +L513 +R97 +L8 +L98 +R153 +R67 +R62 +R171 +L40 +L60 +L74 +L26 +R22 +R61 +L83 +R2 +R67 +R31 +R27 +R56 +R53 +L336 +R353 +L53 +R23 +R52 +R25 +R67 +L707 +R840 +L298 +L49 +R47 +R28 +R94 +R14 +L36 +R78 +L25 +R847 +R42 +L150 +L92 +R806 +R19 +L61 +R136 +R38 +L138 +L54 +L46 +R17 +L17 +R78 +R38 +L43 +L220 +L74 +R21 +R43 +R60 +R59 +L244 +R33 +L69 +R28 +L610 +L57 +R57 +L667 +R10 +L69 +L15 +L18 +L41 +L949 +R139 +L94 +R804 +R59 +R20 +L48 +R911 +R99 +L289 +R348 +R57 +L39 +R359 +R364 +L41 +R16 +L16 +R87 +R113 +R59 +L82 +L126 +R49 +L10 +L56 +R18 +L12 +L45 +R56 +L12 +L39 +L61 +R353 +L7 +L93 +R8 +R96 +L59 +R840 +L77 +R80 +R94 +L874 +R30 +L43 +L64 +L61 +R257 +L28 +R8 +L65 +R66 +R893 +L370 +R65 +L558 +R70 +R15 +L32 +R84 +L46 +R579 +L252 +L76 +R102 +R914 +R12 +R24 +L24 +R43 +L43 +R528 +L28 +L74 +L360 +R72 +R70 +L21 +R73 +R40 +L338 +R861 +L123 +L87 +L22 +R94 +L634 +L39 +R88 +R94 +L94 +L44 +R44 +L8 +L48 +L44 +L92 +L44 +R36 +L10 +L28 +R77 +L39 +L87 +L17 +R71 +R19 +L30 +L208 +L74 +R91 +R29 +L82 +R88 +L18 +R3 +L24 +L34 +L93 +R43 +R3 +L43 +R63 +R43 +R14 +R69 +L1 +R75 +L77 +L23 +L683 +R893 +L39 +R29 +R63 +L2 +R39 +R71 +R37 +L276 +R988 +L20 +R32 +R568 +L72 +R72 +L453 +R18 +R494 +L79 +R193 +L73 +R719 +L494 +R18 +R430 +L89 +L98 +R14 +L680 +R43 +L94 +R531 +R2 +R56 +L58 +L37 +R588 +R42 +R51 +L74 +R30 +L17 +L383 +L75 +R75 +R46 +R54 +L18 +L78 +L4 +R786 +L37 +L71 +R22 +R27 +L59 +R32 +L83 +R94 +R19 +R15 +R55 +R74 +L74 +R44 +R55 +L99 +R21 +R79 +L43 +L34 +L23 +R26 +L26 +R24 +R76 +L44 +L188 +L68 +R80 +R93 +L957 +L32 +L984 +L995 +R7 +R88 +R77 +L63 +L595 +L119 +L369 +L68 +R37 +R21 +R25 +R75 +R79 +L490 +L45 +R48 +L13 +R46 +R78 +R65 +R28 +L13 +L4 +L80 +L632 +R81 +L30 +L32 +L99 +L3 +R84 +R11 +L62 +L49 +L62 +R673 +L236 +R36 +L665 +R9 +R56 +L25 +L75 +R503 +R97 +L23 +R48 +R475 +L6 +R48 +R554 +R4 +R37 +L61 +L76 +R84 +L84 +R2 +L2 +R62 +L13 +L49 +L75 +L370 +L97 +L19 +R91 +L14 +L24 +L71 +R20 +L94 +R30 +R35 +L37 +R55 +R61 +R236 +L27 +L33 +R33 +L9 +R9 +L98 +R49 +R49 +R17 +L87 +L15 +R26 +L41 +L68 +L10 +R5 +L27 +L74 +L2 +L88 +L50 +L86 +R64 +R236 +R19 +R81 +R831 +L662 +R61 +L11 +L95 +L24 +R93 +R25 +L53 +R88 +R815 +R86 +L53 +L69 +R92 +L79 +L17 +R72 +L9 +R250 +L41 +L580 +R26 +R454 +L5 +L1 +R6 +R29 +R30 +R447 +L1 +L54 +R96 +L547 +R25 +L131 +R79 +R27 +R34 +L29 +R91 +L96 +L1 +L99 +L60 +L98 +L10 +R68 +L11 +R4 +L19 +L274 +R88 +R12 +L95 +R24 +R49 +R192 +R435 +R92 +L13 +L884 +R9 +R732 +L41 +R27 +R47 +L480 +L42 +R14 +L81 +R992 +R38 +R93 +R76 +L84 +L939 +R7 +R90 +L58 +R74 +R55 +R75 +R95 +L899 +L3 +L17 +R9 +R11 +L68 +L23 +L9 +R77 +R23 +L79 +L21 +L624 +L76 +R19 +L19 +R458 +R42 +L301 +L524 +R25 +L93 +L31 +L9 +L98 +L40 +R29 +L437 +L21 +R79 +L16 +R92 +R719 +R44 +L415 +L3 +R93 +R7 +L52 +R91 +R61 +R91 +L91 +L88 +R988 +L64 +L336 +L36 +L41 +R939 +L95 +R333 +R15 +L15 +L37 +R61 +R76 +R890 +R61 +R83 +L19 +L72 +L97 +R786 +R68 +R97 +L97 +L25 +R162 +L58 +R6 +R45 +L20 +L10 +L38 +R356 +L29 +R20 +R44 +R78 +L56 +R618 +R7 +R86 +R83 +R31 +R628 +R96 +R58 +R65 +L75 +L72 +L265 +R819 +L61 +L285 +L15 +L65 +R341 +L11 +R642 +R93 +R678 +L795 +R20 +L95 +L50 +R33 +L536 +R852 +R66 +L66 +L22 +L36 +R26 +R30 +L98 +R86 +L37 +L74 +L74 +L61 +L76 +L93 +L58 +R91 +L893 +L35 +L76 +R51 +L76 +R47 +L92 +L36 +L37 +L156 +R47 +L148 +L49 +L23 +L28 +L59 +R22 +R63 +L29 +R3 +L547 +R465 +R207 +R415 +R73 +R15 +L54 +R26 +L93 +R930 +R83 +L62 +R5 +R337 +R301 +R99 +L86 +R89 +L54 +L49 +R66 +L66 +R631 +R869 +R424 +L46 +R22 +R44 +R25 +R41 +R37 +R84 +L43 +L45 +L43 +L23 +R92 +R75 +R98 +R92 +R40 +L941 +R767 +L37 +L63 +L15 +R15 +L15 +L59 +R42 +R83 +R212 +L229 +R666 +L97 +R97 +L44 +R78 +R66 +R62 +R538 +R58 +L83 +R25 +R68 +L68 +L74 +L639 +L87 +L18 +R18 +L22 +L710 +L43 +R567 +L67 +R853 +R8 +R53 +R61 +L69 +R269 +L564 +R419 +L98 +R55 +R88 +L96 +L45 +L16 +L179 +L977 +R353 +L40 +R2 +L43 +L14 +L3 +R30 +L72 +R24 +L24 +R64 +R61 +R31 +L70 +R14 +L33 +L851 +L16 +L420 +L54 +R74 +R468 +L68 +L79 +R51 +R5 +R23 +L846 +L48 +R556 +R75 +R63 +L83 +R78 +R87 +R60 +L18 +R31 +L83 +L835 +R25 +R38 +R79 +L26 +R27 +L57 +L76 +L47 +L98 +R98 +R14 +L71 +L43 +R91 +R9 +L90 +R33 +L43 +R32 +L17 +R26 +L41 +L52 +R93 +R60 +R5 +L6 +R58 +R56 +L6 +L8 +R77 +R23 +R12 +R92 +L4 +R74 +R26 +L26 +R41 +R33 +R77 +R79 +L89 +L45 +R86 +R44 +R88 +L21 +R89 +R41 +L97 +R69 +R55 +R49 +L29 +L28 +R45 +L30 +L25 +R49 +L19 +L6 +L49 +R36 +L41 +L26 +R36 +R33 +R44 +L48 +R10 +R5 +R49 +R1 +L26 +L20 +L4 +R20 +L4 +L18 +L8 +L36 +R44 +L30 +L37 +L18 +R22 +R23 +R17 +R47 +L41 +R1 +R42 +R49 +R31 +L39 +L50 +R39 +L3 +R26 +L21 +L1 +R14 \ No newline at end of file diff --git a/2025/day1/p2/main.py b/2025/day1/p2/main.py new file mode 100644 index 0000000..de1224f --- /dev/null +++ b/2025/day1/p2/main.py @@ -0,0 +1,46 @@ +INPUT = "input.txt" + +with open(INPUT, 'r') as file: + lines: list[str] = file.readlines() + +place = 50 +zeroes = 0 + +# returns (new place, zeroes) +# dir, 0: L, 1: R +def move_dial(place: int, move: int, direction: int) -> tuple[int, int]: + + if direction == 0: + move *= -1 + + temp = place + move + + if temp < 0: + if place == 0: + return (100 + (temp), 0) + return (100 + (temp), 1) + elif temp > 99: + return (abs(100 - temp), 1) + elif temp == 0: + return (temp, 1) + else: + return (temp, 0) + +for line in lines: + line: str = line.strip() + + direction: int = 0 if line[0] == 'L' else 1 + + # We only actually care about the last two numbers + if len(line) > 3: + move = int(line[-2:]) + zeroes += int(line[1]) + else: + move = int(line[1:]) + + place, z = move_dial(place, move, direction) + + zeroes += z + +print(f'Dial Zero Count: {zeroes}') + diff --git a/2025/day1/p2/test.txt b/2025/day1/p2/test.txt new file mode 100644 index 0000000..d03fad7 --- /dev/null +++ b/2025/day1/p2/test.txt @@ -0,0 +1,10 @@ +L68 +L30 +R48 +L5 +R60 +L55 +L1 +L99 +R14 +L82 \ No newline at end of file