Solved 2025 Day 1 Parts 1 & 2
This commit is contained in:
parent
4f07ea9f81
commit
1a711cd261
71
2024/day15/input.txt
Normal file
71
2024/day15/input.txt
Normal file
@ -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<vv>^^^^v^<v^v>>v>><<^>>^v<<>vvv<^>^<^<<vv^>>><>vv^>vv^>^<vv<^^><^>>v<vvv^^^v^v^>>>><vv><>^v^v<<^<>><v^v>^<v^^><<><vv>vv^vv<<<vv^^<<v<v><<^^<v<<>v^^^<^^^>>>v^^<>>^^>>><><^<><><v>vvv<^<v^v^<>^><><>>^>v<^>>><<v<>^>^v^v>v>^>v^v<v<>^v<^^<<^vv<^v><^v<><>vv><^<v>>^<>v<vv<<v<<<v>v^>>>^><>vvv><v<>^<v<vv>^<^>^>^v<v<^<<>><^<^v<^^>^><^<>^v^^<^v>>v<<v><^<^><^><^><<<>^>>>>v^>>>^>v<<<>v^<v^^v<^>><<^<><<^v^v^^^^>^^^v^<<v^^<^>v>><<^v<><^^^<vv>v>^^v^v<vv>><^>v<^^^^<>>>v<<<><<<v^^v^v<^^<>v^vvv^^<>v><>v^^>>v^>v<^vv^v^>>v>^vv><><<^>^>v^^>v^>>^^>v^<<>>^^v^^^>>v><<<<v<<v<v^><v>^<^>^^^<v^vv<><<v^^>^>v><v<>^>><v^<^><^vv<>>^vv><v^>>>^<><vvv^^<v>^^^<>^v^^<><v<>vvv>><>>>^^>^<>v>>v<^^v>^<^^v<v>>v<^^v<v>^<>v>^^<<^<vvv^<<v^<<<><>>>^><^<v^^<v>^v><^<<<<>^v>><><^>^^v^>^<v<>^<vvv>>vv>v>><>^<>>^<v^^<><^>v><<<>>>^vv<<^>vvv<^v<v<<vv^v><<v^<v>><>v^<<<^><<<<<v<v^>v^>>v^>vv^><v^><<>><<^>>>^<v<><v^<<^<>^<vvv^>>v^><><>v^>>><v>^v><^v^<v<><><vv>><v>v^<>v^vvv^>>>v><<<v<<>v<>^<>v^^^^v>v>>v^<^<^<<
|
||||||
|
>>v^><^^^^><^<<vv^^v<^<><><vv<^<v^^><<<^>>vv<v^<^<v><^v^>^v>vv>><^^^^<v>>^v>^><v>>vv>^vvvv^^v^vv><v>>v^^>^vv>>vv^v>vvv>v^<v<^<<^^v^^>><><^>>><<v<>^<<>><>^>^v<<<vv^>>>>>>v>vv>^^v<<^^>v<v^>v>v^<^>vv^<^vv<^v^>^^v^v><>^>^v<>^^><v>v^<^v^><<>^<vv<>>^^<>v><^>><v>v<^>^^<<v<>^^^^>>vv^^^>^>^^v<>^>v>v^v<^^<>^v>v<v^<v<v>v>>>v><^vv^<<v<^<vvvv<^^v^<^><^vv><^^<^>v^>^^^^^<>v>vvv>^^<^<v><>><>^v>v^v^<^<>v>^>^^^><v>v>^<>^<<^v><>^^v<<v>^<><^>>vvvv^<>><v^vvv>^><^<<<<v^<<^^<<>><<^^><v^v^<>v>v>v^^>v<<^>v^vv<vv^>vvv<v>^v^^<v^v<vv<<v<^>>>>^^<v<v<>><>v>v>^>vv^v^<v>v^><vv<>vv>v^<^^<v^^<<><>>vv<v^<vv^^>>>^^^<>v>>vvv^>><<^>v<^^><<vv><<^<vv><^><v>><^^<<^v>^^><<<>^^>><v>>><v<<<<v^>^^>v>v^<^<<>vvvvv<<<^v>vvv<>^^<<^vv<><v^>^v^>^v>>v>v<>^<<^<>v>^>><^>^><>^<<^v^vv<<^><<^<^>v^^>^<<<v>^<v<v>v^v<v>>^vv>^<^>^>><^>^vvvvvv>^>^<><v<>>>vvv^>v^^<>v<^>v>v<<><<^>^v>^><v^>v^<^<>v^<<v><>^>^^v<^>>^vv^<>^v<><^>>v^>^<<^vv<^>vvv^>v><<>^^^v>v<<^>><vvvvvv><>^<><<<>>v<>>v<v^^>vv^>><<^v>>>v>^v>><^>^v>^>^^<v<<vvv^v<>^^v^<<v<^^>v^>>^<v>^^^vvv
|
||||||
|
v<<^<^><><>^>v^><vv^<<<<^>^^>>^<<^^<>^^^v<<v^<v<>><v<<^<><^^v<<<>v<^vvv>v^v^<<>>vv>^^v<^<v^<<<vv^>vv>>>>>>^<^^>^v<<^<<>^^>^>^><v^^v<vvv<v^>^^<^<<vv^<<^>>><^<>v^<>><^<<<v<^^<v^<>v<>^<<><v^<<>>>^v^>>^^v<<>v<v^v^v>^>^^>>^vv^>^<^^^<^^v^><>><vv<^>>v>>^v<^>vvv^>^^<v<^>>^><v^<v<v<<^<><<>^><<^>v^^v>^^v<<<vv>>^<<><v>><<vv^vv>^<v>v^^v><><><<>^>>vv^^>v^>v<<<^^<^>^vv><^^>>^v^^<<^vvvv^v>>v<vv^<>>>v^<^>>>^^<>^<v>>vv^v^<<^^v>^vvvv>^v<>vv<<<><v^^v><vvv<<<v>^><vvv>v<<^><^^><<<^^^^^>v>^vvvvv>^>^<v>^>v>>vv^<^<^v<<^>^>vv<<v>^>>v>v<>><<><><v^>>v^v>^v>^<v^<<^>^>>vv>>v<<<><^>>>vv^>v<vv>>v^vvv>><<^<v>^<^<>>v<<v>>>^><>^^^^vv<^^<^vv><vv<^>>v^<v^v>^v^>>^v>^><v>v^>^>^vv>^^<v>^>>^>^v<^^^v^>>>^>^><vv<<^<^<^>v^<<^^>^<^>vv<^^^v^^>^^v<>^^<^v^<^>^^><><>v^vv^>^>>>>^>v>vv><^vv<<<^>^<<^v^<^>><<^<>^><>^v^>vv>^v>>v<>v<<v^^><v^<^<v^vvvv<>^v<><vv^<<^^v^><>>>^^^<<^>>>v<<>>vv<v<v><v>v>><v>>^>v^v<v^<^^>^vv>>>v<^<<<v^v<<>v><vvv<v<^>^><>v^^^><<^<<>><<<<^>^<>>^^^>^>vvv<<<<v>>v^<vv><><^<v^v^<><v^^>^<^<^>^^v^>v^<v><v<><v>>><<vv<>><>^
|
||||||
|
>v^vv>^^>^v^>^<>><^vv<>>^v>v<<<^<<^>>>>^^v^>v^<vvv>>>^><<<^^v<v>^>^^^>><><<^vvvvv^<>^>^>^<^^<>^>vv<>^>^>v>^>>vv<v^<>>v^<<^^v^^v<v^>^^v<<>^^v<>v>vv<^<v<<<<<>^><<^<^^>vv>^<v<><^<^vvv<>>^><^^<>vvvv<<^^><<v<<v<<v>vvv^>^<><<^>>v><vv>v><vv<^<<<<<<^><<>v^vvv<>v>>>^<v>>v<^>v^v^^<^>>><>>>^<>v<>>>>>>><v^vv>><>v>v<<<v<<>v^>v<<vvv>^^<>><>><^^^^^^v>vv^<^^<><>^vv<v>^v^<<^v>>^v^v>^v>vv<^<<^v<>vv<>vv>v>^vv^<^>vv>v<v<>^^v>v<v^>v^<>v^^>^<^^vv<<><>>^>vv^<^>v^vvvv^v^<^v<<v^<>v<^<^^>v^^>^v><^v>v<v<>>>^^vv<v><^v<<<>^<^>v<<<v><<^<^>v<>^vvv<<<<v^<>v^>v^^<^^v<>><<><^<>>^vv>^^<>v<^^<>^>^<v^^^<^<^>^v<^<^^vvvvv<v>>^>^<v<v^^>v>^>vv^v><>^<v^>^>v>>^^^vv^<<^v^v^v^<v^<vv<<^<<<^><<<><v^v^>>><^<><>>^>v<>v>v>>>v>^^>><>>v<^<>^<>>^v>>>v^>>>v>v<^<^v<vv^v>>v^<<^v<v<<<^<>>>^<v<><><vv<<<><^^vv^<>vv<^<<><>>^v<>>v^vv^<<<^vv^vv^^v<^v<<v>>>^v>^<>^v>v<<^vv^>>^^^<^>><v<<<><v<v^vv<v>>><vv>>^<<<^v>v<>><<v<v^^^<<v>^v>^><<^><>vvv^^^vv^><><v^^><v>><><>^vv><vvv<v>^>^^<^>v^<vv<<<<>v<v>^^^^><^v>>^<^<>^<^^v<^^>>>>>><^<^v<^v<v<vv^>v<^>v<>^>>>
|
||||||
|
<<^>v>><>><><<>><v^>^>>^>^<>^^v<<<v^v<vv^<><^>^v><^><>vvvv^<^^>>v<<v^<^v<<vv<vv>>^>^v>^v>>^vv>^<>^v><^<^vv^vv^^<<>^^v^v>^v<>>vv<>v>vv<^<vvvv^<^>^v^v^<<vvv<v<^><><^>^^>^<>v<^v>^<>v<^<^<^>>^<<^^<v^^^^>v^vv^><<v^^v>^<>^v^>^^v>^>><^>^>^^v><<^<^>v<^><v>>>v>v^>^<<v<><^><^^<>^^vvv^v<v>><v><v^v^>v<><<v<<v^^>^<>v<v<><<vv><^><>^<v>>v^^>v>^^^>v^v<<>>>^v<><>^v^<^<><^v>>v<<<^v<v^^^v^^<^^v>>^v^^v^>^<<^<v>^<v<>>v^>^v<^^<>><><^v>^<><<>^><<>>v>^^v^><>>>>v<<><>>^^>^^vvv<<v^><>><>v<<<vv^>v^v>vvv<^><v^>^vv><v>>>v>>^><^vv<^^<^^^<>v>^<^<vvv<>><vv<v^vv^^v>v^>vvv>^^<vv<<>><v^^vvv>^<<<>^v>vv>><<^v^>v^>^<<>^>v<>><^^>^v>^><^>><>^v<>v^<><^>^<<v<>>^>>^>>>^<<<v<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^<<>>vv>>v<^^^v><>v>^v^<>><^^^vv^>^^vv<>><vv<<^<<v^^<v>>><^<>v><^>vv>>v^^^>v>v>>vvv<>^>^^<^vv^<^<>^><^<>^><v^<>^><<v^v>v^v>^^>v^^>vv^>^v>^>>v>^>v<<^v<^<>>vvv<^^vv^<
|
||||||
|
<<vvvv^<>>>vvv><<v<>^<>>^^>v<<v<^^v>>^v^^^v<>v^^v^>^^<^^<^^><<^^^>^^><>v<^^><^<<vv^v<<>v>><^^<^>^<v^>>v<^vvv<^^>>><>><v>vvvv^<<<v>><vv^vvv^><>^<>vvv^<vv>>v^^^v<^^^^^<^^<<><^^^^v<<>><^>>v<vv>>>>>v^v>v><<^>v<^^<><<>v<<<v^^^><v^^v>^<>^<^>^v><v>v^<>^v<>><v^vvv<<<<><<<^^<v^>v^v<<^^><>><v<^^^v<<^^<^>vv<<v<<^><<^<>><^^><v<>>^<>^<<^^<v^vv^vvv^>>><vv<<>>>><<><>^>^^>>v^v^>^>v>v>vv<><v<v^^^^vv>>^^>><<^v^>^vv>>v>><<><>^^vv^v^>>vv^>v^>^>vv<v>vv<^>^>^><^>v^<^^vv>>^<v<^><>^^^^<^><<^<^^^v>v^<<><<vv>v<vvv>><v<<<^<^^>>v><^>^vvv<v^v<^><^<v>><<<v<<^^v<<vv>^vv<vv<<>vv>v>v>v>><><<<>v^v>^^v<v><v>v<>^^>><>>>^>v<v^v>>^^v^^<>^>^^vv<><<<v<^<v<^<v>v<^<^vv<v<<><v<<v^^^v<>v^vvv<<v<>>>^^^v>v^<<<^^>^>v^^v^>^>^vv><^^^>vv<v<<^v^v>>v^<^^^v^^<vv<<<><v><>>^vvv<v^vvv<<v^vv<v^v^>vv<v<>>^<>>><^><><<<v>^>>>^<<<v>>v^v^<>>v^^^vv^^<>^><^<>>>v<v<><^>v^<vvvvvv^<<vv<<>^^>>vv<^<>v^>>><vv><v>>^>><>^<<<v><>^<v^^<v<vvv^v>v^v>vvvv^^v^v^v>><<>>><^^>><v^>v>v<^>^<>^<><<<v^>v^v^><>^><v<>^v>^^><^^vvv^><><<vv><<^>^<<<<v><<^^>^<v<>vvv<v^>^v<v^
|
||||||
|
^v<>^^^<<<v^v^vv<^<>>^^<v>^>><<^v^<^>>^v<v>^v^><<>v<<^<^<<^>v^<v^>>v>^v^^vv>^><<^v>^<^>^>v^^v<<><>^>^<>><^><<^v<<vv>^vv^v^>^^>^^>^<<^<<^<<v<v^^><v^^>v^>^>>>vv^<>>^<>v>>>^><<<><>^>^<^v>>^<v^>>>>v<>v<^vv^<v>^<v>^>v<v<>>v^>vv<^<><>vv>^^<v<><<^v^>^v^vv>v<<v^v<>v^v>v><^^<v^>v^^v<><v^>vv^>^<>v^<vvv<vv>^>^vv>v^<>vvv<^vv<>^^<<^^<<vvv>>v^v^<^^^<v<^v^^<>^>^^<>>^^v^v^><^v><>^><v<v^<>v^><>^vv<^<<>vvv^^<v^<^>><v>v>^v>v>^^v><v<v<vv^>>vv><^<>^>vv<>v<>>>^<>^^^vv>v^>v<>v^vv^^<vv<v<v>vv>><v^vv>><>v<vv>^><<vv<>v^<<>^<><v<>vv><<<^<>>v^<>^><^<>^>^v^><^^<v<>>vv^><^v^^>v^v<^^^<>^v^^<<><<>v><>>>><>v<<^^^vv>^^>^<<<>>>v>>v>>^>^><vv^^v^vv^^<vv>v^^<v<><^vv><vv<v<v^^>^<<<>^><>^v<v><v^v><>^v>^><<^>^>v><<v<<^^vv^^>^^<^>v>v>^v<<v^v^^vvvv>^<^vv>v>v>>v>>><v<^><^<vv<^>^>v>^^<>^^v>^<<<>^<vvvv><^v>v>^^^>vv^<><v><<<>^^^v<<<<<<>v<^v^>>>vv<^<><^>^^>>><>>^>>>><v^<>^^<>^^^><v<<^vvv>vv>v<<<><<v<><v>vv>v>>^v<v>^<vv^>^vv^<v>>v>>><>v^^>><>^^<<>vv^v<>^<<><<v^^>v<^v^>>^<v<v>v><>vvv^<<^>^>v<>^vv<>^>>^<><>>>v^<>v^v^<^>><vv><<<>>^v>vv^
|
||||||
|
>v^vv><^>>^v^<<<<>vv>^<vv^<v^vvv^^<><^<v>v^<><<>vvv^<^v^>>><v>v>^^>>^vv^^v><v><><<^>^<v^^v><<>^><>^<v>v^<><><<>v<><^^><^<<>>>v^>>v^^^>^^v<v<<^>><>>v>^^v^<v^^>^^v<^^v^v>^>>v><>vvv>vv^^><<<v^>^><v<v^v>^>>^>^<v>>>^>><>>v<<<<v^v^v<>>^<v>v<<v>^<><vv^>^><<v^v<^>>><>>^v>^v>>v<v^>^<<<^v>>><><^vv>>v<^vvv^>><>>>v<<>vv><>v^^v<v>>v<v^>v><<<v<^>^vv>v<>v^^<<<v<^<>>^<<>^^>^><<^^>^^>v^>>^>v>^v^v>v<>>>^<<<<^v^^>^>^^v>^>^v>^^>^vv<>vv^><v<v>>>^v^>><>><<>v^>>v<^v<><><<<>^v^>>^^<v^>v^^>vvvv>^><<><v^>v^^^^<^><vv<v<v<<<v<<v<v>v<vv^<^v<^v^^v<<^v><^<>^^v<>>^<^<>v>^>><<><v<^>><<>^^^v>^^^>^v^<>v^>><>^<vv^<v<^>>>vvv>^^>vv<^>^<<>^v>><vv<<^>^<^^vv<^>vv<^>^v>>>v^>>^<v>v><><v^<<>v><^<v>^>><>^v<<vv<^><v>>vv>>>^v<^v<<<>v^<>><>^vvvv^vv>>>>^v>><^v><^<v^v>^<<v^^^vv<^v<<<<<^v^>v<v<v^>^v>><<^^><>^>^>^<v^v>v><^<v^<^^v<^^^^<>^<>v^>v<>^v^vv><<<<v^v>^^><v^^^^>>^v>v>v<v>^<v<v<vvv<^<^v>>><^<<>>><<v>>><^v>><v<><v<><^<^^v^^>>>>>>>>^<<<v^>^><^>vvv^^^^<>^<v>vv>^vv^v^>v<>>^>>^><^v<v<<^><vvvv^<^^^<<v^^<v^>><<<^<<<v>v^><>>v<><><^v<^>v^v
|
||||||
|
><>^vv<v<^>><^<><<^^^^v<^>v<<><^^^v<vv^v^<^v^<^v<v<>vv<v^<<<^>v^v^^v^>v>><>^^>>>vv^<<^>^>><v^vv^>v>v^^<<>^>v^^v<^v>^>vv^v<><>^>>^>v<<>v^^<^^^>>v>><v^v>><^^^vvv<vv^<v<<^>v<^^v<vv>v<v>v>v^^v^^>^v^>^v^><v><<v>^<v>^<>><v<<>v^<<>v>v<<<^^^v^^<>v<v^>^>>vvv>v><vv<v>v>^v^v<<^^vv><>^v>^v^>>^^v<>v>v<^^^<<<v<>v<v<v>vv^vv><<v^v><vv>>^<>><<^^<v<^>>^v<^vv<<<<>>><>^><<vv^^>v<vvv<<^v>vv><vvv<v^^>>>v^v>><>>^<>v><><v>v<<<<^^<v^<v^>v<<v^<^v<>^>v<<<^^^>^>v<^v^<<^<<>><v><v>><v^<^^^>v<<v>^vv><>>^>>>v^^vv^<>>^^^v^<>><>^vvv^v>^^v>^^<^^v<<^>^><>^v>v<vvv^<<v>vv>>>>^^^><<<>><>v^v<vv>v^^^^<>v<^^v^v<v^vv^v>>>>^^><><>>>>^v^>^v^v^vvvv>^^^<^><>^^<vv><v^<^v<><vvv>v>>><^<^^vv><vv<<>>^^^v^v><>vv><<>^v^>>^v>>><^vv^>>>>vvv^^vvvvvv<^vvvv<<v<<vvv^^^>v^<<^vv^<^>v^><v<>>v^<v^^^^v^^^^<<>>>v^^<^vv>><v<<<v^v^^<>>^vv^<v>>>>v^v<>^^>^>v<><vv^<<v^v>vv<<<<^<<<>^^v^v^^<<v^v^<v^^>><^<>v>^v>vv^><<v^v^^vv><^>><^<^^<v><<v<>^>>>>vvv<^>vv>^>v<>><<^>^vvv^>>v<><^>v^v<^<>>><^^^<v>vv<v^<^>^<<<^^<v^^v<^>^<>^^>v>^<v<>v><>^<<<^^^^<<><^^v>><<<v><^<^
|
||||||
|
vv>>^vv^^<^vv<^v>^<>^<v<^v^v^v^^>^^vvv>^<>^<<<<^^><vv^vvvv^>^^>>v<^><v^vv^^^<>>v<^vv^^^<^<<^^<>^<^^<^<v<<^>>>^<^><>>>vv>^>v^^>v><^<^<v>><v<v>>>v<^^>><v^v<vv>^v<vv<>^^<<>>v<v<^^^<<v^^<<^<^^<^<>vv<v>>v<<<<>v<v>><>^^vvv<<>><>>^v<vv<v<v^><^>>^v<v^<>>>>>v>v<>>^<>><>>v<<>v<^>^^v^^vv<<^<<<><^<<vvv<^^>>>v^^^v><<^<^<^^>v<<><<^>>v>^v^<<<^vv>>>^^^vv<<<>^>><>v><<<v^^^<^><>>v>^vvv<<v^>v<v^v>>><<<vv>>^v<^><<^v<<^v^>>>v<^<^>^^><>>v>^^^>vv>vv<v<vv<<<>vv<>v^>^^vv^<>>vvv>^<>v<>vv^v>v^^>>><vvv<v<>>^^v><vv<<vvv<>>v>^^<>^><v^><v^^^^<vv>^<v>v^v^v<>v>^v^v^>^<<v>><vvv^^v<^>>vv><><<v>>>>vv>^^vvv>v<vv<<vv<<^<^><<v>v<<v^v^v<v>>v<<<<^vv>v^^>>v<^>>v^>^<>>v<<^<><vv>v^^^v^>><vv^>>^^<>^<<<>>^<<^v<>^<<<vv>>>^v^<v>^v<<<^^^>v<vv>v>^<>v><>>v<^^<<^^><<^<v^^^^>^>v<>v>^<<<v<>v^^><v>>v^v>vv<>><<>^^^^>>^vv<v^v><>>>vvv^<<v<<v>><<>^^<^>^^><^^v^v^^>v^v^<<^v>>v<v>v><>v>>vvv^v<^<v>>>^^<><v<^v>vv><v<^<^>^>vv^v^<^^vv>^>><v>>^>vvvv<^<vvvvv^>v><>><v>>v<^<^v<v>^>>v^>v^^^vv^v>v<^v>^^>>><v^v<>v>vv<vv^v<v<>^v<^^><v^^^>^<>v^v^v^^vv^<<<v^>>
|
||||||
|
^<<v>^v<v^<^^^v^^v><^v>^^^<v>>><<<<^v^><^v>v>>^><<vv<<^<^^v<v>>v>^<>vv>vv^^>>v<<><>v>vvv^v<>v^^<^v<<^^^^<^>>v<<<^^>v>vv<>^^<^^^>^<^v<<><^<v>>vv><<>^vv><^<v><^^^^vv>^^<>>v>^v><v><^v^>vv><<^v>^v<<>v^<>^<^>^><v<>v^>^v<>v>^<<<vvv^^v>>vv>^^^>^^><v<^^><>v>><^v^>^<v^<^^^v^^>v<v>^>><vv^>><<^v<>><<<v>^v<v<>v<^>>^^>^>v>v^^>v>vvv^>>v>>^<<vv><v^vv<>vv<v<v<v<><v>v^^v^<>^^^^v>>^v^<^<^^>><^^<><>^v<^>>^>^^<vv><<<><<^>>v>vv^^v<v^v^v>^<<<<^^^>v><>><vvv>>>>v^v^>>>>>>v^^<<><<^>^<^>^<>v>v><v<v<^<>><><>vvv>>v<<vv^<><>^>^^<^<^v^^>^<<^^<^>^^<<>^><^<^><<<v>v<<>>v^<<>>>^v<>v<vv>>>^vv^>v^>^^v<^^<><>v<>>v^^><v<<<<^^>><vvv><v><<<<v<^<<^vv<>>><>>>^^<>^^^^^^v<v>vv<<<<v^vvv>v^v<^<<^v<>^v>>^v<<<<^<>>vv^vv<v><^>>>>>^v>v>>^^v^<<><<>v<vv<v^vv<v>^<><<<v>^<><^><><vvv>v^^^><vv>>v><^^^<<<><^<^<<>^^^v^v^<vv<<>><v<v^<>^<vv>v><>><^<^^>vv>>v>>><>^<v<v><^v^<v>>^>>v<^v><^^v><v^<^vv<v>^<v><<<>>^vv<^^^<>>><^<^<v<>^<v>><v<<>^<v<v<<>>>>^<v<<<><>><^<>^>>v>^^<>^v^vv^>><^>v<vv<>>v^vv><^^<v^v><^^<v>^^^^<^v^^>v<v^^<^^>v>^><v^<^>>vvv<^>>vv>
|
||||||
|
<^<^<v^^v^v>>^>vv>>^><<v^<><>^<^>vv<>^<v<^^<^v<<>^v^^><<<<vv>vvvv>vv<^><v<^<<^v^<v<<><^^>>^><^v^<^^><v>v^<<v>>^>>^^^<>v<v^><>>^^vvvv<^<<<>^<>><^^<v<<^^vv^^>v<<<v>>v<><v<<<^^<^^>^>><^>v^^<>^>><>vv>^^<vv><^^vvv^v<^<^v>^^<v^^<><v<^><v^><^>v>^>>>^<vvv>v>>v^v><>><><<<v^v^^<^v>^>^<>>^^v<><^v^<<^^<^v^vvv>>v^^>>v>><^v^>><<^>>><<>^v<^^^<><v>v<^>>><>v^><v>>vv<<><^><<<<^v<<v<><<v^^<vv><v<<^v>v^<^>>v><<^><^<>^^<vv<<<<^vv<<<>vv>^<<<<<^>^><v>^^><><^^>><<>^^><<^v>^<<>v<>v<v^<^^v><<><<<><>>^<^^v^^<v<vv^>^>v<<^^^<v^v><<^><^^v<>^vv^<<<^<<<v<>v<^^>^><^^<^<^<v><>vv>vv>^^^^<<<<>v<<><<<^^>^>^><v<v<>vv>^><^><<^<<^<>>v<^><>^v<vv^^<<>v<><v<<v>>>><v^<^^<>^>>^<^v^^<>v^v>^<<v>><v^<v<^v>>>^^^v^<>v<<vv><v>><v>v><<^v>^<^<<<^^^<^vv^<>v<<v^v><>^vvv^v^^^>v>>>v^^<^v^^^>^v^^^>v<^v<v><<^>><^v^<vv^<>>^v<v<v<>^v<<>>>>>^v^^v<<>v<<v^>^v<<><v^>vv<vvv>^vv^<^<vv><v^^>><>><<><^v^>v^>^<<>^>^^vv^^<<^>><v^v>^<v<v^^v^<>>vvvv^<>v>v<^><v<v><^^<v^^vv^<^<<<vv>>^v<vvv<v<^>>>v^><>^^^^^^v^<v^<^v<v^>>>v<v<vv<^^<><><v<^v^<^^<<>vv^^^<>^<^^<v><
|
||||||
|
>>^v<<v><<^>v><<^<^<<<vvv>^^>>v<>^<^<^^^<v>v<vv^>>v<>v^><>v>^<>vv>><^^<^<>>^vv<vv>^vvvv<<^<>><>v>>^><>v^vv<^v^>v^^vv<<>v<<vv><^^>>v<v>^<>^^^><>v^<<>vv^><<>^>>>>^<^<^^>v>><^^v>v^v<><><^^^^><>^<v^<>^<<>vv<v^>vv<v^^>^^><v>v^v>v^^>>><<^v>>><<<<><<>v>>v<<v^>vv<v^v<^v^v>^>>vv^vvvvv^>v^vv>^<><^><v^v<>^>vv>>^vv^v><^<><v<<>>^><^vv^<v<<v<^<<vv>v^<^v<<<^^v<>><^v<v^^v^<<v<>^>^>>>v<<vvvv><^v<>>><vv<<>>vv^>^^vv>^vv<<<>^v^<vv><v>^v>vvv^^^v<vv<^<<v<>v<^<vv<>>^^<v<><<>v>vvv^>^>vv><<>>v>><<>v<v<<^v^<>>v<>^^^^>><vv^><<>vv^><<<<^<<v<<<<^^v>^vv>>^<^^^<^v><v^vv^<v<<<<<<>><^vv<>v>>v<><<^<>>vv><><vv^><^v<<<^^>>v>^^^^v<<v<v^<<><<^^^vvv^^^v>><v<<<^<>vv^<^^<>v^>>^^v^vv<v^v>^><^^>>^>>vv>v<>^^>v<vv<v^>>v>v^<>v>><^^vvvv^<<<>v<v>^<<^^>^^<vv>^><^vvvv>>v^<v^>^>>>v<<<<<><v<v>v>>v>^>v^<<><^^>><v^^v<^<<<v^<><^<^>^>v<>^>v^^v<vvv>^<<^^>v<vvvvv>><<^>><<v<>^v>v>^v^>v<v^<^v>v^>vv^><<>^^<v<<^<v<>^<vv<^v<>>>>v>>^<<v>>v>v<^<<^v^<><>vvv<^<>v><v^^^^^v^vvv^^>>><<>v<v<v^v<><^^^<^><<><>^>>>>^^>><>^^v<^^^<>^^^><>>>v>^>^<v>v^<>v>^>v>v<
|
||||||
|
^>v<v^^<v<v><v>v>^<<<<^><<<v^>^>^^<^^<^<^v<^><^v>^<^vvvv><><<^^<v<v<vv>v>^^<v^><^v>>^>><^v^<^<v<>^<^vv>v^vvv^^><>>v>>^<^^^<><v<^<^^<<^vvvv^>v^^<^>^>v^<>^<<><v<v<<<><v>>>>^^v^^^<>>>>vv<v^<<<<<^><>>^^v<<><<v>>>v<>^<<^<^v><^>v<v>^<vv>^><v<^^^^v^v<<v<v<v>>vv>^^v><><<<vv>^vv^v>v<^^vv^v^^<^<^^vvv^^^^^v^^><vv<^>^^><v^v^>^>^>>>^>v^>v<v<v><^^<>v^vv^vv<>v^^v><v>^v<^^^<v>v><v^>><<^>><^>vvv^vv<^><v^^^vv<>v^^<>^<<^^>vv<<v>^>^>v><<^<v>>^>^v^^>v><>>>^^^^^v^vv<<^<^^v^v<v>vv^vvv>v^<^v^^>v^vv>^<v^<>v^v>>>v<^<v<<>>v^v^<<<v>><<v>><^vv>v>>>>^v><>><>v^vvv>v>^>v>>><<><><v<vv>v<vv^vv<>^v^>^<v>v^^>>^<<v><>><^<>>><>v^v<^v<v^>vv>^v<<^<><v>><v^>^<vv^^v>><>>^>^v>>vv>>><<<<<<v^v>>^<<<<v<><^^^^^^^>v<>^>^v<><<^>>><^>^^^^v>>^^>v^>v<^v^v>>v^<v^><><><>><v>v>^>>>^<<><^<vvv^^v<<^<<^v^<>^^>^<v^^>>v>^v<>v^<>>^><^^<vv><<^^^<^>^<<<>>^vv><>^<^^^>^<><^v><<<<^>^>v<>v^>>^^vv^<v^<v<^vv^vv^>vv>^<><^v<^^<>v<vv^vv>v>>^^<^v<<^><v>^v<^<^>v^^^v^<><^<<^<<<v>>>>^><v>^>^^vvv>v><v>^v><vv^<<><v>^>v<<v^^v^v^>vv<v>v>vv<v<v<^v><<^>^^v>^<vv>>v<v
|
||||||
|
^<<<>^^<>v<v^>v<v^v^^^<>v^^^v^^<v><v<^^^^v^<>^^>^v^<^>^<^<^><><<>^^^v<>><><>>>>>vv^v^^v>vv^<<^<<v>>^^<>>^<>^vvv^vvvv<<<<v<v^v^v<^^>v<>v>>v<>^<^<^<^v<<>v>^<vv<^v^<><<>>v^<v>vvv^>^<<<^<v<v^<v<^^<>><><<>><>>^v>vv<<vv><^^^^^v<v^>vv^><><v^>v^^^<v>v^^^^vv^^v<<^><<v^>^^<^<^vvv<vv<^v>>v>>>v<v^>v<v<<>v^v<vv><^<vvv<>><^v^v<<^^<>>><>^^<^<<v<^>vv^^>v>v^>v^^>v>v>v>^><^<><v^^<vvv^>><><^v^<v^>vv<v<>>>^<<^<^^<v^<v>>v<>^>>^^vv>>^^vv<v>>^^^<v<v<^>^>^>^<>>v<<^^v>^^^v^<>v^><<>>^><^>><v<<v><vvv^^^^v>vv^<<<^^v>>^^<^v^v<><^<^vv<<v><v^>>v<^<v>>>><^v<<^<^<vv<<^>vv<^>>><^>^<^<<^^^^<v^<v^<v^>^<^>v<>v^^>^<v^>^>^>^v<^^<<^>>^>v>v>>^<^>>vvv^>>^<<v^vvv>vv^>v<vvvv>><^v^<vv>v>^v>^^>v>^<>vv<vv<<vv^^>>^v<^^v><>v<^<>v^>><v><^><>><v>><^^v<v<<v^v<>v<^^<<^^<<<<^<><<>v><>>>>>v><>>^^><v<^^v<<v<>v<vvv<>><>>^<v^v>>><v^^>><v<>>v<>^<>><>vvv^>>v>^>v^>v><^<v^>>><^^v>^<<v<^v^^v><v^^v>^v^<>^v>v^><^<v>^vv<><>^vv>vv<vvv><v^<>><^<<><vvv>v><<vv^><<<>><><^^v^vv<v>>>^>>>v>^<<<<^>v^>>v<^>v><<v^^>^>^>v>^<v>v^v>v>>><^>>v<v<<^v<v<<v>vvvvv<v^^^<
|
||||||
|
<^><<^>v^v>>^>^vv<v^v><>v<v<>>^<^^<>^>vv<^v<^^v>^<^^<<<>^>vv>^v^^vv><<>^vv>v^>>v<^<<<^><>v><^><<vvv^<<^vv>v<><><^v>v^v<v^<<>^<^>>vv^v^v^<^^vv^^v^v^v<^<>>v<<><v^v<^^v^^<^<>v<>>>>>>v^>>^v^<^>^>v>^^v<<^<>>><vv^>^>><<>>^><v<>vv<><vv>v^><><>^>^<^<^v^^>>v<>vv^>>>>^<v^^><><<<v^^>><><^^<^><><^>v>v>v^vv<<v><v>^^<^^>><^><<<v>>^^^^>>v<v>>v<><>v<^v>v<v>>v<v<<^vv>^v>>^<>>><v>v^^v^>^<v<>>><vvv<<^>>v^v^>^>>^<><>>^<<>^vv^^>^v<>>^^^vv<^>^<v^v^vvv^v>^vv^^^<^^><v<^><vvv<>v>^^>>v^<v^<^>>>>>v^><>>>^^<<<^v^v^^<v<^v><^v><>^^vvvv^<<<v^vv<^v^v<v^<v<<^vv^^v<<<<>>^<>>>v^<>^>^<>>>>^<<>^^^>v^<>v><<>>>^v^vvv^v>v><v<>v><<vv<^<^>^>vv>^>>^v^<^><<>^v^v>>>^<v>^v^<>>^<>v>^><><v>>^<^v<v^vv^><^<<<^vv^v^<>^><v<v>>v>>^<>^v^>vv^^^^v>>^>>vv>>^v<<<^>^^>^<v>vv^<<<^^>>^<><^<<^<vvv^<>v<>^^^<vv<vv^>v^>><vv^<^^><<>v^vv<><<v^<<v^>>^>><<v>>^^v><<^^<^<<<><v<v<^<<vv^<vv^^>>v<^>^>>v<^<^<<>^^^^^<v<^>^^v>>v^^>^><><^v<<<^>>>^^^<v^vv^^<v>^>v<v^<^^<<vv<>^>>^>>^><^<>vv>^>v<><^<<>v<<^>vv>^^v>^>^v^>^>^>^^><^>v^>><^<<v^>^vv^<<<>^^v<vv<^>v>^<>vv><
|
||||||
|
^^<v>><v^vv^>^vvv<v^vv<vv^<v^<><v<>v>^<<>^<vvvvv<vv>^<>>^vv^^^><^<<<v<><vv^<<<^^>>v>><^v>v^>^v<^v^>><v>^<^v<v^v>^^^>v><v^<<^^<^^^^^<v>^<>>^vv>v<^v><>^v<><v^v>^><<>><v^<>>v>>v>vvv^v><v^^<<>vv^><<><><vv^v><v>vv>>^v^<<^v>><><><>>><v<v<<<v<>><<^^<>>vv<>v^><^>>^^^v<>v>v>^^vv^v<>^>v^<>^<^>><>>><<>v>><>^v^v><>v>>^>><^^<<^v^>^>^<^<>>v<<^^^vv><<<^v>^^<v>v<vv^<^<>v^^^>>v>v>v<>vv<^<>vv><><>><^>>vv^vv^^^<><>^<v^vvv>^<>vv<<v>v^<>>v^^^v><>><><v^>^v^<<^^v>vv<^>>v^<vv>vv^^>>><><v^v^<v<<>v^^>^v^^v^<<>>v>^^v<>v>>v^v<v^>v^><v^v>^<^<^<^vvv>v<^<^<<^<<>^<v<^>v>>>>^^>v<^v<^>v^<>>v><vv<>>><^^<^v<^^^vv>>>>v<v^^v<<>^^>^>^<><<>v^v>^^vv^>><>>^vv^<v<<<^v>^<>v>v>>>^v<><v^^^<<><v<><v^v<^<<vv^><>^>^>^<>>v^><<><^^<^><<^vv<>^>>^^^v^^<^<><^v<v>>^<^^v^v<<v^v^<vvvv^<<>><<v>v^>v<v<<>^^>vv^<><v<v><^<><^<^>v>>v<v<vv^^<<^^<>^<v^<^^v^^>^vv<^<^>^>><vv<vv>v>^<>>v^><v<^>v>^><vv>^^<><>v<v>v<>^<^v^<><v<vvv<^^><v>^^>v><^<>>vv>v^<>^<^v><<<^^>^v^^><v^<vv>^^^v>^v>v>>^^v<^v^<>>><>v<>vv^>>^vv>v^v<v>^vvv><^><>v^><<<<^<v^v><v<<^^><vv>v^<^>
|
||||||
|
^>>^^^vv>>^^<<><<^v>>><^>^v^^v^v<<vv^<^>><v^>vv^><^<^^v^>><<^>><>v^v<v>^^vvv<<<vv>^^^><^^v<v<<<><<<^>><^><^^><<>^><>>^<vvvv^^<^>v><v>><>>^><^^^^^vv>v<<><vv<^^^v><^>>^<v>^vv^>>^vv<vvvvv<^><^vv^^>vv<^><v^>^^v><><<<v<^>>v>>>^v>^vv>>>v^<>><v>>vv^<^v>v>v><>vv^>>>^v<>v^<vv^^vv>v<v<<^^vv><v>^^>v<><<v><>><>^v^vv^<^<^>^>><>^<>^<vv^v<><v>^<>v<>><v<>><<v>vv^>v<vv><<v>^<><^<><^>>^v<vv^^v^>^><^vvvv^<>^vv<><<^^^v^<>^vv>v^<v<>v>v>^^<<^^>^vv<v><v<v<<^<><<<><^v^^>^<<><<^<v^<^><^>^<^<>^^>><^^<v>vv<v^v>v>><<^<^^<v^>^^<^<^^<v^<<><>v^>v^^v><<^><^^^^<>^><>v>^v<vv>^vv^^>>^^>>v^<<<^vv^>vvv^^^^<v<>>v<<>>><^v<><<v>v^v^^^v^<>>v^v>^>><^^<<v>>><<^^>>v^^<^>>^>vv^^v<<v^<v<^>^<v><<<v^v^^><<v>^^^v<v>>^>>^><^^vvv^^>>>^v<v<^>^v>>v^>><^v^v^><>v><>v>vv^>>><^<^vv<><<^<<><<^^^^>v<^>v<v<><vvv>^>>vvv>v>^<^v>^vv<<^<^v<>v<<v^^v<>>^^<>>^><<vv<><<v^v>>^^v^<><^v>^>^>>>^^<^^>vvvv^vv<v^^<<><>^>v^v>><v^<<<v<^v>vvv>>v<<>^vv<v>^vv><>^^<<^<<<<<<<>^^<>v<<<^<<<<<<><>^>^vvvv<<^>><^^^vv^>v^v<<>^><v^<><v>>^<vv^vv>^>v^<<<<vv><<<<^<<>^<>v^v^^v
|
||||||
|
v^v^<<v>vv^^><>v><^^^<v<>^^>>>>>^<^<>^^<^<<>>vv<>>v^>^^><<^^<v>^^>v>>><v<v><<><>v^^v>^vv<v<vv<v<><>>v^><<vv^<<<^>v<<v>>>>>v<^vv<>>>v>^<^>^>>^>^^><>^^^v<^v^<vv>v><^<>v^<>>^<<^<>>^^vv^v^<<<^>v<<<<^<v<<<<>^><v>>v><<<>vv^<^>^^<>>v<v^<v^><^^v<<^>^^v^^>><^vv<><<>>^^<vv<<^v<^><>>vv^^^<>>^v>v^v^v^>^v<><>^vvv>><<^>v<v>^^<<^v<<v<^<>v^<^>>vv>v^v<vvv<>vv^^>^<v><<<><^><<<v><v^>v^v>v>><^>^><<v<><vv><v<^vv<^><vv>>^v<v><<v^^>^^><vv<v>><v>v<^vv^^v^<v>^vv><vv^^^>^><>^^<v>><>vv>>^v>>>>v>><>v^v^^<^>v<^>>^>vvvv>^^><^<v^^vv^v^<^><vv^^^>^^><><^vv<^<^vv^^<<vv<v<^>vv^^><v<>v><><<v>^><v^><v>^<^vvvv<^<v<v^v<v><>><><>v<^>><<^<<^v<v><v<>>v><><<<vv^^><vv^<v<vv>><^><>v^v^v>^v>>^^vv<><v>>><><>v^v>^^<^<v>^^>vvv<v><^^>>v^>>v^^v<><<^v>><^>>^<v<>v^><>^>v><^><<^v^^v>^><>>>vvv<v^^<><^<<<<^^vv><<>vv^v>v<>vv>v^^v<^><vvv>>vvv<v<^^<<<<<><v^>>^>>v><^v^<^<><<<v<v<^v^^v<^^^><v^^vv^^<<^v^^^^<>^><>^v^v^v<^<<v<^>>^>v^v^<>>>>v<<><vv<v<^>^^>><v^vv>^^vv<>vvvv^<<<<vv<>^^vv>>v>v<^v^v>v^^v<>v>v>v<vv^vv<><^<>^>^>>^>^<vv<<vv^<><<<vv^v>vv^<>
|
||||||
|
<v<^<v<^>>^vv^>^v^<<^><^<v^<^^^<^<<>>>^^<<^<vv^v<v<<v<vv<<v^><^<<>>^<^^v><^v>>^>^^<<^^v^vv<v<<>^^<^>v>v^<vvv<><^^<<vv^<>>^^^>>v>><^<vv<^><>^<^v^>vv>v^^v^^>^^<>^>^>^<v^v><^><^><>^^><<v^v<<<v^v<><<<v^<><>v^vv^v<>v>v^<^>^<<>><v<vv<^^<<>>^>^^<^<vv^v<><^v<vvvv>>><vv<><v>vv><v^^>^vv>>vvv>^^<>vv>v><<v>>^<>v>^^>^v^^vv^^v>>^<>>^^<><vv<<v<^<v<^v>vv^<>v><^>^<<v^>v>^v^<<vv<<^^<v^<<>v>>^v><<^>^^<<><<<^^v^<>>vv<>v^v^>v<<v^v<^^<>vv<v>><>v<^^^<>>v>v<^<v^>v>>>v><<>>>vv><>^<^>><v<>>v^><^^<v<^^<>>>^>v<<>>^^<><^vv<vvv<^>><^vvv<^<<v>v>^v<>^<v<>>^<v<^<<v<^v<v<<<vv<^>><<>v>vv><>v^>^<>v^vv<<>^^^v>v^>>^<>^>v^^^^<v>>^^>^<<v^vv>^v^^v^v^<^v^><>^v<^^^<v^^>>^><<^^<v><v>^^v>v>>>v^>v<vv<vv^^><vv^v<<<<<><<v^<<>>v<<v<vvv>v>>>^>>>^<>>>>v^>vv<<>^><<v>^v^v><<vv<vv<>v<<><>v^vv>^>>^^><^<vv^<<>^v^vvvv<<^>v<>vvv^<><<<<>vv^^>>><>v>v<^^<v<v<<v>v^^v<<<<^>^<v^vv<v>v>>>^vv>^v<<^><v>vv<^v<v^<><v>>>^<>>><>^^<>^v^>vvv^v^^v^<^^v<^>v^^<>^<^><v^<<v<<v<<^^>^v^^>><<v>>v>^<v^<>^^><<<v^<>v>^v^vv>vv<<>^^<^>>^<<>><>^v^<<<v^><<^^^<^v<<v^>^^vv>
|
||||||
342
2024/day15/main.py
Normal file
342
2024/day15/main.py
Normal file
@ -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()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
9
2024/day15/test.txt
Normal file
9
2024/day15/test.txt
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
#######
|
||||||
|
#...#.#
|
||||||
|
#.....#
|
||||||
|
#..OO@#
|
||||||
|
#..O..#
|
||||||
|
#.....#
|
||||||
|
#######
|
||||||
|
|
||||||
|
<vv<<^^<<^^
|
||||||
91
2024/day16/main.py
Normal file
91
2024/day16/main.py
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
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)
|
||||||
|
|
||||||
|
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()
|
||||||
15
2024/day16/test.text
Normal file
15
2024/day16/test.text
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
###############
|
||||||
|
#.......#....E#
|
||||||
|
#.#.###.#.###.#
|
||||||
|
#.....#.#...#.#
|
||||||
|
#.###.#####.#.#
|
||||||
|
#.#.#.......#.#
|
||||||
|
#.#.#####.###.#
|
||||||
|
#...........#.#
|
||||||
|
###.#.#####.#.#
|
||||||
|
#...#.....#.#.#
|
||||||
|
#.#.#.###.#.#.#
|
||||||
|
#.....#...#.#.#
|
||||||
|
#.###.#.#.#.#.#
|
||||||
|
#S..#.....#...#
|
||||||
|
###############
|
||||||
5
2024/day17/input.txt
Normal file
5
2024/day17/input.txt
Normal file
@ -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
|
||||||
167
2024/day17/main.py
Normal file
167
2024/day17/main.py
Normal file
@ -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()
|
||||||
5
2024/day17/test.txt
Normal file
5
2024/day17/test.txt
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
Register A: 729
|
||||||
|
Register B: 0
|
||||||
|
Register C: 0
|
||||||
|
|
||||||
|
Program: 0,1,5,4,3,0
|
||||||
5
2024/day17/tests/p1.txt
Normal file
5
2024/day17/tests/p1.txt
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
Register A: 0
|
||||||
|
Register B: 0
|
||||||
|
Register C: 9
|
||||||
|
|
||||||
|
Program: 2,6
|
||||||
5
2024/day17/tests/p2.txt
Normal file
5
2024/day17/tests/p2.txt
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
Register A: 10
|
||||||
|
Register B: 0
|
||||||
|
Register C: 0
|
||||||
|
|
||||||
|
Program: 5,0,5,1,5,4
|
||||||
5
2024/day17/tests/p3.txt
Normal file
5
2024/day17/tests/p3.txt
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
Register A: 2024
|
||||||
|
Register B: 0
|
||||||
|
Register C: 0
|
||||||
|
|
||||||
|
Program: 0,1,5,4,3,0
|
||||||
5
2024/day17/tests/p4.txt
Normal file
5
2024/day17/tests/p4.txt
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
Register A: 0
|
||||||
|
Register B: 29
|
||||||
|
Register C: 0
|
||||||
|
|
||||||
|
Program: 1,7
|
||||||
5
2024/day17/tests/p5.txt
Normal file
5
2024/day17/tests/p5.txt
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
Register A: 0
|
||||||
|
Register B: 2024
|
||||||
|
Register C: 43690
|
||||||
|
|
||||||
|
Program: 4,0
|
||||||
5
2024/day17/tests/test2.txt
Normal file
5
2024/day17/tests/test2.txt
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
Register A: 2024
|
||||||
|
Register B: 0
|
||||||
|
Register C: 0
|
||||||
|
|
||||||
|
Program: 0,3,5,4,3,0
|
||||||
402
2024/day19/input.txt
Normal file
402
2024/day19/input.txt
Normal file
@ -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
|
||||||
72
2024/day19/main.py
Normal file
72
2024/day19/main.py
Normal file
@ -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}')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
10
2024/day19/test.txt
Normal file
10
2024/day19/test.txt
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
r, wr, b, g, bwu, rb, gb, br
|
||||||
|
|
||||||
|
brwrr
|
||||||
|
bggr
|
||||||
|
gbbr
|
||||||
|
rrbgbr
|
||||||
|
ubwu
|
||||||
|
bwurrg
|
||||||
|
brgr
|
||||||
|
bbrgwb
|
||||||
4099
2025/day1/p1/input.txt
Normal file
4099
2025/day1/p1/input.txt
Normal file
File diff suppressed because it is too large
Load Diff
45
2025/day1/p1/main.py
Normal file
45
2025/day1/p1/main.py
Normal file
@ -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}')
|
||||||
|
|
||||||
10
2025/day1/p1/test.txt
Normal file
10
2025/day1/p1/test.txt
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
L68
|
||||||
|
L30
|
||||||
|
R48
|
||||||
|
L5
|
||||||
|
R60
|
||||||
|
L55
|
||||||
|
L1
|
||||||
|
L99
|
||||||
|
R14
|
||||||
|
L82
|
||||||
4099
2025/day1/p2/input.txt
Normal file
4099
2025/day1/p2/input.txt
Normal file
File diff suppressed because it is too large
Load Diff
46
2025/day1/p2/main.py
Normal file
46
2025/day1/p2/main.py
Normal file
@ -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}')
|
||||||
|
|
||||||
10
2025/day1/p2/test.txt
Normal file
10
2025/day1/p2/test.txt
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
L68
|
||||||
|
L30
|
||||||
|
R48
|
||||||
|
L5
|
||||||
|
R60
|
||||||
|
L55
|
||||||
|
L1
|
||||||
|
L99
|
||||||
|
R14
|
||||||
|
L82
|
||||||
Loading…
x
Reference in New Issue
Block a user