diff --git a/.direnv/flake-inputs/ribr3gc7kazm282bxiqpmjy9j2h4jaxk-source b/.direnv/flake-inputs/ribr3gc7kazm282bxiqpmjy9j2h4jaxk-source deleted file mode 120000 index 61ae10c..0000000 --- a/.direnv/flake-inputs/ribr3gc7kazm282bxiqpmjy9j2h4jaxk-source +++ /dev/null @@ -1 +0,0 @@ -/nix/store/ribr3gc7kazm282bxiqpmjy9j2h4jaxk-source \ No newline at end of file diff --git a/10-input.txt b/10-input.txt new file mode 100644 index 0000000..0ca234c --- /dev/null +++ b/10-input.txt @@ -0,0 +1,195 @@ +[..#.##] (0,1,3,4) (0,3,4) (0,5) (0,1,2) (3,5) (0,2,3,4) (2,3) {58,27,37,57,37,24} +[####] (0,1,2,3) (0,1,3) {180,180,10,180} +[#.#.] (2) (1,3) (0,2) (0,1,2) (0) (1,2,3) {27,9,26,9} +[#.####...#] (2,5,6) (0,1,3,4,6,7) (0,1,2,3,4,5,7,8) (3,6) (3,4,6,7) (0,2,3,5,7,8,9) (0,1,2,3,4,5,7) (1,2,3,4,5,9) {37,37,56,66,48,56,48,48,10,20} +[#.#.##....] (0,2,3,4,5,7,9) (0,1,4,5,6,7) (0,2,3,5,8,9) (0,1,3,4,6,7,9) (0,1,2,3,5,6,8,9) (0,4,7) (2,3,4,8,9) (1,2,3,5,7,8,9) {189,165,28,35,188,174,158,192,14,35} +[.#.#.#] (0,1,2,3,5) (1,3,5) (2,4,5) (3,4,5) (0,1,2,4) (0,3) {25,18,25,15,25,15} +[.##....##.] (0,1,2,4,5,6,7,8) (1,2,3,5,6,7,8,9) (0,2,3,4,5,6,7,8) (0,3,5) (2,3,5,6,7,8,9) (2,3,6,7) (4,5,9) (1,2,3,6,9) (1,4,5,6,7,8) (2,3,4,6,9) (1,2,4,6,7,8,9) {14,26,46,38,43,42,48,40,31,45} +[.##...##.] (1,3,6) (0,2,6,7,8) (0,5,7,8) (2,5,7) (3,4,5,6,7,8) (0,1,2,3,5,6,7) (1,2,3,4,6) (2,3,4,5) (0,1,3,5,6,7,8) {34,37,37,191,163,206,188,203,180} +[.####.#.] (0,1,2,3,4,6) (1,2,3,4,5) (5,6,7) (1,2,4,5,7) (0,1,2,3,4,6,7) (0,2,3,4,7) {30,42,52,49,52,27,25,30} +[##.###] (0,3) (0,2,4) (1,2,3,5) (0,1,4,5) {23,31,29,20,22,31} +[...#.###] (1,5,6) (6) (6,7) (2,4,5,7) (1,2,3,5,6,7) (3,5,6,7) (0,1,3,7) (1,2,3,4,5,7) (0,1,2,5,7) {30,70,54,53,25,84,60,94} +[#..##] (0,3,4) (0,1,2,4) (0,2,4) {38,3,23,15,38} +[#....] (0,1,2) (3,4) (2,3) (0,1,2,4) (0,3,4) {52,39,46,23,35} +[###.] (0,2,3) (1) (0,2) {8,18,8,2} +[##..] (1,2) (0,3) (0,1) (2,3) {8,13,13,8} +[##..#####] (1,3,7) (1,5,6,7) (0,2,3,5,7,8) (0,1,2,3,4,5,7,8) (0,1,4,5,6,7,8) (4,5,6,7,8) (0,2,3,4,6,7,8) (4,7,8) (0,1,2,3,4,5,8) (1,6) (1,2,4,5,7,8) {59,105,73,73,93,92,51,124,103} +[####..##.#] (2,3,5,7,8,9) (0,3,5,6,8) (1,3,7,8) (0,2,3,5) (1,2,3,4,5,6,7,8) (3,5,7) (9) (0,1,3,4,6,7,8) (0,1,2,3,4,5,7,9) (0,1,2,3,4,5,6,9) (5,8) (2,3,5) {47,30,68,91,24,97,20,46,53,53} +[##.#.#.] (0,2,3,5,6) (0) (1,2,4) (1,2,3,6) (2,4) (3,6) (0,3,6) (0,1,3,5) (2,3,4,5,6) {42,28,156,67,138,35,53} +[..###..#] (1,5,6,7) (0,2,3,5,6,7) (1,2,3,4,7) (0,2,4,5) (0,1,2,4,5,7) (0,3,5,7) (0,7) (2,3,4,6,7) {47,45,49,46,49,55,30,85} +[#.#.] (1,2) (0,3) (2,3) (0,2) (0,2,3) (0,1,2) {67,37,82,45} +[..##.] (0,2,3) (1,3,4) (3,4) (0,1,2,4) (0,1,2) (0,1,4) (1,2,4) {40,49,21,30,53} +[#....##..#] (1,2,3,4,5,6,8) (1,3,5,6) (2,3,7,9) (1,2,4,6,8) (2,3,5,8) (1,3) (2,8,9) (1,5) (0,4,6,8) (1,2,3,5,6,7,8,9) (0,6,7) {29,63,88,63,45,54,74,40,86,37} +[.#.####..#] (1,2,3,5,6,7) (0,3,5,9) (0,1,4,5,7,9) (0,1,2,3,4,7,8,9) (0,1,4,6,7,8,9) (0,1,4,5,6,8,9) (0,2,3,4,6,7,8,9) (1,7) (1,3,4,5,7,8) (0,1,2,3,4,5,8) {62,241,38,67,57,67,40,223,56,43} +[##.#.###..] (1) (0,2,9) (0,2,4) (0,2,4,5,8,9) (0,1,3,4,5,6,7,8) (1,6,8) (0,4,5) (2,4,6,8,9) (0,1,7,8,9) (1,4,8) (0,1,3,4,7,8) (2,3,5,6,7,9) {44,30,37,16,49,27,23,22,40,36} +[#.#.#.#] (0,2,3,5) (0,3) (1,6) (0,2,4,6) (0,1,2,3,5,6) (2,6) (0,3,4,6) (1,2,3,5,6) {20,21,37,28,12,19,40} +[#....#.###] (1,2,4,5,6,8,9) (1,3,4,5,6,9) (4,5,7) (5,7,8) (0,1,2,5,6,7,8,9) (0,4,5,8,9) (0,1,2,4,5,6,8,9) (1,3,5,6,8,9) {43,49,40,9,58,77,49,21,66,66} +[..####.##.] (1,3,5,7,8) (1,2,6,8) (0,1,4,5,9) (0,1,2,3,5,6,7,9) (0,1,2,3,4,6,7,8,9) (0,2,3,6,7,8) (1,2,3,5,6,7,8) (1,2,6,7) (2,3,4,6,7,9) (0,9) (1,6,9) (0,2,3,5,8) (1,6,7,8) {54,114,114,97,37,43,144,134,87,67} +[....#] (0,1,4) (2) (0,2,3) (4) (0,1,2) (1,2) {35,44,56,11,22} +[#...###] (3,4) (0) (0,1,2,4,5) (0,3,5) (4,6) (0,1,3) (1,5) (2,4,5) (5,6) {50,35,14,27,39,57,40} +[#....#] (1,2,3,4) (0,3,4) (0,1,2) (0,2) (1,3,4) (0,3,4,5) (1,4) (5) {29,33,16,16,30,19} +[...#.##.] (1,3,6,7) (0,1,3,4,5,6) (0,4,5,6,7) (0,1,2,5,6) (2,4,5) (0,1,2,4,5,6) {143,144,146,18,163,163,147,7} +[..##..#] (2,3,4) (0,1,4,5,6) (1,2,5,6) (0,1,2,3,4,5) (1,2,3) {22,34,27,19,34,30,27} +[#.#.] (1,2,3) (0,1,2,3) (0,1,3) {21,33,21,33} +[#....#..] (2,3,4,5,6) (0,1,2,4,7) (0,3,5,7) (0,1,5,6,7) (1,2,3) (4) (2,3,4) (0,1,2,3,4,5) (1,6,7) {38,69,72,62,74,45,50,43} +[##.#...] (1,2,4,5) (0,1,2,5) (0,2,5,6) (1,3,5) (0,1,2,5,6) (1,5,6) (3,4) (1,2,3,5,6) (0,2,6) {44,87,80,47,37,96,81} +[#...##.#.#] (2,3,7,8,9) (3,5) (0,1,3,4,5,6,8,9) (0,2,5,6,7,8) (2,4,6,8,9) (6,9) (0,1,2,3,4,6,7,9) (0,3,4,5,9) (0,1,2,4,5,9) {69,45,60,54,58,69,63,38,55,66} +[...#] (0,3) (0,1) (2,3) (0,2,3) (1,3) (2) {21,190,34,216} +[#.##..#.#.] (0,6,9) (0,1,3,4,5,6,7,8,9) (0,2,3,4,5,7,8,9) (1,3,4,6,7,8,9) (0,1,2,4,5,6,7,8,9) (0,1,2,3,4,5,6,8,9) (0,1,2,3,6,7,9) (0,3,4,5) (0,1,2,3,4,6,8,9) {71,41,47,56,60,46,57,42,57,76} +[#.#...] (3) (4,5) (2,5) (0,3) (1) (1,3,5) (0,1,4,5) (0,1,2,5) {41,61,29,14,33,68} +[....#.#.] (0,2,3,4) (3) (0,1,3,4,6,7) (0,1,2,4) (1,4,6,7) (4,6) (0,2,3) (3,5) {29,19,24,236,41,17,29,19} +[.#.#.] (1,2,4) (0,1,3) (2,4) (0,1,2,3) (2,3,4) (1,2,3) {9,31,42,30,19} +[#...#..#.#] (1,2,3,6) (1,2,4) (0,1,2,3,4,6,7,8) (0,4,7,9) (0,2,3,9) (0,6,7,8) (1,2,3,5,7,9) (0,1,2,4,5,7,8) (0,1,2,3,4,5,6) {51,199,203,45,179,24,47,54,37,21} +[..#.] (0,3) (1,2,3) (1,3) (0,1) (3) {19,22,5,16} +[.#.#.] (0,1,2,3) (0,1,3,4) (1,2) (1,2,3,4) {189,194,23,192,174} +[#....#.] (3) (0,1,2,4,5,6) (4,5,6) (0,2,4,6) (1,2,4,6) (1,4) {30,20,33,5,55,33,52} +[.##.##] (0,1,3,5) (0,2,4,5) (1,3,4) (0,2,3,4) (0,2,3,5) (0,2,3,4,5) (2,5) {45,14,43,44,27,41} +[.#####.#.] (1,2,3,5,6,8) (0,1,3,4,5,6,8) (1,3,5,6) (0,2,4,5,7,8) (0,1,2,3,4,6,7,8) (1,3,6,8) (0,1,3,7,8) {46,60,47,60,32,48,46,46,61} +[...###.#.] (0,2,3,4,5,7) (0,4,6,7,8) (1,3,4,6,7,8) (0,1,2,3,4,7,8) (0,1,2,4,6,7) (1,2) (0,1,4,8) (0,5) (0,1,2,3,4,5,8) (0,1,2,3,5,6,8) (2,4,5,8) {79,55,68,52,71,52,50,50,56} +[####.#.#] (0,1,2,4,5,6,7) (0,1,2,3,5,7) (0,2,3,4,5,6,7) (0,1,2,3,4,7) (0,3,4,5,6) (5,6) {28,9,18,27,25,23,20,18} +[.##.#.#.##] (1,3,5) (4,5,8) (1,4,6,7,8,9) (2,3,4,5,7,8,9) (0,1,2,6) (0,1,2) (0,1,2,3,4,5,6,9) (0,1,4,5,6) (0,4,5,7) (0,1,2,7,8) (2,3,4,5,8,9) (4,6,7,9) {57,56,54,24,52,50,32,20,38,26} +[####.#] (1,4) (2) (1,3) (0,1,3,5) (0,2,5) {169,181,17,172,9,169} +[.#.###] (3,5) (2,3,5) (1,3,4,5) (0,2,3,5) (1,2) (3,4) (3) {0,131,17,161,137,147} +[#.#.#..] (0,5,6) (1,3,4) (0,1,6) (2,4) (2,4,5,6) {22,13,13,11,24,21,23} +[##.###] (0,2,3,4,5) (2,3,5) (2,3,4,5) (1,3,4,5) {15,16,37,53,45,53} +[...#] (1) (0,2,3) (3) (0,1,2) {33,20,33,21} +[..#...##.] (2) (0,4) (2,3,5,6) (1,2,4,5,8) (2,3,4,5,7) (1,2,3,4,5,7) (3,4,6) (1,4) (3,4,8) (4,8) {6,22,51,35,46,35,14,16,13} +[...#..##.] (0,1,2,3,5,6,8) (1,3,4,5,6) (0,5,7,8) (0,2,3,7,8) (1,2,3,6,7) (0,4,7) (6,7) (2,3,7,8) {22,40,29,45,21,29,56,41,18} +[#.##] (0,2) (2,3) (0,1,3) (1,2) (1,3) {31,25,36,28} +[####...] (0,1,4,5,6) (0) (0,2) (2,3,4,5,6) (0,2,3,4) (3,5) (5,6) {39,0,28,25,13,35,23} +[.##.] (2,3) (0) (0,1,2) (1,2,3) (0,1) {34,27,24,17} +[..#..#] (0,2,4,5) (0,1,2,3,5) (2,4) (0,3,5) (0,1,2,4) {43,23,51,25,33,38} +[##.....] (0,4) (0,3) (0,1,2) (0,2,3,4,5) (2,3,4) (6) (0,1,2,3,4) (3,5) {193,19,50,215,48,37,16} +[##.....##.] (2,4,5,8) (1,2,6) (2,3,5,6,7,8,9) (0,1,2,3,4,5,7,8) (1,4,5,6,7,9) (3,4,5,6) (2,3,5,7,8,9) (1,4,8) (2,5,6) (0,1,4,5,7,9) (1,7) (0,4,7,9) (0,1,3,4,5,6,7,8) {27,64,50,65,87,100,78,81,70,54} +[..#..] (1,2,3,4) (0,2,3) (0,3) (0,4) (2,3) (1) {34,33,52,54,38} +[##..#..] (6) (1,2,3,6) (1,5) (0,2,3,4,6) (1,4,6) (2,4,5) (0,2,4,5,6) (0,4) (0,1,2,5,6) {38,47,64,30,35,49,50} +[#..####] (0,2,3,5,6) (2,3,6) (0,1,2,3,5) (0,1,2,3) (1,3,4) (0,1,3,4) {165,176,169,199,30,28,23} +[#..#.] (0,3) (0,1,3,4) (1,3) (2,3,4) (3,4) (2,4) (0,1,2,4) {13,28,20,30,31} +[........#.] (6,8,9) (0,1,2,3,5,7,8,9) (3,7) (0,1,2,3,4,7,8,9) (2,4,6,7,8) (3,7,8) (0,1,3,5,6,8,9) (0,2,4,5,7,9) (0,5,8) (0,1,2,3,5,6,7) {166,36,163,49,133,165,39,176,36,156} +[#.##..#.] (1,3,5,6,7) (0,2,5) (0,1,2,5,6,7) (0,2,5,6) (1,2,3,5,6,7) (0,1,4,6) (0,1,5,6,7) (0,1,5,6) (1,2,7) (4,7) {78,60,50,7,31,70,75,50} +[.###] (1,2,3) (0,2) {7,20,27,20} +[..#...#.] (2,3,4,5,6) (0,2) (0,2,3,5) (3,4,5) (1,2,3,7) (1,2,3,4,5,7) (3,5) (0,1,2,3,4,7) (0,1,2,6,7) (0,1,3,4,6) {192,193,70,229,203,49,180,34} +[.####.#] (0,2,3,4) (0,3,4,5,6) (1,2,3,4,5,6) (1,3,4,5) (0,3) {126,24,116,150,142,34,18} +[#..##..#.] (3,7) (2,6,7,8) (4,5) (1,4,5,6,8) (0,1,2,3,7) (0,7,8) (0,2,4,6,7,8) (0,2,3,4,6,7,8) {45,22,61,30,29,5,49,73,53} +[..#.#] (0,1,2,4) (0,2,3,4) (0,3) (1,2,4) {33,31,50,21,50} +[...#..##] (0,1,4,5,6) (0,1,3,5) (4,5) (0,1,2,5,6,7) (0,1,2,4,5,7) (0,2,3,5,6) (2,5) (0,5) (0,2,6,7) {70,33,201,8,32,234,53,32} +[#.....##] (2,4,5,6) (0,1,2,4,5,6) (0,1,2,5,6,7) (0,1,4,5,6) (0,2,5,6) (0,1,2,3,6,7) (0,1,2,3,4,7) (3,7) (0,3,4,5,6,7) {258,230,249,33,60,262,266,225} +[##.#.##] (2,4) (0,2) (1,3,4,5,6) (1,5) (0,4,5,6) (2,3) (0,4) (1,6) {26,30,130,105,19,16,20} +[.#.##.##] (2,3) (1) (2,4,7) (0,1,2,3,7) (2,4,6,7) (0,1,2,4,7) (1,3,5,6,7) (2) (1,3,4,7) (0,5,6,7) {29,58,66,55,56,23,31,87} +[.###..#.#] (1,2,3,6,7,8) (0,1,2,5) (0,3,4,6,7,8) (2,6,7) (0,1,3,5,6,8) (1,5) (0,1,2,5,6,8) (0,1,4,5,6,7) {35,46,29,26,6,40,47,22,35} +[..#...] (1,3,4,5) (0,3,5) (0,1,2,4) (0,1) (2,3,5) {39,31,27,41,27,41} +[#.##.###.] (1,3,6,8) (0,7) (1,2,5,7,8) (0,1,2,3,4,6,7) (4,6) (0,2,4,7,8) (2,4) (2,5,6,8) (3,4,5,8) (1,7,8) {25,28,46,16,39,19,18,41,43} +[.#...#.] (0,6) (0,1,2,4,5,6) (0,2,6) (0,1,2,5) (0,1,2,4) (1,2,3) (0,1,2,5,6) {61,48,67,14,16,19,38} +[##.#.] (0,1,3) (1,4) (1,2,3) {12,135,123,135,0} +[#.##] (0,2,3) (0,1,3) {27,19,8,27} +[.##...#..#] (0,2,3,4,5,6,7,9) (4,6) (2,3,4,6,7,8,9) (1,2,4) (0,1,2,3,5,6) (0,1,3,5,7,8) (1,3,5,6,7,8,9) (0,2,3,4,5,7,8,9) (1,2) (0,3,4,5,6,7,8,9) (1,9) {52,37,48,65,47,55,53,48,46,47} +[..#.] (0,1,2) (0,2,3) (0,3) (0,2) {26,13,24,11} +[#.#.##.#.#] (0,1,2,3,4,5,6,8) (0,1,2,3,5,6,7,8,9) (0,1,3,7,8) (0,1,2,3,4,6,7,8,9) (0,1,2,4,5,6,8,9) (4,5,6,7,9) (1,5,7,8) (0,1,2,3,5,6,8) (5,7,8) (0,2,3,4,5,6,9) {97,90,77,83,165,210,190,180,104,167} +[...#.] (0,3) (0,1,3,4) (1,2) (1,3,4) (3) {134,158,19,155,139} +[...#] (0,3) (0,2,3) (0,1,2) (2,3) (0,1) {24,14,30,22} +[...##.] (2,4,5) (1,4) (0,1,2,4) (0,2) (0,1,4,5) (1,3) (2,5) {202,199,222,6,203,28} +[.#####..] (3,5) (3,4,6) (0,1,3,4,6,7) (0,1,2,5,6) (1,2,4,5,6) (1,2,3,4,5) (0,1,2,6,7) {37,42,23,51,44,23,60,29} +[#.....##.#] (0,4,5) (0,1,3,4,7) (0,1,2,3,4,5,8,9) (0,2,4,5,6,7,8,9) (0,1,3,4,5,6,7) (6,7) (1,2,3,4,5,6,7,8) (2,3,4,6,7,8,9) (0,2,3,4,6,7,8,9) {188,160,41,181,199,167,157,168,41,36} +[#####.#.] (0,1,4,5,6) (0,1,3) (0,3,7) (0,1,2,5) (1,5) (0,1,6,7) (6,7) (2,3,4,5,6) (0,3,4,6) {162,144,35,46,30,46,151,137} +[#..#.###.] (1,8) (0,2,3,5) (3,5,6,7) (0,1,2,4,5,6,7) (1,2,3,5,6,8) (2,4) (2,3,7) (0,7) (1,2,6) {51,49,67,41,31,56,50,51,24} +[#.###..] (0,1,3,5,6) (4,5) (0,3,5,6) (4,5,6) (1,2,3,4,5) (0,1,2,4,6) (0,1,2,3,5) {36,41,38,50,43,73,35} +[.#.###.] (2,4,5) (0,6) (1,3,4) (1,2,3,4) (0,2,5) (1,3,4,6) (0,1,2,4,6) {43,19,38,11,29,29,28} +[##...##.#] (1,6) (0,1,2,3,4,5) (1,4,8) (1,4,6,8) (4,5,7) (0,2,3,7,8) (2,7,8) (1,3,5,8) (0,2,3,4,7) (2,5,8) {54,57,72,74,49,43,13,57,65} +[#...#..] (0,1,2,3,4,5) (0,3,6) (3,6) (2,3,5) (0,3,5) (3,4,5) {25,16,27,44,20,40,4} +[#.#.#.] (2,3,5) (0,2,4) (0,1,3,5) (1,2,4,5) {17,16,26,5,25,17} +[##.....###] (0,2,4,5,7,8,9) (0,6,8) (2,7,9) (0,4,6,8,9) (0,4,7,8,9) (0,1,2,3,4,5,6,9) (0,1,2,6,7,8) (1,2,4,5) (2,3,6,7,9) (0,2,3,5,6,7,8,9) (4,5,6,7,8,9) (0,1,3,4,5,8,9) (1,2,3,4,6,7,8,9) {75,73,86,62,102,61,86,58,79,106} +[...##] (4) (1,2,3) (0,2,3,4) (0,1,3) (0,4) (1,2,4) {155,33,16,30,149} +[..#.##...] (0,1,6,8) (1,2,6) (0,4,7,8) (0,3,4,6,7) (2,4,6) (1,2,3,6) (1,2,5,6,8) {185,208,39,15,16,18,224,14,189} +[....##] (2,3,4,5) (0,1,2,3,4) (0,1,4,5) (0,3) (0,1,2,4) (0,5) {64,31,179,181,184,176} +[...#####] (0,1,2,4,7) (0,1,2,4,6) (0,1,2,3,6,7) (0,1,4,5,6) (0,1,4,6,7) (1,2,3,4,5,6) {17,20,9,6,17,10,20,7} +[##.#.] (3,4) (0,3,4) (2,3) (0,2,4) (1,2) (2,4) (0,1,4) {52,13,51,210,240} +[.#.#.#.] (0,1,3) (2,4) (1,2,4,5) (2,3,5,6) (0,3,4,5,6) (1,3,5) (2,5) {3,42,49,35,23,65,13} +[.#.###.#] (0,1,2,5,6) (2,3,4,6) (1,4,6,7) (0,3,6,7) (0,1,2,4,5,7) (0,1,2,4,6,7) (0,1,3,4,6,7) (2,6) (1,2,3,5) (0,1,2,4) {71,69,69,55,65,34,69,70} +[#####..#] (1,5,6) (1,6,7) (0,2) (0,1,2,3,4,7) (0) (2,3,5,6) (0,1,2,3,4,6,7) (1,5,7) {19,70,27,27,18,45,55,53} +[##.#] (0,1) (0,2) (0,1,3) {35,25,10,13} +[..#.##..##] (1,2) (0,1,3,4,5,7,8,9) (0,1,3,4,7) (3,8,9) (0,1,5,7,8) (0,1,2,4,5) (0,1,3,5,6,7,8,9) (3,4,5,6,7,9) (0,1,2,4,5,7) (4,6,8,9) (0,1,3,4,5,6,8,9) {158,173,34,138,139,145,116,48,147,131} +[..#.] (1,2,3) (2) (0,1,3) (2,3) (3) (0,1) {18,21,24,41} +[##.#] (0,1,3) (0,2,3) {183,171,12,183} +[.#...##..#] (0,1,2,3,4,7,8,9) (0,1,3,5,9) (3,6,7,8,9) (1,5,7) (2,4,5,6,7,8,9) (0,1,4,8,9) (0,5,8,9) (0,2,3,4,8,9) (0,1,4,6,7) (4,7) (0,3,4,8) (0,2,6,9) {85,54,46,56,89,53,30,65,86,96} +[..##.#] (0,1,2,5) (0,1,5) (0,5) (2,4) (2,3,5) (0,3,4) {223,218,44,22,9,239} +[#######...] (2,3,4,7,8) (3,4,5,7) (9) (0,1,2,3,4,5,7,8,9) (1,7,8) (0,1,4,5,6,7) (2,3,4,5,6,8) (3,4) (0,1,3,4,5,6,7,9) (2,3,7,8,9) (4,7) (6,9) (0,2,7,8,9) {38,51,54,92,93,61,51,90,70,62} +[#.##.###] (0,3,6) (1,2,4) (3,5,6,7) (1,4,7) (1,4,5,7) (2,4,5,7) {12,24,0,23,24,22,23,35} +[###...###] (0,2,3,6,8) (0,1,4,5,7,8) (0,1,2,3,4,5,7,8) (6,7,8) (3,8) (0,5,6) (4,6) {9,3,0,13,11,9,21,10,23} +[..#.#.#.##] (0,1,2,3,6) (2,4,5,6,8) (1,3,8) (0,1,3,4,5,6,7,9) (0,4,5,6,7,8,9) (0,2,3,5,7,8) (0,1,3,4,5,6) (0,1,4,5,6,8) {59,43,27,45,54,70,54,42,67,26} +[#.#.#] (0,2,3,4) (0,3,4) (1) (1,2,3) {6,21,14,18,6} +[#.##.#.#] (1,2,6) (0,2,3,4,6) (0,1,3,4,6,7) (1,2,3,4,5,6,7) (0,1,3,7) (0,2,3,5,7) (0,3,4,5,6,7) {44,23,28,45,30,29,41,40} +[####.] (0,1,3) (0,2,3,4) (4) (2,4) (0,3,4) (1,4) (1) {3,10,10,3,13} +[#.#..#.#] (3,7) (4,7) (2,5,6) (1,2,3,4,7) (1,2,4,7) (0,1,2,6) {3,122,128,115,125,6,9,134} +[#...##..#] (0,5) (1,2,3,4,5,6,7) (1,2,3,4,5,8) (0,1,2,3,6,7,8) (3,4,6,8) (2,4) (1,2,6,8) {17,64,84,48,57,40,48,26,52} +[.#.#.#.] (2,4,5,6) (1,2,3,4,6) (2,3,4) (0,1,4,5,6) (4) {14,31,34,27,68,21,38} +[#.#.#] (2,3) (2,3,4) (0,2,4) (1,4) {10,12,31,21,28} +[.##.######] (0,1,2,3,4,5,6,9) (3,5) (1,2,3,8,9) (1,3,4,5,6,7,8,9) (2,3,8) (1,2,3,4,6,7,8,9) (0,3,4,5,6,7,9) (0,3,4,6) (0,3,9) (0,2) {43,42,61,74,33,30,33,19,36,55} +[.#.##] (1,3,4) (1,2) (0,2,3,4) (2,4) {1,38,37,20,37} +[###.##] (0,2,3,4) (2,3) (2,3,5) (1,2,3,5) (0,3,4,5) (0,1,2,4,5) (3,4) {15,8,33,29,17,24} +[#.#.##...] (1,8) (2,5,8) (2,3,4,5,8) (2,3,4,5,6) (1,3,4,7) (2,3,6,7) (0,2,8) (3,4,5,6,7,8) {1,158,38,182,182,41,12,155,41} +[#.#.] (0,2,3) (0,2) (1,3) {21,8,21,27} +[#.....#.] (2,3) (0,1,4,5) (1,3,4,6) (4,5,6) (4,7) (1,2,4,5,7) (2,3,6) (0,6) {18,21,31,22,43,33,23,19} +[.##..#.] (2,3) (0,1,4,5) (0,1,5) (1,3,5,6) (3,6) (2,6) (1,2,3,5,6) (1,5,6) (1,2,3,4,5) {20,72,46,80,13,72,62} +[#.##] (2) (3) (0) (1) {11,13,16,139} +[.#.......] (0,1,2,4,5,6,7) (0,1,2,6,7,8) (0,1) (3,4,6) (1,3,4,5,6,8) (2,4,5) (0,1,2,3,4,5,6) (0,1,2,5,7) (0,1,2,3,4,6,7) (2,3,6,8) (0,1,2,4,6,7,8) {51,53,64,44,60,34,64,38,16} +[#..##.] (0,1,4,5) (3,4) (0,2,4,5) (0,3,4) {28,0,19,26,45,19} +[#.##..##.] (0,1,3,4,5,7) (1,3,5,6) (1,7,8) (2) (1,4,5,8) (1,3,6) (2,3,4,8) (3,4,7) (0,2,4) (1,2,3,4,5,7,8) (1,2,6,7) {3,49,54,53,48,32,23,35,42} +[....##] (1,2,3,4,5) (0,2,3,4,5) (1,2,3,5) (0,1,3,5) (2,4,5) (2,3,5) {21,9,60,46,36,62} +[#.##.##.#] (1,6,7) (4,6,7) (1,4,5,6,7,8) (0,4,5,6) (0,1,2,5,6,7,8) (2,3,4,6,7) (0,1,2,3,5,8) (0,1,3,7) (1,2,4,5,6,7,8) (0,1,2,5,6) (2) {48,62,60,39,65,67,75,60,43} +[.####.##] (1,2,3,4) (2,4,5,6,7) (2,3,5,7) (1,2,5) (1,2,3,6,7) (0,1,7) (2,3,4,6,7) {14,42,218,42,184,191,192,221} +[.###] (0,1,2) (1,2,3) {195,199,199,4} +[##..###] (1,4,5) (0,1,3,6) (0,2,4,6) (3,4,5) (0,1,5,6) {135,146,6,127,27,27,135} +[.#.##] (0,1,2,3) (1,2,4) (0,1,3,4) (0,2,3) (1,4) (0,1) {52,62,34,39,39} +[.#...] (0,1,3,4) (0,2,3) (3) (0,2) (1) (0,1,4) (0,1) {63,35,28,43,20} +[#####.#.] (0,2,3,6) (0,1,4,5,7) (2,4,5,6,7) (0,2,4,6) (0,1) (1,2,3,4,7) (0,2,3,4,5,6,7) {216,31,212,201,219,196,199,209} +[.#.##...#] (1,4,5,7) (0,1,2,3,4,5,7,8) (1,2,4) (2,4,6,8) (1,4) (1,6) (2,3,5,6,7,8) (1,5,7) (0,1,3,4,5,7) {37,86,44,53,64,68,35,68,36} +[#.#..###.#] (0,1,3,4,6,7,9) (1,2,4,8,9) (0,1,6) (0,1,3,4,5,6,7) (1,4,5,8) (1,2,3,5,6,7,8,9) (2,8) (1,3,4,9) (0,1,2,3,4,5,7,9) (6) {30,91,54,52,61,50,38,40,53,66} +[.#...#] (4,5) (1,2,3) (0,1,3,4) (0,3,4,5) (0,1,2,4,5) (2,5) {19,32,30,33,34,32} +[.#..#] (2,3) (3,4) (1,4) (0,1,3,4) (0,1,4) {32,50,197,215,51} +[#.###] (2,4) (0,3) (1,2,3,4) {17,3,16,20,16} +[..#.#.##..] (1,2) (0,2) (1,2,6,7,9) (0,2,3,4,8,9) (0,2,5,6,8,9) (7) (5,8) (4,8,9) (1,3,5) {42,22,51,32,32,33,21,3,52,53} +[.....#.##] (0,1,2,3,8) (2,4) (1) (0,1,2,8) (0,2,3,4,5,6,8) (0,8) (2,3,6,7) (6) (2,4,5,8) (1,2,8) {44,25,74,35,49,37,33,1,68} +[#.###.] (0,3,5) (1,3,4,5) (0,1,3,4) (1,2) {13,29,0,29,29,16} +[###.#] (1,4) (0,1,3) (0,2) {29,21,14,15,6} +[.#....] (0,3,4,5) (0,2) (1,2,4) (0,1,3) (2,3) (0,1,2,3) (1,2,3,4,5) (5) {47,51,51,37,19,13} +[.#.#.] (1,2,4) (0,1,3) (1,3) (0,2,3) (0) {20,184,178,34,164} +[.#.#] (0,1,2) (1,3) (1,2) (0,3) (2,3) {197,210,212,36} +[#...] (2,3) (0,2,3) (0,1) {22,10,17,17} +[#####.#..] (1,2,3,5,6,7) (2,5) (0,3,4,5,6,7,8) (0,1,4,5,6,7,8) (0,1,3,4,5) (2,5,6) (1,3) (4,6) {17,35,27,30,21,44,39,17,13} +[##.##.] (2,4,5) (0,1,2,3,5) (1,3,4,5) (0,1) (0,4,5) (0,2,3) (4) (0,1,3,4,5) {64,33,206,32,211,220} +[..####.] (0,1,2,4,6) (0,1,4,6) (0,2,3,4,6) (2,4,6) (1,2,3,5,6) (0,1,5) (0,2,3,5) (0,1,2,3) {182,182,50,26,163,27,170} +[##....] (1,2,3) (2,3,5) (1,3,5) (1,4) (1,2,4) (0,3,5) {3,19,20,23,8,20} +[.#..##.#.#] (1,4,9) (1,2,3,4,5) (0,2,4,5,6,7,9) (0,1,2,4,5,6,7,9) (6,8) (0,2,8) (0,1,2,3,5,6,8,9) (4,9) {41,196,57,35,181,57,48,22,26,184} +[#.###] (0,1,4) (0,2,3,4) (1,2,3) {16,21,31,31,16} +[###...##..] (1,2,4,5,6,7,8) (0,1,2,4) (0,3,6,8) (3,4,6,8,9) (2,5,7) (0,2,3,5,7) (1,2,3,4,6,9) (0,1,4,7,8,9) (0,1,4,7) {32,38,51,49,55,36,50,43,46,35} +[.##.##.##.] (2,3,4,5,6,7,8,9) (1,2,4,5,7,8) (0,1,2,3,4,5,6,7,8,9) (1,8,9) (0,2,3,5,6,7,8,9) (0,2,4,5,6,8,9) (0,1,3,5,7,8,9) (7,8) {42,37,62,53,49,71,49,76,81,58} +[###.#.##] (0,1,3,7) (0,1,3) (0,1,5,7) (2,3,4,6,7) (3,7) (0,1,2,4,6,7) (7) (0,2,3,4,6,7) (3,4,5,6,7) (0,1,4,6,7) {70,55,33,57,55,15,55,95} +[..#...#] (1,3,6) (0,1,2,3,4) (1,2,3,4,6) (1,4,5,6) (0,5) (0,2,3,4,6) {36,34,27,37,29,13,19} +[.#...##.] (0,2,3,4,5,6) (0,2,4,5,6) (0,3,5,6,7) (0,1,7) (0,2,6) (1,2,3,4,5,6,7) {43,11,49,30,40,45,54,16} +[###.] (0,1,3) (0,2) (1,3) (0,2,3) {31,32,13,38} +[...#..] (0,2,4,5) (0,1,4) (2,4,5) (0,1,2,3,5) (0,5) (0,1,2) (1,3,4,5) {65,56,49,23,53,60} +[#.#..] (0,1,3) (0,2,4) (0,1) (4) (0,1,2) {235,219,31,14,22} +[#...#.##] (5) (1,3,6,7) (0,1,2,3,4,6) (2,3,4,6,7) (1,2,3,4,5,6) (0,1,4,7) (0,1,2,5) (0,1,3,4,7) (0,1,3,5,6,7) (1,4) {38,70,48,68,57,38,59,56} +[.#.##...#] (1,3,4,5,6,8) (1,2,3,5,6,7,8) (0,2,3,4,8) (0,1,5,6) (0,4,7) (0,1,2,3,4,6,7,8) (1,3,4,5) (4,6) (1,8) {172,204,182,194,185,22,195,182,204} +[##.#..] (1,5) (0,2,3,4,5) (2,4) (0,1,2,3,4) {34,23,42,34,42,19} +[#....#.#.] (0,2,3,4,6) (5,8) (3,4,5,7) (0,5,7) (0,2,3,4,5) (0,6,7) (0,2,4,5,6,7,8) (1,2,3,5,6) (1,2,7) (0,1,2,3,4,8) (1,3,4,5,6,7,8) {53,25,39,43,45,46,38,37,28} +[...##.] (0,2,3,5) (0,3,4,5) (4,5) (1) (0,1,2) {19,29,10,9,25,25} +[...#] (0,1,3) (0,1,2) (0,1,2,3) {32,32,22,19} +[....#...] (0,3,7) (1,2,4,7) (0,1,2,3,4,5) (0,1,2,5,6) (0,1,3,4,6,7) (5,6) (0,1,2,4,5,7) (2,4) (1,2,3,4,5,6,7) {225,86,81,213,77,59,44,224} +[.##.] (0,2,3) (0,1) (0,2) {221,18,203,191} +[...#.#] (0,1,3) (2,3,4) (0,2,4) (1,2,5) (4,5) (0,1,2,5) (0,1,2,4,5) {18,29,26,9,8,21} +[...###] (0,1,4,5) (2,4,5) (0,1,3,5) (1,5) (0,3,5) {42,25,2,24,20,47} +[..##.#.##.] (0,1,2,4,9) (2,5,7) (6,7) (3,4,9) (0,2,3,5) (0,1,2,6,7,9) (0,1,2,3,5,6,8) (0,1,2,3,6,7,8,9) (0,1,7,8) (1,2,3,4,6,7,8,9) {73,62,80,53,23,36,47,43,34,49} +[.##.#..] (0,1,3,4,6) (0,1,2,4) (1,5,6) (1,4) (3) (1,2,4,5,6) (0,2,3,5) (4,5) {22,56,36,10,64,35,28} +[##.#.####] (1,3,6,7,8) (3,5,7) (3,6) (1,2,3,6,8) (2,5,6,8) (0,2,3,4,7) (1,2,3,4,5,7,8) (3,4,8) (2,3,6,7,8) (0,2,3) {30,17,71,81,30,37,43,43,58} +[#.#.###] (0,5) (3,4) (3) (6) (1,3,5,6) (3,5,6) (0,4,5,6) (1,2,4) {29,141,131,31,154,39,24} +[.####.#.##] (0,8) (2,3,5,8,9) (2,7) (5,8) (1,2,5,7,8) (4,5,7,8,9) (0,1,2,4,6,7) (0,2,3,4,5,6,8,9) (0,1,2,3,5,6,7,9) (0,1,2,6,7) (0,1,5,6,9) {86,59,81,40,26,63,75,58,40,61} +[#..#] (0,2,3) (0,1) (0,3) (2) {42,13,17,29} +[.###] (0,2) (1,2) (2,3) (1) (3) (0,2,3) {19,26,33,23} +[####.#...] (0,2,3,5,8) (0,1,2,4,6,7) (3,4,6,7,8) (0,5,6,7,8) (3,4,5,6,7) (0,2,3) (1,2,3,4,5,6,7,8) (1,2,3,5,6,7,8) {22,37,39,43,44,41,61,61,24} +[..###.#] (1,2,5,6) (3,5) (1,2,3) (2,3,4,6) (0,2,3,6) (0,5,6) {11,14,37,45,13,21,30} +[##..###.##] (0,1,2,5,6,7,8,9) (0,1,2,3,4,6,8,9) (0,1,2,3,5,6,7,8,9) (1,3,4,5,6,7,9) (1,5,6,7,8) (0,2,3,6) (0,3,6) (5,7,9) (1,3,5,7) (1,5,9) (0) (2,8) (1,2,3,4,5,6,7,9) {67,90,64,82,46,78,83,71,44,81} +[#..##] (0,1,3,4) (0,2) (0,3,4) (0,1,3) {18,17,1,17,1} +[.#..#.#..#] (1,2,3,7,8,9) (1,2,3,4,5,6,7) (0,1,4,5,6,7,8) (1,2,4,7,8,9) (0,1,3,4,6,8,9) (3,6,7) (0,1,2,3,6,7,8) (5) {19,67,50,52,46,31,43,67,50,38} +[.##.] (0,1,3) (2) (1) {9,14,20,9} +[#.####.##] (3,4,8) (3,6,7) (0,1,2,3,4,5,7,8) (1,5) (0,1,3,4,5,6,8) (0,3,4,5,6,7) (1,2,3,4,5,6) (0,1,2) (0,2,5,6,7,8) {69,64,58,76,65,85,70,56,66} diff --git a/11-input.txt b/11-input.txt new file mode 100644 index 0000000..4e3decf --- /dev/null +++ b/11-input.txt @@ -0,0 +1,576 @@ +zez: afn pnv uvw +zae: hku ewv ydy +qet: unr qfm +igc: jcr +vzt: dac vvp nzv +bcl: kgk kns +mgt: rxm +jnn: hgv arg +ijx: mzw +crz: vot vut kcz +hmv: sga nnn +lll: czl rdx +veg: lll ttv ymx +beu: jfq own +uli: efk +zzv: oje xpx +qpn: wag kxd +arg: qmi +elp: fqe nwv fbt +tdq: som +wci: ewv ydy +odr: kps jjp odk fsu +nej: sni yyr otm +lcr: kns wko +dtc: clh zpj +qeq: ant ong wpc +hgv: wjv kco +cqt: you +vtp: gun rwh iqr jxr +ouo: efk +mhr: hgo lyi jeh +vha: hrj osn tjh +szx: xqw +chx: okn owt sbz sve +vcl: kva wcg +dak: svg rxg +sao: hgz xhz +hbw: itr wge jef +xbd: out +rbq: qet kaz zhk fim aky xli veg sdm +faz: zba zoi +wua: tol +ejk: ijx rww +abe: bxv +tol: yqu rwu jnn rrv flx hnq cdm fns wpr lys arc pkq amt wci mgo eui zae apo rar hcp hiz kvc fdk +qwv: bme +rzf: ohe +ajb: zpj +jng: out +psa: aar mof +kck: ycc mpf xqw +vfj: dhq +nei: lif urk qwv +zba: tol pmk dkl +nfk: ggk +gsi: dkl pmk tol +okn: clh +csd: vut +snw: unr qfm wyl +qac: odr noe dpp +zhk: zrm ttk mpk +ttk: jpm wig +xsp: xey vrh yrr +wpv: tmu +hku: mfr beu spp rpw +kpr: qeq svs +nep: pmk +zed: mpf xqw +mnf: dkl tol +yrj: hvh +osn: efk sjn +myr: uqk hfp +fpq: zyb zoe cua fom oto +tuu: fwr cda +jjp: swv xym +plh: rbq clx ikn +iwe: sjn oqa +sdw: qfm sao +bph: jua nei jwk pjt +pmk: zae rrv apo rwu flx wxl kvc hcp hnq fdk fns cdm wpr lys +jei: mpf +rme: vvp dac hst nzv eva +rzn: out +khw: noo ihr rry +vot: sbv ckk vcl +yni: cqt jeh lyi hgo +gld: dmm ooh +dgf: mpf +enx: jua nei jwk pjt +hqc: efk +sqf: clx rbq roj ikn +jml: out +eeu: mzw rbq +zsq: efk +pgg: jza +kps: xym drg vzi dch +gxy: rbq mzw clx +ooh: out +arc: yqi lpt +txu: bxi aeo syu szx qyg +uyh: zyb cua +cua: emo +aka: fnh +vst: lno loj fpy +xec: xoq vzt dnz qdc +wpr: arg +sqh: dhq rww plh ijx +tgq: out +xhz: fnh mpc +wpc: mmo byr oqg +ufn: cqt lyi +clh: xlu enx bph eby wdl xxx uaa fpq jxq brt uyh dyl xzk +xzk: rje +yqu: xkf ulo +mof: oub fwb ghi udp tbe +jua: haq urk lif qlf +fta: nwf +xpx: sbz sve owt okn +khe: qeq +bsn: kxe +dgo: xqw +wge: efk +dpp: odk jjp +hha: njk ygf +sjn: kpr rtu pab diq nxk dqw +bme: vtf +hfp: snd +zoe: ewz +nzv: ksp qqv vzo scu +wju: wsh mcy +jfa: xhc +ovn: out +jeh: clh +scu: dtc +wxd: clx rbq mzw ikn +xlu: oto cua fom +anp: xey yrr +mcy: zbn +enz: ixa +wsh: iwe +sni: mpf xqw +hvx: pfu +tbe: clx rbq roj ikn +loj: rtn egw zim +zrg: vwa kgk kns akv +njk: kck inl nyb jei +vzo: ajb amx +eud: mpf xqw ycc +qqv: amx dtc ajb +oto: emo epl +ttv: czl wue +cin: yyr sni ifu +uvw: biu +pkt: efk +kxm: nzs +qys: kzk +iqr: ryc elp dru +lcm: out +yyr: ycc +vpt: sjn efk +ril: nep ezr wig +wdl: vor dcu wpv yqh +dch: out +wue: jcr ufu +nso: ijo tgq rzn +ohg: mpc faz +hde: mpf ycc +huv: aoe zez xhc rpz qbi +vrf: oqa sjn +hrj: sjn oqa efk +akv: fft jzl +kns: jkz jzl fft +brt: tdq jcb rje kxm +pfu: kxe rzf btx +jcb: nrb som nzs +aoe: uvw jbz afn +biu: dkl pmk tol +xyd: beg +zoi: pmk +itr: oqa +yjn: nic +ezm: xiy wua +vor: pgg +qyg: ycc +imv: clx mzw rbq roj ikn +duh: lcn +yom: cin ppc qxa +unr: hgz aka +xed: hbw +ufu: tol +nwf: ooh xbd +wyl: aka xhz ohg +iij: grf rwh jxr +eui: tpk exk yyc +upt: qac +xhc: afn jbz uvw +xli: zpy ttk zrm +tqp: out +odk: swv vzi dch xym +yxk: btx +iah: tmu vst pgg +ifu: ycc +lyn: yjn poi oyp myr yom mbk qnk wtp fkd nyi onw ylg vav +efi: ycc xqw +jkz: sqf jtj imv +amx: you +pnv: vnp biu +btx: pgj twu +lwf: idh mph +hst: ksp qqv scu ggo +swv: out +ocv: xhc zez rpz qbi +jza: rtn zim +urk: mgt htm +egw: pjw ovn +wiu: gld +pqa: xpx quv +lfa: vut +lpt: vpt uma +cda: ovc +ubw: mal ybz yrj +pgc: zbn pkt +rtn: kcv ovn +idg: qmi hbw dbq kco +kjr: zyb zoe oto fom +mxe: sbz +fpy: zim +hgz: faz +you: ydh mkv wdl xlu uaa fpq brt hvx aom xzk +qdc: hst +ahu: ppc cin +apo: yqi yga +agv: wol +ybz: lzv hvh eud efi +uqk: rkn gpk +oqa: krf veu khe vdi uyk mtj anp rcw nqa pin xec nxk +aky: lll ttv ymx +ppc: otm yyr +flx: jaq ibc cgz +oxz: pgj hmv +hgo: you clh +wpm: ooh dmm xbd +fqe: dkl +vjd: sjn +lcn: roj mzw +gpk: hto dgo +ghi: ikn mzw rbq clx +jwk: haq urk qlf +wcg: mzw rbq roj +hnn: zzt +kgd: gpk +wax: pgc +ydh: zui tvm oaj upt +jbu: efk sjn +nyb: ycc xqw +qph: out +nnn: lcm tqp +pci: lcn imv +mtj: khw srk dgk hsb +rwh: elp ezm ryc +zke: syu aeo szx qyg +cqs: kzk +myu: otm yyr ifu sni +efk: ywb xec pin pab dqw nxk nqa rtu uyk mtj anp diq kpr krf veu khe xsp vdi jvn rcw +hto: ycc +cai: odr dpp noe +hcp: ulo xkf +vwa: pci +rar: qpn +qga: ikn roj rbq clx +mob: lzv hvh eud efi +bhd: quv xpx mxe oje +awe: grf gun iqr rwh jxr +mal: efi hvh +fwb: clx mzw rbq roj +mwk: nso +nqa: bvt hpj +idh: zzt qga eeu +noe: jjp odk fsu +nic: bxi syu szx qyg +dbq: vrf zsq jef +emo: wiu ssf +gwf: out +zui: qac cai +jpm: tol pmk +mzb: dgo zed hto hde +jzl: sqf lcn +ebd: jgt lwf kzk +fzx: njk ixa wev nxa +rnb: rxg svg bfp +axf: sjn +zsh: out +ydy: rpw beu mfr +bvt: mhr fwr ufn yni +jvn: khw hsb dgk +fim: lll +byr: hls tbj msc +tfk: mal mob +efl: chx xpx oje quv +aar: udp ghi fwb +gwv: ejk +rrv: cgz +dcu: vst pgg +mbk: myu qxa +czl: ufu gsi +dgk: noo ihr rry qim +vnp: dkl tol pmk +kcv: out +grf: elp ryc ezm +rmj: ixa wev nxa +kxd: sjn +bxi: ycc mpf +sve: zpj you +jbz: vnp mnf biu +sbz: you +ohe: sga nnn gzm +ihr: zpj +rmt: ttv lll +oje: sbz +nrb: idn +poi: ubw tfk +djn: pmk dkl +spp: own sna +mpc: djn zoi +wtp: zke gsd +ovc: zpj +oks: rkn gpk mzb +jfq: tjh hrj jhc +hls: you zpj +fnh: zba rvo +afn: mnf +ulo: uli wag ccf ouo kxd +dbn: nso chq dzg +vtf: zsh +krf: hsb srk khw +jxq: oaj tvm upt xyd +wqo: wcg kva wxd +lno: egw zim +tng: plh ijx dhq +uaa: tdq +umc: fkd poi wtp qnk vav myr oyp ahu onw ylg +ikn: snw vtp veg ocv fim ojt zhk yjk sdw rmt huv qet awe xli cuw aky jfa mbh iij +qim: you zpj +tjh: oqa sjn +eby: eyg yxk bsn pfu +aeo: xqw ycc +xxx: zui upt xyd oaj +veu: rme vzt dnz +ezr: dkl tol pmk +mzw: iij jfa mbh aky cuw awe xli huv rmt yjk sdw fim ojt ocv kaz zhk vtp veg sdm snw +fkn: szx +ant: byr oqg +jor: vfj ejk sqh +evw: chx oje mxe +rdx: gsi ufu +jgw: mhr fwr cda ufn yni +haq: bme htm mgt +sdm: iqr +yrr: zzv +kco: vrf jef wge zsq +jcr: tol pmk +ijo: out +rry: you +cox: aar mof +zzt: roj ikn +nzs: idn mwk +eva: qqv ggo scu +ccf: efk oqa +rje: nrb nzs som +dru: fqe xiy wua +ycc: csd prl bcl sjz psa dak nfk ekw cox lcr zvt fzw +diq: tuu jgw bvt +inl: mpf xqw ycc +zpj: qdk djg enx xlu kjr uyh dyl ycv fpq jxq brt ydh mkv bph uaa +gux: gld +lif: bme mgt +sga: gwf jng vnf +ywb: srk hsb +xym: out +clx: kaz zhk fim ojt snw veg sdm vtp huv qet sdw yjk rmt cuw aky xli iij jfa +hpj: ufn yni mhr cda fwr +cuw: zez aoe qbi +mbl: out +qlf: mgt htm +nxa: dgf nyb kck +dzg: rzn tgq +wxl: gms jaq ibc +epl: fta +prl: vot vut +qxa: ifu otm +kcz: wqo sbv +cgz: ulj kzl wju +msc: you +jne: njk +ygf: jei +cek: out +tpk: hqc +dmm: out +vtv: oqa sjn +vut: ckk vcl +srk: ihr noo juw +amt: tpk exk +ekw: ggk aar mof +fzw: mof ggk +pjt: qwv qlf urk lif haq +rxg: gwv qzr +svr: lyn vgi umc +kzl: mcy wsh pgc +qbi: pnv +ful: lzv +hsb: ihr rry juw qim +ylg: nic fkn gsd txu +qdk: pfu yxk +zrm: wig ezr +tmu: loj lno fpy +ymx: igc wue +exk: jbu vjd axf +ggo: ajb xfo dtc amx +tqe: jml cek zsh mbl qph +hiz: lpt yga yqi +kaz: ril +kgk: pci jkz +lzv: ycc +qfm: xhz ohg hgz +wol: sqh ejk vfj +nxk: wvz qeq svs +fom: ewz kay emo epl +roj: jfa yjk mbh iij snw awe ojt zhk +ggk: tbe fwb +rwu: arg xed hgv idg +quv: okn owt sbz sve +fwr: ovc lyi jeh +hnq: yga yqi +ryc: fbt nwv +pao: lwf +jaq: kzl wax +ztn: hfp kgd uqk +vnf: out +vzi: out +yqi: uma vtv vpt +iqm: spp +ejb: xqw mpf ycc +nwv: tol +pkq: tpk yyc +fns: hku iqm +vrh: evw pqa zzv efl +wag: sjn +vdi: qdc vzt rme xoq +sna: jhc osn hrj +sjz: wko kgk kns vwa +udp: ikn mzw +mbh: wyl unr qfm +zbn: efk oqa sjn +jef: sjn efk oqa +rww: ikn clx mzw roj rbq +rxm: cek mbl zsh qph +oaj: qac +onw: hfp kgd uqk oks +ewz: gux fta +vjr: kcz +chq: ijo tgq +jep: hha rmj jne fzx +xey: efl evw bhd +kvc: hku +bxv: mob ful ybz mal +fsu: xym drg +ibc: kzl wax +dhq: clx roj rbq mzw +som: mwk idn dbn +xkf: ouo ccf +bfp: gwv +qzr: vfj sqh tng +drg: out +pjw: out +lys: cgz jaq ibc +own: tjh osn +wev: kck inl jei nyb +dqw: wvz +pin: jgw tuu bvt +jgt: idh hnn +vgi: ztn ffs abe poi fkd jep +zim: kcv pjw ovn +mfr: sna own vha jfq +xiy: pmk tol +rvo: tol +qnk: ubw tfk +pab: yrr xey +rkn: hde hto zed ejb +cdm: yqi lpt +rtu: vzt xoq +kxe: hmv pgj twu +cri: svg agv +lyi: clh zpj +nyi: uqk +mgo: qpn xkf +fdk: hku ewv iqm ydy +oub: ikn rbq clx +owt: zpj +jhc: efk +beg: odr +pgj: sga gzm +svg: qzr gwv jor +fft: imv sqf +mmo: tbj hls +mkv: jwk pjt +syu: ycc +mph: eeu gxy +juw: clh zpj +wig: tol +fkd: rmj enz jne +ong: mmo byr +rcw: dgk hsb khw +kay: wiu ssf +qcf: tjh osn hrj jhc +xfo: zpj clh you +ssf: nwf wpm gld +xoq: hst dac eva nzv +ixa: inl jei dgf nyb +tvm: cai beg qac +twu: nnn +zpy: jpm nep wig +mpk: wig nep jpm +ycv: zui oaj +dkl: wxl hiz hcp fdk rrv apo jnn flx mgo eui cdm wpr yqu lys wci amt pkq +oyp: zke gsd txu +oqg: tbj +kva: clx roj rbq mzw +ojt: wyl sao qfm unr +ulj: wsh +vvp: ksp scu +ckk: kva +zvt: akv +qmi: itr +yga: vtv uma +mpf: ebd cox nfk csd vjr lfa cqs zvt crz +dnz: nzv vvp +uyk: qeq +yyc: hqc ujj axf +svs: ant wpc +sbv: wxd wcg +yjk: zpy mpk ril zrm +ujj: oqa +zyb: emo kay epl +ewv: rpw +eyg: rzf oxz kxe +otm: ycc xqw +yqh: tmu +gzm: jng tqp vnf +fbt: pmk dkl +snd: ejb hde +jtj: clx rbq roj mzw +aom: iah yqh wpv +ksp: dtc +kzk: mph +uma: efk oqa +djg: vor iah +htm: rxm vtf tqe +wko: duh +dyl: dcu yqh iah +wvz: ant wpc +noo: you clh +dac: vzo ggo scu ksp qqv +rpw: vha jfq qcf +ffs: jne fzx rmj hha enz +gsd: bxi szx syu aeo +vav: nej +ehw: kzk lwf jgt +gun: ezm +jxr: dru +xqw: bcl pao prl ebd sjz csd psa dak qys cri rnb cox ekw vjr cqs zrg lcr ehw crz fzw zvt +gms: wax wju +idn: dzg +wjv: zsq +tbj: you clh +rpz: uvw afn jbz +hvh: mpf xqw diff --git a/8-input.txt b/8-input.txt new file mode 100644 index 0000000..276bdc0 --- /dev/null +++ b/8-input.txt @@ -0,0 +1,1000 @@ +19811,63901,80424 +56472,26644,32079 +77528,24129,29189 +53533,94958,85776 +93168,69326,27460 +25374,91449,95696 +96129,76282,72430 +80100,69230,78980 +63046,75012,45443 +48923,26202,95974 +18380,35864,5685 +10377,91999,83841 +18215,31413,43273 +69608,47324,31546 +74388,93328,70320 +7488,75918,69838 +3402,16390,43595 +61505,84673,4512 +84158,58795,66886 +85461,84839,45157 +55232,17224,51398 +35761,77776,24081 +81650,1370,1703 +11297,95673,39240 +25368,3794,96381 +31893,59581,83142 +61121,5160,19889 +4829,38017,11633 +51020,6358,31830 +90869,94064,99116 +50255,99219,43018 +7581,50550,29351 +59667,39449,80754 +11289,71781,52195 +72898,75800,49342 +14519,85836,78944 +75078,35968,51444 +9620,19765,71878 +84052,94801,28054 +72618,23498,58857 +78616,81248,96697 +2079,22191,39236 +71386,21281,24930 +9154,3724,73394 +61950,91606,34692 +66507,60009,2528 +99431,76247,79160 +89693,80180,16981 +34456,33695,53921 +24601,81277,79889 +77036,22134,45737 +42069,73464,71541 +56434,65127,82549 +59647,90286,18929 +5834,6709,55511 +56513,16545,20517 +4325,20798,55038 +83963,59491,40901 +91600,60483,98350 +64239,54023,19748 +18934,17655,70517 +29421,1715,50292 +93589,70619,21682 +54809,42502,22370 +85716,90285,21129 +19659,4752,89967 +45183,31182,26351 +56478,3706,75767 +76841,54463,10838 +14107,1129,60689 +96635,17276,59040 +30691,82119,42177 +88318,72067,70875 +91904,83010,61959 +25074,25841,51517 +21112,30406,18775 +8324,21828,65391 +73077,47615,1276 +94230,24986,33586 +15618,87608,81102 +92050,71735,26685 +89228,79626,30622 +66366,17759,51633 +85322,74490,57964 +17237,73526,43846 +5834,12316,14166 +9278,45893,96833 +33627,28165,83788 +86926,22237,80297 +31748,12903,88689 +63755,79782,86198 +38772,53598,12888 +2169,26610,16688 +2340,75351,19483 +51160,87750,31219 +90519,25360,20683 +78041,43468,6310 +93889,76633,67582 +90185,80468,69643 +82915,20204,41153 +38677,32451,14620 +76581,22670,99977 +38232,44501,58232 +25188,64312,83600 +28522,70590,64923 +79024,25865,90440 +81150,26724,21842 +8567,1245,50914 +81807,29752,74627 +61158,76395,64935 +19158,2452,6107 +22118,14241,16382 +24726,7286,84878 +46530,89315,49229 +63489,53184,77743 +41806,4473,56796 +55834,21351,28613 +76005,84959,26713 +93292,23154,84373 +37327,43296,40876 +81256,39939,64161 +19247,33012,27994 +74387,107,11889 +6245,88353,18422 +29900,26067,13036 +28913,13816,59311 +8074,37782,34953 +77584,10697,86255 +58554,12913,69509 +86099,12682,60061 +30083,72465,29376 +41934,1462,40706 +81846,751,7414 +59573,14000,28774 +86161,80881,23697 +94742,64212,86778 +42849,13589,56059 +60876,37327,7101 +64427,33129,92490 +97873,3249,14341 +28014,5851,85764 +2221,4054,90020 +6589,43790,2416 +13351,62945,79616 +37219,48800,65731 +63672,23104,82403 +64932,52688,91813 +76107,80904,33639 +44158,473,88251 +14708,81063,33847 +32692,39861,9391 +447,84114,10262 +33278,11518,96968 +56501,45291,9608 +88389,17476,31993 +50797,76742,46926 +21861,99835,90288 +3986,78555,41383 +44875,44797,86262 +11526,58218,38272 +75687,38352,69458 +88867,96578,11311 +39355,85692,85713 +15477,37111,72142 +95935,9393,63283 +69451,12959,61205 +98520,5974,70909 +6144,9418,30730 +96258,44445,35265 +92764,32300,59606 +42983,79338,74537 +25798,87291,47116 +41304,65610,84929 +86509,6137,66583 +86384,4591,79527 +20475,57453,34821 +80819,92747,12513 +9682,27456,92563 +38688,6746,62361 +3682,27195,80177 +72692,63496,67642 +62961,39138,76992 +40826,3771,16666 +12359,63605,34287 +40332,9457,39359 +34596,86486,7009 +63022,27023,96152 +51637,29842,22317 +87240,35421,31220 +20435,81925,39081 +64008,24442,49259 +56973,76393,17297 +87911,96543,64428 +23762,34754,78689 +78907,93621,99438 +93331,8732,97082 +68707,64659,50231 +82112,55191,57667 +23944,58917,50002 +68230,52727,15360 +75459,15864,5228 +34303,80546,35999 +44028,49442,16674 +8150,1119,98674 +22471,70273,57876 +86341,13749,47137 +832,59477,56492 +52365,97091,14470 +17545,27204,18271 +44182,68155,22931 +93690,90582,21197 +63501,92103,2420 +32868,87558,86243 +93528,96090,37782 +11575,26144,5553 +65882,75154,90491 +25960,54961,33702 +41043,46190,30747 +42871,69787,35877 +69061,79083,24878 +28661,90268,67864 +10779,61821,20133 +80729,63970,87035 +50138,18797,81089 +96077,34756,13203 +67768,50801,56084 +88405,74067,73882 +81910,47760,23240 +8535,57152,15402 +25317,37540,43266 +63320,85760,18110 +49312,47097,76115 +25651,52362,92747 +71254,50808,55842 +15473,83688,87161 +80693,99299,35536 +16511,76084,35052 +13533,12597,358 +59031,1091,67689 +87348,82217,87376 +8157,32720,71537 +19009,21003,16117 +82501,1887,12274 +459,33618,34333 +67036,4148,14892 +77817,68790,36382 +88282,56775,61100 +82705,40354,47087 +26065,66579,4970 +25567,994,33845 +75522,36137,27159 +77746,55935,97178 +1234,61523,61927 +57928,92637,98933 +28480,77661,67505 +17306,26135,82053 +74596,76509,53005 +67607,59955,25511 +86805,12710,78195 +97785,32852,86994 +9415,30864,40984 +67661,5280,23530 +33460,99673,16779 +48100,53787,17786 +73587,22520,25582 +62755,22493,27384 +83205,16489,4617 +62309,80142,84926 +80462,62062,94863 +20967,53365,99542 +80746,89465,8697 +55951,60358,83213 +73994,30449,53979 +42722,17591,36224 +87190,67653,76864 +7538,17296,26862 +36019,44938,98314 +34425,34460,2079 +9664,6894,65255 +67328,65001,12579 +36386,93580,1066 +66274,91220,58226 +97935,75837,76921 +97292,73543,62881 +76688,9307,18417 +25080,82552,98645 +28701,87652,36807 +59340,63999,76326 +51435,49596,4379 +91935,73656,87221 +31099,50758,81931 +95994,76695,86365 +8559,43271,20825 +64194,13170,47376 +82719,4053,4458 +68153,33715,17440 +86979,70992,23758 +63929,14943,20735 +54059,96047,67620 +90430,99558,66276 +31334,86285,75149 +98315,23414,95838 +79699,1796,24744 +64662,43057,23674 +82642,27541,40005 +58008,96149,44469 +38429,70163,25068 +77752,79050,62344 +54237,53644,73334 +9322,59901,66138 +82643,9968,38143 +39518,53305,29525 +71315,84108,22607 +86216,90227,72144 +43523,64759,83295 +70047,60319,8440 +62587,83506,82453 +54745,7148,73053 +75112,80138,10295 +52206,6301,14514 +86949,86347,53019 +71450,84192,18337 +83241,26758,50971 +83111,52273,14367 +86555,66442,7734 +8673,10344,67356 +8575,28519,94069 +45843,72014,46504 +20214,60294,55324 +73897,84286,7063 +14497,35646,33159 +78742,11879,60615 +24094,20685,42857 +11884,29808,26234 +36322,32587,91732 +10712,43415,10274 +7426,9808,48324 +81974,7483,78316 +17783,42120,43640 +15854,2400,44314 +42417,13879,32784 +37677,29537,26927 +32160,70397,59430 +95276,30298,62435 +84031,38093,92161 +70339,16302,48638 +19925,78230,19721 +36181,95485,77688 +26613,4084,69309 +86928,29344,38194 +82438,86979,31105 +13508,14424,64061 +1544,46188,58559 +76868,79413,9985 +35308,62538,54772 +65083,8589,42759 +60122,79164,81502 +42454,99015,47153 +27150,27799,45663 +81832,85798,61989 +96410,72345,6569 +59176,37863,13799 +74992,46560,93891 +47147,87623,67859 +9760,14366,71917 +38608,43679,6314 +9957,94204,39848 +37872,84341,18797 +10728,31641,95460 +59328,25972,84127 +93198,80907,90161 +59793,60153,12700 +47878,43038,85124 +37329,22291,37297 +77925,50089,19756 +46332,22443,29813 +97970,94929,12935 +32832,37115,34996 +7499,21023,92879 +56041,96573,29323 +75934,44899,77626 +46438,55682,63742 +49590,42688,46298 +85039,62072,13265 +2152,10437,40310 +84812,37534,32959 +42831,43299,34940 +79833,25833,6189 +17425,77,87620 +70035,17028,66357 +44699,93506,64133 +26071,65119,16840 +75801,19788,16680 +2464,16223,45866 +10113,2621,4243 +73995,58225,1984 +23547,35431,79325 +44188,55903,57790 +40521,67812,69740 +83261,27507,50374 +1145,53212,1217 +78452,15661,53331 +37714,32003,23524 +61960,70572,34404 +82392,2203,59760 +83885,87292,64240 +88124,42935,52255 +88136,46453,30331 +99617,5929,66908 +84854,16773,63241 +28500,63982,24453 +29764,8869,7270 +41654,71044,35856 +49340,78914,74173 +87296,66814,50584 +81358,55828,6930 +57557,99385,89952 +81573,52002,81896 +16354,41837,85135 +64625,60014,36716 +45985,11829,96695 +31230,94212,72499 +81038,28808,52029 +66299,97135,39447 +60436,17058,26867 +26821,92712,22921 +44305,86415,5331 +20582,37708,74086 +53105,41334,69427 +55361,94123,20787 +89609,54698,11286 +65174,72996,89210 +14462,74925,96093 +369,1423,12102 +81348,91522,20747 +80184,17963,19284 +27628,72040,8065 +17476,68412,70807 +60083,87171,94145 +46388,56309,13161 +42631,41522,2442 +52667,55436,51631 +36975,37301,6713 +64149,46822,73948 +18327,79704,31893 +78555,56935,9680 +60191,21720,47622 +54364,1402,63657 +72531,61636,61182 +54775,36458,47966 +21183,36917,92307 +8199,27034,98741 +3155,26251,34581 +79986,32596,30351 +94937,35979,67438 +70085,23486,32284 +85225,61234,93929 +45241,40635,82602 +33396,67124,98715 +77909,71316,13352 +36830,27736,36406 +76321,51084,895 +71062,77989,74926 +61924,79668,16949 +68462,19140,80662 +50596,95202,14557 +46215,77912,30128 +28497,87737,11515 +58169,44744,50107 +31137,27619,70290 +77881,65634,28401 +52061,98481,42430 +13293,83245,61313 +96139,71515,47167 +79353,30430,81936 +36813,37397,56422 +8570,94518,75911 +78594,78038,96861 +93356,95735,78898 +23903,65596,24789 +10807,85711,86308 +22923,59760,70072 +35343,75779,89252 +37668,76222,74313 +79178,40537,33196 +19844,60421,18493 +61456,66856,36942 +30357,80858,39689 +45301,72648,18283 +85606,17987,99814 +91773,60010,18981 +85713,61096,75890 +42256,5887,74972 +99272,74302,994 +20979,84769,45589 +31699,56218,33676 +41559,9163,86890 +23892,27334,89475 +14822,22776,10715 +37667,65920,6351 +32112,81968,17075 +90843,17172,2673 +96916,43900,55505 +94957,25352,5827 +7289,50474,95225 +77665,76450,59127 +75742,48626,95646 +7591,15387,55440 +22733,63473,46411 +19433,62499,79181 +93309,61722,70184 +24379,83969,84973 +16874,83921,69806 +52840,61098,14578 +15737,30790,68500 +90187,3322,48832 +2830,34450,52062 +46035,9997,23146 +51242,86174,73660 +64461,74769,34791 +9710,45256,36435 +41047,19773,72003 +15294,17535,55142 +73757,18431,91478 +74522,58511,49255 +59123,67071,87838 +57192,98568,69179 +23435,72939,35565 +25258,95498,91417 +51888,32939,90519 +81589,30845,8108 +75496,53112,42267 +99240,88793,39410 +37175,50634,83343 +5426,96323,45274 +5771,16845,17342 +67815,11937,21756 +31448,92069,33611 +71929,76152,73690 +27221,20673,67371 +83662,10295,69459 +79530,50485,57181 +33456,61011,45570 +17392,64200,54390 +86609,98501,8821 +15009,95179,33540 +19379,52923,47142 +39624,58537,20536 +44222,69386,79271 +61775,97795,50366 +16739,36539,75572 +71437,56783,27916 +95672,47904,20468 +49879,2124,70882 +75390,93535,98190 +64921,24227,69903 +78184,72258,81657 +28708,44193,99168 +452,79372,30788 +37556,59092,16594 +76882,42902,18506 +76781,53697,30647 +18629,22726,74081 +12963,69962,18766 +35016,31989,69764 +83196,60514,19101 +12077,96106,73134 +93278,47440,69028 +86532,89374,81139 +97986,26301,88467 +53983,62742,59081 +20375,35156,2600 +36730,80019,90622 +26781,57491,51462 +51607,3233,55344 +86527,60362,70018 +32612,63361,50738 +95878,57913,8932 +50567,83830,77679 +14610,13478,80070 +83756,88629,86663 +75713,48667,57674 +55820,90569,73614 +63376,31891,14912 +89521,60460,29381 +79863,38559,51035 +51468,91332,30691 +24637,31579,22339 +87532,83514,68636 +28952,32941,36059 +38303,64977,77598 +33647,14736,87999 +42735,4549,16941 +6566,27990,26298 +15820,36391,10265 +50379,38288,47656 +56743,1648,64257 +70197,96759,73037 +82134,16893,56994 +3389,95349,15379 +63765,94194,23204 +45841,28949,97461 +26217,48585,93864 +1266,91667,34045 +23078,88036,17024 +33499,39651,30563 +25554,18842,30273 +86546,83059,81037 +35753,19754,71205 +40311,75499,6921 +20317,6652,37344 +28182,42272,70728 +32903,5540,6860 +76036,67776,70592 +17783,60076,82378 +57975,7646,1752 +67874,34892,45471 +34346,70294,66266 +41414,77576,39882 +57801,17807,71798 +20349,20211,64823 +14860,70205,13593 +5070,73845,64482 +94131,91239,75691 +96784,30610,62319 +41809,28299,46550 +89409,81409,59341 +87820,75287,68617 +10649,4404,696 +11784,33700,59413 +73944,55344,42792 +55697,72654,157 +5016,69277,21926 +66508,99033,44917 +31425,72862,78962 +89179,85001,45188 +57726,64047,5739 +77496,64820,64560 +92417,19239,79246 +58700,71320,93844 +89859,80072,31222 +43318,75829,23661 +6017,23792,20575 +83362,55569,37877 +97083,45044,33220 +12065,73003,70043 +50518,5948,44557 +57309,83963,58344 +91788,95409,62983 +31292,58901,22534 +26532,43129,65580 +19182,1280,87351 +93970,6620,96527 +4658,25023,8400 +9077,15456,3646 +22554,9994,72248 +38789,20563,39619 +62867,19184,34319 +57598,82637,82994 +64212,91682,6492 +87608,66783,58765 +80198,9816,87378 +20054,26469,74941 +82246,75648,160 +4074,48052,73658 +51106,9044,13290 +74926,26678,18703 +4993,53210,50968 +82986,47086,48291 +32100,28586,9809 +91129,30486,25870 +22497,13350,95359 +14009,65738,21491 +78501,71773,72361 +41810,66661,25736 +47075,94382,56069 +50279,40907,51427 +39977,50320,10036 +34198,68577,63662 +84518,97980,21557 +56207,44939,96264 +60108,61364,92726 +36300,77356,81287 +30075,80166,75056 +89056,79654,81981 +68136,59755,53159 +14842,66543,97137 +65814,44988,42054 +88989,25007,77870 +43726,16632,42865 +86466,43695,5595 +21836,49422,40865 +49227,89854,70959 +15797,73857,57588 +29875,59816,72598 +88454,47592,15337 +89545,5687,69400 +84613,32176,66828 +95869,39150,67340 +60875,67660,91914 +76146,87023,14388 +55959,11135,56069 +2249,84266,91780 +79180,14086,71440 +63001,26614,35620 +54539,18037,17309 +1558,10867,88872 +44899,31996,49311 +41929,26066,2537 +89941,86765,31971 +88092,36628,34299 +5682,80787,58527 +96888,89602,44511 +99228,44384,63071 +53497,44337,52002 +86233,98233,68229 +51975,41192,90639 +93997,31147,73228 +80920,84194,70981 +45797,12863,7480 +70167,4134,2559 +22641,8865,79038 +70110,88521,38429 +78889,85491,49229 +12666,2698,91505 +88461,12686,37429 +30000,76265,74240 +70372,45926,3826 +66297,82641,59310 +76580,24861,87559 +42284,99010,44791 +21376,89287,73468 +22462,81305,28663 +64619,17244,73971 +56073,66105,23581 +87024,20292,89228 +77032,17755,13489 +68668,36461,89034 +98003,81337,38405 +71767,83532,68907 +93686,5125,61060 +85537,42959,43046 +67957,80517,32053 +17729,38600,81536 +70491,20300,99081 +99246,53897,33878 +39524,93580,17510 +6972,3673,55131 +15805,31783,86457 +34109,98739,93119 +70193,55571,8171 +5887,67593,89966 +11019,35736,97762 +32879,57994,16752 +61376,75055,48899 +30930,29484,84253 +64877,80684,31511 +52705,13471,72054 +51243,99505,19217 +82483,82815,25259 +77931,32937,94215 +48860,133,35086 +14640,73229,73489 +75961,39570,20897 +27338,15796,7896 +1895,37430,61052 +87232,58934,45914 +21524,23498,17095 +43125,55902,93575 +80969,26254,93398 +59632,17165,45845 +46762,76154,73936 +13867,41935,88868 +65682,63921,64317 +62144,60101,57769 +17838,91167,73333 +98363,59355,5771 +82492,12654,1751 +202,15862,41316 +61397,47059,45142 +33400,93137,88393 +96214,44075,39775 +42896,60476,19098 +29291,1825,33872 +19562,57186,86051 +11559,58307,51590 +7188,94277,37622 +1444,73415,9850 +62875,31855,38456 +57024,64198,92533 +44396,46599,57851 +24499,16974,49274 +79176,34449,47985 +84121,92757,15373 +32844,64343,44475 +44277,12758,96990 +40415,83995,17773 +44477,83897,44587 +87874,52552,53469 +82280,9909,31546 +79356,49464,95175 +15218,55924,59929 +9819,79704,84250 +9338,82517,69606 +57233,34324,53315 +80048,4077,5287 +96745,83896,89879 +11087,81720,68852 +96849,99593,1034 +76625,87880,10339 +72990,78200,1409 +56058,45796,7719 +43278,43316,8210 +64985,87647,434 +14108,87099,77947 +66772,3555,10295 +87400,73824,92134 +73474,88228,76642 +13497,54640,36351 +4043,12369,46995 +95132,1331,2069 +93277,15101,98818 +12397,61103,38512 +10212,13631,45995 +86062,41166,8039 +58661,66625,52204 +24474,17045,55761 +85101,42605,76653 +36653,30252,27214 +841,29789,894 +18750,79154,42505 +43962,10656,30900 +3813,76470,36439 +93856,66682,99229 +87423,57120,32218 +29290,15766,91578 +96475,70508,34619 +2200,29714,33937 +79075,40479,53800 +41299,16400,91855 +90648,24661,3360 +87089,62732,41525 +51608,75471,55763 +89216,30888,64851 +19103,46634,74429 +43723,7451,32477 +2595,11567,9371 +25642,36860,66095 +49086,82439,93386 +65515,88795,66470 +64903,57499,26666 +68286,73158,50267 +26246,57150,15395 +98948,59998,34092 +43920,73144,2976 +68935,46651,55010 +75188,19536,71437 +94428,34063,92570 +52881,15010,53734 +20995,96960,25093 +39618,33148,10332 +78252,35233,47084 +20468,42163,5477 +86128,77267,50139 +75143,18182,2299 +11097,63366,32588 +18921,58748,60703 +90414,54382,5076 +23796,92996,16943 +84729,17895,81177 +69686,2205,76228 +95769,14384,21319 +252,35451,69089 +23340,30613,49295 +41858,45789,36354 +33,28577,45663 +11889,54351,68305 +88873,26983,66233 +86471,90079,34873 +57541,20638,34455 +25244,695,20334 +34134,80714,25794 +20569,68280,3322 +8667,26273,46395 +68133,17007,94043 +21487,8103,64437 +29560,73097,62716 +32523,18955,22396 +34558,99550,4781 +33343,95788,63429 +90191,78358,541 +61035,86186,95253 +70726,84551,97581 +58340,89588,39079 +4479,12219,19026 +7531,31924,36487 +95754,31075,77517 +57045,87096,92359 +10026,83776,89447 +27272,86804,11705 +92211,93388,60345 +73961,87102,53998 +83075,34175,34496 +12549,71811,20990 +7436,85903,70014 +34450,70,97461 +25276,8824,97522 +91088,33617,74285 +8693,8968,62657 +11684,87690,68977 +78863,53669,21973 +74897,91362,54245 +61668,2006,28255 +43804,54180,4244 +68033,63538,37548 +24848,40148,99039 +39485,77454,77755 +12037,46195,47449 +94249,38595,57871 +56835,62808,15824 +36748,44322,97234 +74449,59448,27874 +92769,5328,29031 +71952,5787,60374 +51500,65137,57036 +75126,38563,58017 +91605,83071,85330 +95142,74242,61389 +48538,81258,20560 +42894,72720,815 +35268,91261,72793 +46686,55700,41021 +87659,28342,53570 +75844,33667,57794 +96291,93113,88151 +36075,79308,38704 +29725,13612,82191 +75856,51,95679 +76888,88151,37029 +86875,93273,75313 +91069,8123,51210 +38764,51477,57409 +16757,76747,69360 +67060,40243,38330 +9124,19472,61055 +25475,39383,80548 +68662,45737,50093 +10605,20544,58159 +89687,31428,85417 +34706,4824,26547 +31692,11892,72989 +35017,72971,66558 +52376,36785,54438 +77199,36841,78787 +63226,40307,19604 +27918,52813,89106 +543,12459,97260 +22721,92653,77226 +22047,32420,77473 +50107,23096,1266 +89689,10137,1445 +99626,5426,67539 +45135,19027,72283 +91663,57343,38515 +16231,63012,98967 +24384,74762,3138 +75068,1121,32120 +92923,61715,17282 +31189,44207,1389 +20868,89128,58615 +82536,78750,7953 +53165,92905,5378 +6454,87128,91320 +72058,92250,16673 +62458,21836,79821 +81067,1638,21535 +56324,80191,58416 +5039,17656,1501 +49871,45912,84662 +54569,26670,96845 +57648,52234,41510 +34468,46762,63901 +73184,95006,98350 +53794,7658,6271 +21564,95139,66193 +49201,55477,31114 +10108,85551,31370 +90862,91400,92611 +5826,90177,71681 +59477,22810,73219 +1031,38454,13095 +25784,50057,58569 +40353,99246,78101 +17937,14538,73868 +25614,71008,36169 +33379,9819,60131 +5475,25938,4283 +40321,63581,53244 +93504,49061,94176 +36875,39683,99617 \ No newline at end of file diff --git a/9-input.txt b/9-input.txt new file mode 100644 index 0000000..263ce11 --- /dev/null +++ b/9-input.txt @@ -0,0 +1,496 @@ +97668,50157 +97668,51385 +98359,51385 +98359,52575 +97665,52575 +97665,53785 +97626,53785 +97626,55034 +97938,55034 +97938,56284 +98077,56284 +98077,57485 +97804,57485 +97804,58599 +97082,58599 +97082,59720 +96522,59720 +96522,61011 +96752,61011 +96752,62293 +96842,62293 +96842,63219 +95629,63219 +95629,64637 +96118,64637 +96118,65759 +95613,65759 +95613,66948 +95301,66948 +95301,67785 +94102,67785 +94102,69157 +94239,69157 +94239,70372 +93956,70372 +93956,71497 +93462,71497 +93462,72391 +92522,72391 +92522,73588 +92169,73588 +92169,74677 +91605,74677 +91605,75577 +90735,75577 +90735,76527 +89962,76527 +89962,77334 +88997,77334 +88997,78807 +88960,78807 +88960,79327 +87630,79327 +87630,80406 +87039,80406 +87039,81692 +86671,81692 +86671,82145 +85345,82145 +85345,83121 +84613,83121 +84613,84404 +84177,84404 +84177,84975 +83027,84975 +83027,85494 +81855,85494 +81855,86592 +81204,86592 +81204,87652 +80495,87652 +80495,87676 +78965,87676 +78965,88740 +78250,88740 +78250,89295 +77157,89295 +77157,89838 +76067,89838 +76067,90648 +75150,90648 +75150,91244 +74096,91244 +74096,92217 +73250,92217 +73250,92230 +71882,92230 +71882,93396 +71109,93396 +71109,93796 +69948,93796 +69948,94048 +68730,94048 +68730,94809 +67727,94809 +67727,94758 +66408,94758 +66408,95089 +65245,95089 +65245,96007 +64268,96007 +64268,96250 +63068,96250 +63068,96202 +61799,96202 +61799,96958 +60733,96958 +60733,97436 +59585,97436 +59585,96828 +58233,96828 +58233,97534 +57121,97534 +57121,97396 +55877,97396 +55877,98131 +54733,98131 +54733,97773 +53479,97773 +53479,98175 +52283,98175 +52283,98456 +51067,98456 +51067,97614 +49842,97614 +49842,98235 +48618,98235 +48618,97487 +47434,97487 +47434,98106 +46176,98106 +46176,97992 +44959,97992 +44959,97234 +43825,97234 +43825,97343 +42587,97343 +42587,97475 +41328,97475 +41328,97086 +40161,97086 +40161,96999 +38929,96999 +38929,96224 +37868,96224 +37868,96534 +36518,96534 +36518,95278 +35629,95278 +35629,95798 +34176,95798 +34176,94596 +33315,94596 +33315,94217 +32167,94217 +32167,94017 +30938,94017 +30938,93419 +29875,93419 +29875,93320 +28572,93320 +28572,92335 +27707,92335 +27707,91771 +26634,91771 +26634,91292 +25508,91292 +25508,90722 +24430,90722 +24430,89993 +23451,89993 +23451,89058 +22622,89058 +22622,88249 +21717,88249 +21717,87950 +20423,87950 +20423,87200 +19461,87200 +19461,86247 +18673,86247 +18673,85600 +17622,85600 +17622,84972 +16535,84972 +16535,83818 +15957,83818 +15957,83194 +14847,83194 +14847,82131 +14198,82131 +14198,81126 +13499,81126 +13499,80183 +12731,80183 +12731,79509 +11615,79509 +11615,78372 +11092,78372 +11092,77532 +10163,77532 +10163,76010 +10248,76010 +10248,75053 +9507,75053 +9507,74092 +8762,74092 +8762,73055 +8135,73055 +8135,72149 +7253,72149 +7253,70795 +7249,70795 +7249,70085 +5902,70085 +5902,68911 +5525,68911 +5525,67490 +5790,67490 +5790,66691 +4469,66691 +4469,65248 +4903,65248 +4903,64335 +3774,64335 +3774,63137 +3507,63137 +3507,61856 +3575,61856 +3575,60662 +3352,60662 +3352,59529 +2838,59529 +2838,58343 +2546,58343 +2546,57131 +2395,57131 +2395,55892 +2480,55892 +2480,54676 +2452,54676 +2452,53518 +1692,53518 +1692,52280 +1887,52280 +1887,51047 +2466,51047 +2466,50147 +94584,50147 +94584,48634 +2325,48634 +2325,47435 +2529,47435 +2529,46159 +1677,46159 +1677,45037 +2751,45037 +2751,43735 +2074,43735 +2074,42540 +2355,42540 +2355,41440 +3136,41440 +3136,40187 +3040,40187 +3040,39003 +3312,39003 +3312,37702 +3141,37702 +3141,36629 +3850,36629 +3850,35406 +4019,35406 +4019,34280 +4503,34280 +4503,33068 +4742,33068 +4742,32005 +5379,32005 +5379,30924 +5950,30924 +5950,29889 +6610,29889 +6610,28717 +6971,28717 +6971,27573 +7409,27573 +7409,26669 +8292,26669 +8292,25449 +8608,25449 +8608,24676 +9669,24676 +9669,23306 +9786,23306 +9786,22403 +10628,22403 +10628,21705 +11733,21705 +11733,20341 +11945,20341 +11945,19857 +13281,19857 +13281,18293 +13312,18293 +13312,17548 +14319,17548 +14319,16511 +15002,16511 +15002,16236 +16458,16236 +16458,15367 +17296,15367 +17296,14521 +18158,14521 +18158,13110 +18542,13110 +18542,13065 +20086,13065 +20086,11920 +20724,11920 +20724,10924 +21504,10924 +21504,10871 +22957,10871 +22957,9785 +23686,9785 +23686,9422 +24893,9422 +24893,8528 +25771,8528 +25771,8112 +26930,8112 +26930,7439 +27946,7439 +27946,7070 +29117,7070 +29117,6038 +29976,6038 +29976,5771 +31192,5771 +31192,4984 +32190,4984 +32190,4519 +33326,4519 +33326,4219 +34520,4219 +34520,4482 +35883,4482 +35883,3439 +36843,3439 +36843,3095 +38020,3095 +38020,2870 +39227,2870 +39227,3158 +40535,3158 +40535,2565 +41659,2565 +41659,2852 +42936,2852 +42936,2524 +44112,2524 +44112,2000 +45279,2000 +45279,1788 +46488,1788 +46488,2310 +47739,2310 +47739,2367 +48950,2367 +48950,1804 +50159,1804 +50159,2234 +51368,2234 +51368,2144 +52585,2144 +52585,2549 +53771,2549 +53771,2273 +55012,2273 +55012,2455 +56214,2455 +56214,2142 +57493,2142 +57493,3027 +58579,3027 +58579,3427 +59731,3427 +59731,2947 +61082,2947 +61082,3867 +62107,3867 +62107,4342 +63227,4342 +63227,3931 +64621,3931 +64621,4462 +65733,4462 +65733,5072 +66808,5072 +66808,5293 +68029,5293 +68029,5570 +69240,5570 +69240,6136 +70329,6136 +70329,6925 +71305,6925 +71305,7721 +72262,7721 +72262,8355 +73294,8355 +73294,8527 +74598,8527 +74598,9036 +75720,9036 +75720,10333 +76330,10333 +76330,10765 +77501,10765 +77501,11424 +78523,11424 +78523,12187 +79469,12187 +79469,13065 +80319,13065 +80319,13864 +81229,13864 +81229,14274 +82492,14274 +82492,15569 +82946,15569 +82946,15997 +84228,15997 +84228,16975 +84972,16975 +84972,18086 +85559,18086 +85559,18601 +86820,18601 +86820,19675 +87442,19675 +87442,20608 +88231,20608 +88231,21531 +89038,21531 +89038,22646 +89577,22646 +89577,23868 +89936,23868 +89936,24672 +90934,24672 +90934,25781 +91453,25781 +91453,26818 +92092,26818 +92092,27910 +92630,27910 +92630,28912 +93351,28912 +93351,30291 +93269,30291 +93269,31123 +94390,31123 +94390,32350 +94611,32350 +94611,33635 +94637,33635 +94637,34545 +95707,34545 +95707,35695 +96123,35695 +96123,36876 +96442,36876 +96442,38138 +96445,38138 +96445,39253 +97013,39253 +97013,40456 +97229,40456 +97229,41635 +97573,41635 +97573,42864 +97628,42864 +97628,44148 +97188,44148 +97188,45339 +97389,45339 +97389,46492 +98162,46492 +98162,47736 +97751,47736 +97751,48931 +98481,48931 +98481,50157 diff --git a/Cargo.lock b/Cargo.lock index e6e29ee..1ab52f9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5,3 +5,309 @@ version = 4 [[package]] name = "aoc-2025" version = "0.1.0" +dependencies = [ + "nalgebra", +] + +[[package]] +name = "approx" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" +dependencies = [ + "num-traits", +] + +[[package]] +name = "autocfg" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" + +[[package]] +name = "bytemuck" +version = "1.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fbdf580320f38b612e485521afda1ee26d10cc9884efaaa750d383e13e3c5f4" + +[[package]] +name = "glam" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "333928d5eb103c5d4050533cec0384302db6be8ef7d3cebd30ec6a35350353da" + +[[package]] +name = "glam" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3abb554f8ee44336b72d522e0a7fe86a29e09f839a36022fa869a7dfe941a54b" + +[[package]] +name = "glam" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4126c0479ccf7e8664c36a2d719f5f2c140fbb4f9090008098d2c291fa5b3f16" + +[[package]] +name = "glam" +version = "0.17.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e01732b97afd8508eee3333a541b9f7610f454bb818669e66e90f5f57c93a776" + +[[package]] +name = "glam" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "525a3e490ba77b8e326fb67d4b44b4bd2f920f44d4cc73ccec50adc68e3bee34" + +[[package]] +name = "glam" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b8509e6791516e81c1a630d0bd7fbac36d2fa8712a9da8662e716b52d5051ca" + +[[package]] +name = "glam" +version = "0.20.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f43e957e744be03f5801a55472f593d43fabdebf25a4585db250f04d86b1675f" + +[[package]] +name = "glam" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "518faa5064866338b013ff9b2350dc318e14cc4fcd6cb8206d7e7c9886c98815" + +[[package]] +name = "glam" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12f597d56c1bd55a811a1be189459e8fad2bbc272616375602443bdfb37fa774" + +[[package]] +name = "glam" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e4afd9ad95555081e109fe1d21f2a30c691b5f0919c67dfa690a2e1eb6bd51c" + +[[package]] +name = "glam" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5418c17512bdf42730f9032c74e1ae39afc408745ebb2acf72fbc4691c17945" + +[[package]] +name = "glam" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "151665d9be52f9bb40fc7966565d39666f2d1e69233571b71b87791c7e0528b3" + +[[package]] +name = "glam" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e05e7e6723e3455f4818c7b26e855439f7546cf617ef669d1adedb8669e5cb9" + +[[package]] +name = "glam" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "779ae4bf7e8421cf91c0b3b64e7e8b40b862fba4d393f59150042de7c4965a94" + +[[package]] +name = "glam" +version = "0.29.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8babf46d4c1c9d92deac9f7be466f76dfc4482b6452fc5024b5e8daf6ffeb3ee" + +[[package]] +name = "glam" +version = "0.30.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd47b05dddf0005d850e5644cae7f2b14ac3df487979dbfff3b56f20b1a6ae46" + +[[package]] +name = "matrixmultiply" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06de3016e9fae57a36fd14dba131fccf49f74b40b7fbdb472f96e361ec71a08" +dependencies = [ + "autocfg", + "rawpointer", +] + +[[package]] +name = "nalgebra" +version = "0.34.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4d5b3eff5cd580f93da45e64715e8c20a3996342f1e466599cf7a267a0c2f5f" +dependencies = [ + "approx", + "glam 0.14.0", + "glam 0.15.2", + "glam 0.16.0", + "glam 0.17.3", + "glam 0.18.0", + "glam 0.19.0", + "glam 0.20.5", + "glam 0.21.3", + "glam 0.22.0", + "glam 0.23.0", + "glam 0.24.2", + "glam 0.25.0", + "glam 0.27.0", + "glam 0.28.0", + "glam 0.29.3", + "glam 0.30.9", + "matrixmultiply", + "nalgebra-macros", + "num-complex", + "num-rational", + "num-traits", + "simba", + "typenum", +] + +[[package]] +name = "nalgebra-macros" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "973e7178a678cfd059ccec50887658d482ce16b0aa9da3888ddeab5cd5eb4889" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "num-complex" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" +dependencies = [ + "num-bigint", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + +[[package]] +name = "proc-macro2" +version = "1.0.103" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rawpointer" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" + +[[package]] +name = "safe_arch" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96b02de82ddbe1b636e6170c21be622223aea188ef2e139be0a5b219ec215323" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "simba" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c99284beb21666094ba2b75bbceda012e610f5479dfcc2d6e2426f53197ffd95" +dependencies = [ + "approx", + "num-complex", + "num-traits", + "paste", + "wide", +] + +[[package]] +name = "syn" +version = "2.0.111" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "390cc9a294ab71bdb1aa2e99d13be9c753cd2d7bd6560c77118597410c4d2e87" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "typenum" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" + +[[package]] +name = "unicode-ident" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" + +[[package]] +name = "wide" +version = "0.7.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce5da8ecb62bcd8ec8b7ea19f69a51275e91299be594ea5cc6ef7819e16cd03" +dependencies = [ + "bytemuck", + "safe_arch", +] diff --git a/Cargo.toml b/Cargo.toml index 80b6528..88d9c4d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,6 +4,7 @@ version = "0.1.0" edition = "2024" [dependencies] +nalgebra = "0.34.1" [[bin]] name = "1-secret-entrance" @@ -31,4 +32,20 @@ path = "src/6-trash-compactor.rs" [[bin]] name = "7-laboratories" -path = "src/7-laboratories.rs" \ No newline at end of file +path = "src/7-laboratories.rs" + +[[bin]] +name = "8-playground" +path = "src/8-playground.rs" + +[[bin]] +name = "9-movie-theater" +path = "src/9-movie-theater.rs" + +[[bin]] +name = "10-factory" +path = "src/10-factory.rs" + +[[bin]] +name = "11-reactor" +path = "src/11-reactor.rs" \ No newline at end of file diff --git a/src/10-factory.rs b/src/10-factory.rs new file mode 100644 index 0000000..987d715 --- /dev/null +++ b/src/10-factory.rs @@ -0,0 +1,131 @@ +use std::cmp::min; +use std::fs::File; +use std::io::{self, BufRead, BufReader}; +use std::str::FromStr; +use std::u64; +use nalgebra::{DMatrix, DVector}; + +#[derive(Debug)] +struct Machine { + lights: Vec, + buttons: Vec>, + joltages: Vec +} + +impl FromStr for Machine { + type Err = io::Error; + fn from_str(s: &str) -> Result { + let groups: Vec<_> = s.split(' ').collect(); + let lights_part = groups[0]; + let lights = lights_part[1..lights_part.len()-1] + .chars() + .rev() + .map(|c| if c == '#' { 1 } else { 0 }) + .collect(); + + let buttons: Vec<_> = (1..groups.len()-1) + .map(|i| parse_button_group(groups[i])) + .collect(); + + let joltages_part = groups[groups.len()-1]; + let joltages: Vec<_> = joltages_part[1..joltages_part.len()-1] + .split(',') + .map(|j_s| j_s.parse::().unwrap()) + .collect(); + + Ok(Machine { lights: lights, buttons: buttons , joltages: joltages }) + } +} + +fn parse_button_group(s: &str) -> Vec { + s[1..s.len()-1].split(',') + .map(|x_s| x_s.parse::().unwrap()) + .collect() +} + +fn parity_solve(machine: &Machine, target: &Vec) -> Vec { + let mut solutions: Vec = Vec::new(); + for selection in 0..(1 << machine.buttons.len()) { + let mut parity = target.iter().rev() + .fold(0, |state, x| (state << 1) + (x & 1)); + for (i, button) in machine.buttons.iter().enumerate() { + if selection & (1 << i) != 0 { + for j in button { + parity ^= 1 << j; + } + } + } + if parity == 0 { + solutions.push(selection); + } + } + solutions +} + +fn minimum_solve(machine: &Machine) -> u64 { + fn apply_button(machine: &Machine, button_idx: usize, mut current: Vec) -> Option> { + for i in &machine.buttons[button_idx] { + if current[*i as usize] == 0 { + return None; + } + current[*i as usize] -= 1; + } + Some(current) + } + + fn recurse(machine: &Machine, target: &Vec, max_cnt: i64) -> Option { + if target.iter().sum::() == 0 { return Some(0) }; + if max_cnt <= 0 { return None }; + + let parity_solutions = parity_solve(machine, target); + let mut min_solution = None; + for parity_sln in parity_solutions { + let current = (0..machine.buttons.len()) + .fold(Some(target.clone()), |state, i| { + if parity_sln & (1 << i) != 0 { + apply_button(machine, i, state?) + } else { + state + } + }); + let Some(current) = current else { continue }; + let parity_ones = parity_sln.count_ones() as i64; + + let new_max_cnt = + (match min_solution { + None => max_cnt, + Some(ms) => min(ms as i64, max_cnt) + } - parity_ones) / 2; + let new_target = current.iter().map(|&x| x / 2).collect(); + let sln = recurse(machine, &new_target, new_max_cnt); + let Some(sln) = sln else { continue }; + min_solution = + match min_solution { + None => Some(parity_ones as u64 + 2u64 * sln), + Some(ms) => Some(min(ms, parity_ones as u64 + 2u64 * sln)) + }; + } + min_solution + } + + let result = recurse(machine, &machine.joltages, i64::MAX).unwrap_or(0); + println!("Result: {}", result); + result +} + +fn main() -> Result<(), io::Error> { + let f = File::open("10-input.txt")?; + let reader = BufReader::new(f); + + let machines: Vec<_> = reader.lines() + .map(|l| l?.parse::()) + .collect::>()?; + println!("Parsed {} machines: \n {:?}", machines.len(), machines); + + let presses: u64 = machines.iter() + .map(|m| minimum_solve(&m)) + .sum(); + + println!("Result: {}", presses); + Ok(()) +} diff --git a/src/11-reactor.rs b/src/11-reactor.rs new file mode 100644 index 0000000..2c596a1 --- /dev/null +++ b/src/11-reactor.rs @@ -0,0 +1,70 @@ +use std::{collections::HashMap, fs::File, io::{self, BufRead, BufReader}}; + +#[derive(Clone)] +enum GraphNode { + Output, + Branch(Vec) +} + +fn count_paths( + node: &str, + nodes: &HashMap, + memo: &mut HashMap +) -> usize { + if let Some(&count) = memo.get(node) { + return count; + } + + let count = + match nodes.get(node) { + None => 0, + Some(GraphNode::Output) => 1, + Some(GraphNode::Branch(children)) => { + children.iter() + .map(|c| count_paths(c, nodes, memo)) + .sum() + } + }; + memo.insert(node.to_string(), count); + count +} + +fn main() -> Result<(), io::Error> { + let f = File::open("11-input.txt")?; + let reader = BufReader::new(f); + + let nodes: HashMap = reader.lines() + .map(|line| { + let line = line?; + let parts: Vec<_> = line.split(' ').collect(); + let name = parts[0][..3].to_string(); + if parts[1] == "out" { + Ok((name, GraphNode::Output)) + } else { + let branches: Vec = parts[1..].iter().map(|s| s.to_string()).collect(); + Ok((name, GraphNode::Branch(branches))) + } + }) + .collect::>()?; + + let svr_paths = count_paths("svr", &nodes, &mut HashMap::new()); + let missing_fft_paths = count_paths("svr", + &(nodes.clone() + .into_iter() + .filter(|(k, _)| k != "fft") + .collect()), &mut HashMap::new()); + let missing_dac_paths = count_paths("svr", + &(nodes.clone() + .into_iter() + .filter(|(k, _)| k != "dac") + .collect()), &mut HashMap::new()); + let missing_both_paths = count_paths("svr", + &(nodes.clone() + .into_iter() + .filter(|(k, _)| k != "fft" && k != "dac") + .collect()), &mut HashMap::new()); + + println!("Result {}", svr_paths + missing_both_paths - missing_fft_paths - missing_dac_paths); + + Ok(()) +} \ No newline at end of file diff --git a/src/8-playground.rs b/src/8-playground.rs new file mode 100644 index 0000000..dedbcb3 --- /dev/null +++ b/src/8-playground.rs @@ -0,0 +1,103 @@ +use std::{collections::HashMap, fs::File, hash::Hash,io::{self, BufRead, BufReader}}; + +#[derive(PartialEq, Eq, Clone, Hash, Debug)] +struct Node { + x: u32, + y: u32, + z: u32, +} + +impl Node { + fn square_dist(a: &Node, b: &Node) -> i64 { + let dx = i64::from(a.x) - i64::from(b.x); + let dy = i64::from(a.y) - i64::from(b.y); + let dz = i64::from(a.z) - i64::from(b.z); + dx*dx + dy*dy + dz*dz + } +} + +impl From<&str> for Node { + fn from(value: &str) -> Self { + let coords: Vec<_> = value.split(',').map(|s| s.parse::().unwrap()).collect(); + Node { + x: coords[0], + y: coords[1], + z: coords[2] + } + } +} + +#[derive(Debug, Clone)] +struct Edge { + a: Node, + b: Node +} + +#[derive(Debug)] +struct DisjointSet { + parents: HashMap> +} + +impl FromIterator for DisjointSet { + fn from_iter>(iter: I) -> Self { + DisjointSet { + parents: iter.into_iter().map(|x| (x, None)).collect() + } + } +} + +impl DisjointSet { + fn representative(&mut self, x: &T) -> Option { + match self.parents.get(x)?.clone() { + None => Some(x.clone()), + Some(p) => { + let rep = self.representative(&p)?; + self.parents.insert(x.clone(), Some(rep.clone())); + Some(rep) + } + } + } + + fn union(&mut self, a: &T, b: &T) -> Option { + let rep_a = self.representative(a).unwrap(); + let rep_b = self.representative(b).unwrap(); + if rep_a != rep_b { + self.parents.insert(rep_a, Some(rep_b.clone())); + Some(rep_b) + } else { + None + } + } +} + +fn main() -> Result<(), io::Error> { + let f = File::open("8-input.txt")?; + let reader = BufReader::new(f); + + let nodes: Vec = reader.lines() + .map(|lr| lr.map(|l| l.as_str().into())) + .collect::>()?; + let node_cnt = nodes.len(); + + let mut all_edges: Vec<_> = + (0..node_cnt).flat_map(|a| { + let na = &nodes[a]; + (a+1..node_cnt).map(|b| { + let nb = &nodes[b]; + let sqr_dist = Node::square_dist(na, nb); + (sqr_dist, Edge {a: na.clone(), b: nb.clone()}) + }) + }) + .filter(|(_, e)| e.a != e.b) + .collect(); + all_edges.sort_unstable_by_key(|(d, _)| *d); + + let mut ds: DisjointSet<_> = nodes.clone().into_iter().collect(); + let connections: Vec<_> = all_edges.iter() + .filter_map(|(_, e)| ds.union(&e.a, &e.b).map(|_|e.clone())) + .collect(); + + let last_connection = connections.last().unwrap(); + println!("Result {}", u64::from(last_connection.a.x) * u64::from(last_connection.b.x)); + Ok(()) +} \ No newline at end of file diff --git a/src/9-movie-theater.rs b/src/9-movie-theater.rs new file mode 100644 index 0000000..f59bb9e --- /dev/null +++ b/src/9-movie-theater.rs @@ -0,0 +1,170 @@ +use std::{cmp::{max, min, Ordering}, fs::File, i64, io::{self, BufRead, BufReader, ErrorKind}, fmt::Debug, str::FromStr}; + +#[derive(Clone, Copy, Debug)] +struct Vertex { + x: i64, + y: i64 +} + +impl FromStr for Vertex { + type Err = io::Error; + fn from_str(s: &str) -> Result { + let parts: Vec<_> = s.split(',') + .map(|s| s.parse::()) + .collect(); + + let err = io::Error::new(ErrorKind::Other, "Unable to parse vertex"); + let Some(&Ok(x)) = parts.get(0) else { return Err(err) }; + let Some(&Ok(y)) = parts.get(1) else { return Err(err) }; + Ok(Vertex { x: x, y: y}) + } +} + +#[derive(Debug)] +struct Edge { + a: Vertex, + b: Vertex +} + +#[derive(Clone, Copy, PartialEq, Eq)] +struct Segment { + lo: i64, + hi: i64, + truncate_lo: bool, + truncate_hi: bool, + dist: Option +} + +impl Segment { + fn new(e: Edge) -> Segment { + Segment { + lo: min(e.a.x, e.b.x), + hi: max(e.a.x, e.b.x), + truncate_lo: false, + truncate_hi: false, + dist: + if e.a.x < e.b.x { Some(e.a.y) } + else { None } + } + } +} + +impl PartialOrd for Segment { + fn partial_cmp(&self, other: &Self) -> Option { + if self.hi <= other.lo { + Some(Ordering::Less) + } else if other.hi <= self.lo { + Some(Ordering::Greater) + } else { + Some(Ordering::Equal) + } + } +} + +impl Ord for Segment { + fn cmp(&self, other: &Self) -> Ordering { + self.partial_cmp(other).unwrap() + } +} + +impl Debug for Segment { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.write_str(format!("({}, {})", self.lo, self.hi).as_str()) + } +} + +fn rect_area(x1: i64, x2: i64, y1: i64, y2: i64) -> i64 { + (1 + i64::abs(x1 - x2)) * (1 + i64::abs(y1 - y2)) +} + +fn rect_from_point(state: &Vec, v: &Vertex) -> i64 { + let mut max_area = i64::MIN; + + let mut max_y = i64::MIN; + for segment in state { + if segment.hi <= v.x { continue } + + let Some(seg_y) = segment.dist else { break }; + if seg_y >= max_y { + max_y = seg_y; + if !segment.truncate_hi { + max_area = max(max_area, rect_area(v.x, segment.hi, v.y, seg_y)); + } + if !segment.truncate_lo { + max_area = max(max_area, rect_area(v.x, segment.lo, v.y, seg_y)); + } + } + } + + let mut max_y = i64::MIN; + for segment in state.iter().rev() { + if segment.lo >= v.x { continue } + + let Some(seg_y) = segment.dist else { break }; + if seg_y >= max_y { + max_y = seg_y; + if !segment.truncate_hi { + max_area = max(max_area, rect_area(v.x, segment.hi, v.y, seg_y)); + } + if !segment.truncate_lo { + max_area = max(max_area, rect_area(v.x, segment.lo, v.y, seg_y)); + } + } + } + max_area +} + +fn update_state(state: &mut Vec, incoming: Segment) { + for i in (0..state.len()).rev() { + let current = state[i]; + if incoming.lo <= current.lo && current.hi <= incoming.hi { + state.remove(i); + } else if current.lo < incoming.lo && incoming.hi < current.hi { + state.push(Segment { hi: incoming.lo, truncate_hi: true, ..current }); + state.push(Segment { lo: incoming.hi, truncate_lo: true, ..current }); + state.remove(i); + } else if current.lo < incoming.lo && incoming.lo < current.hi { + state[i].hi = incoming.lo; + state[i].truncate_hi = true; + } else if current.lo < incoming.hi && incoming.hi < current.hi { + state[i].lo = incoming.hi; + state[i].truncate_lo = true; + } + } + state.push(incoming); + state.sort(); +} + +fn main() -> Result<(), io::Error> { + let f = File::open("9-input.txt")?; + let reader = BufReader::new(f); + let vertices: Vec<_> = reader.lines() + .map(|l| l?.parse::()) + .collect::>()?; + + let mut edges: Vec = Vec::new(); + for i in 0..vertices.len() { + let j = (i + 1) % vertices.len(); + edges.push(Edge { + a: vertices[i], + b: vertices[j] + }); + } + edges.sort_unstable_by_key(|e| e.a.y + e.b.y); + + let horizontal_edges: Vec<_> = edges.into_iter() + .filter(|e| e.a.y == e.b.y) + .collect(); + + let mut max_area: i64 = 0; + let mut state: Vec = Vec::new(); + state.push(Segment { lo: i64::MIN, hi: i64::MAX, truncate_lo: false, truncate_hi: false, dist: None }); + for e in horizontal_edges { + max_area = max(max_area, rect_from_point(&state, &e.a)); + max_area = max(max_area, rect_from_point(&state, &e.b)); + update_state(&mut state, Segment::new(e)); + } + + println!("Result {}", max_area); + Ok(()) +} \ No newline at end of file