diff --git a/src/main/resources/eu/sim642/adventofcode2024/day25.txt b/src/main/resources/eu/sim642/adventofcode2024/day25.txt new file mode 100644 index 00000000..d813e77d --- /dev/null +++ b/src/main/resources/eu/sim642/adventofcode2024/day25.txt @@ -0,0 +1,3999 @@ +##### +##### +#.### +#.### +#.#.# +....# +..... + +##### +.##.# +.##.# +.##.. +.##.. +.#... +..... + +##### +.#### +..#.# +..#.# +....# +..... +..... + +..... +..#.. +.##.. +.###. +.###. +.###. +##### + +..... +..... +..... +...#. +#..#. +#.### +##### + +##### +##### +#.#.# +..#.. +..#.. +..#.. +..... + +##### +##### +##### +##.#. +.#.#. +..... +..... + +##### +##.#. +##.#. +.#.#. +.#... +..... +..... + +##### +#.### +#.#.# +..#.# +..#.. +..#.. +..... + +##### +##.## +##.## +##..# +##..# +.#... +..... + +..... +..#.. +#.#.. +#.#.. +#.##. +####. +##### + +##### +###.# +##... +#.... +#.... +..... +..... + +##### +.#### +.#### +.#.## +.#..# +....# +..... + +..... +#.... +##... +###.. +###.. +####. +##### + +..... +.#... +.#... +.##.. +####. +####. +##### + +##### +.#### +..### +...#. +..... +..... +..... + +##### +.#### +..### +...#. +...#. +...#. +..... + +..... +#...# +##..# +###.# +##### +##### +##### + +##### +####. +##.#. +##.#. +#..#. +#.... +..... + +..... +..#.. +..#.. +..#.. +#.##. +#.##. +##### + +..... +.#... +.#... +##..# +###.# +###.# +##### + +##### +##### +.##.# +.#..# +.#..# +.#... +..... + +..... +#.... +#.... +#..#. +#.##. +####. +##### + +##### +####. +.##.. +..#.. +..... +..... +..... + +..... +..... +..... +.#... +.#.#. +##.#. +##### + +##### +##.## +#..#. +#..#. +#..#. +#.... +..... + +##### +##### +.#### +.##.# +.#..# +....# +..... + +..... +..#.. +.###. +.###. +.###. +####. +##### + +..... +..#.. +..#.. +#.#.# +#.#.# +#.#.# +##### + +##### +##.## +##.## +##.#. +##.#. +.#... +..... + +##### +##### +.###. +.###. +.###. +.#.#. +..... + +##### +###.# +#.#.# +#.#.# +#.#.# +#.... +..... + +##### +.#### +.#### +..##. +..##. +...#. +..... + +##### +##### +###.# +.##.# +..#.. +..... +..... + +##### +####. +#.##. +#.#.. +#.#.. +..... +..... + +##### +####. +####. +####. +.###. +.#.#. +..... + +##### +####. +##.#. +#..#. +#..#. +#.... +..... + +##### +##### +##### +.#.#. +.#.#. +.#.#. +..... + +##### +##.#. +.#.#. +.#.#. +.#... +..... +..... + +..... +#.... +#..#. +#..## +#.### +##### +##### + +..... +..#.. +..#.. +..#.# +#.#.# +###.# +##### + +##### +##### +##### +#.### +#.#.# +..#.. +..... + +##### +##.## +#..#. +#..#. +#.... +..... +..... + +..... +..... +..... +...#. +.#.## +##### +##### + +..... +#.... +#.#.. +#.#.. +#.##. +#.##. +##### + +..... +..#.. +..##. +..##. +#.##. +#.##. +##### + +..... +.#... +.##.. +.##.. +.##.. +###.# +##### + +##### +##### +###.# +.##.# +.#..# +....# +..... + +##### +##### +####. +.##.. +.#... +..... +..... + +##### +##.## +##..# +##..# +.#... +..... +..... + +##### +##### +#.##. +#..#. +#.... +..... +..... + +..... +..#.. +..#.. +#.##. +#.##. +##### +##### + +##### +##### +##### +.#.#. +...#. +...#. +..... + +##### +#.### +#..## +#..#. +...#. +...#. +..... + +..... +.#... +.#.#. +##.## +##.## +##### +##### + +##### +.#.## +.#.## +.#.## +...#. +..... +..... + +..... +..... +#..#. +#.##. +#.##. +#.### +##### + +##### +####. +####. +.###. +..##. +...#. +..... + +..... +..... +#.... +#.#.# +#.#.# +#.#.# +##### + +##### +##### +##### +###.# +#.#.# +..#.. +..... + +##### +#.### +#..## +#..#. +...#. +..... +..... + +..... +#...# +#...# +##.## +##.## +##.## +##### + +..... +#.... +##.#. +##.#. +####. +####. +##### + +##### +##### +##### +#.### +#..#. +...#. +..... + +..... +..#.. +..#.. +..##. +#.##. +#.### +##### + +..... +..... +..... +....# +#.#.# +#.### +##### + +##### +#.### +#.#.# +#.#.# +....# +....# +..... + +..... +...#. +.#.#. +.#.#. +.###. +.#### +##### + +##### +##.#. +.#.#. +.#.#. +...#. +...#. +..... + +##### +##### +##### +###.# +#.#.# +..... +..... + +##### +#.#.# +#.#.. +#.#.. +#.#.. +..#.. +..... + +..... +..... +..... +#..#. +#.##. +####. +##### + +##### +#.### +#.##. +#..#. +#.... +..... +..... + +..... +..#.. +..#.# +..#.# +.#### +.#### +##### + +..... +.#..# +.#..# +##..# +###.# +###.# +##### + +..... +..#.# +..#.# +..#.# +#.#.# +#.#.# +##### + +##### +##### +#.### +#..## +#..#. +#..#. +..... + +##### +##### +##.## +.#.## +.#.## +.#.#. +..... + +##### +##### +##.#. +##.#. +#.... +#.... +..... + +..... +....# +.#..# +.#..# +.#.## +.#### +##### + +##### +.#### +.#.## +.#.## +.#..# +.#... +..... + +..... +.#... +.#.#. +.###. +.###. +##### +##### + +##### +###.# +#.#.# +#.#.# +....# +..... +..... + +##### +##### +###.# +##... +.#... +.#... +..... + +..... +..... +..... +...#. +#.##. +#.##. +##### + +##### +##### +##### +##### +#.### +#..#. +..... + +##### +##.## +##.## +#..## +#...# +#.... +..... + +##### +##.## +##.## +.#.#. +.#.#. +...#. +..... + +##### +###.# +.##.. +.##.. +.#... +.#... +..... + +..... +..#.. +#.#.# +#.#.# +##### +##### +##### + +..... +#.... +#...# +#..## +#.### +#.### +##### + +##### +##### +##### +###.# +##... +#.... +..... + +##### +####. +####. +####. +.#.#. +...#. +..... + +..... +..... +..... +#...# +#.#.# +#.#.# +##### + +##### +##.## +#...# +#...# +#...# +..... +..... + +##### +##.#. +#..#. +...#. +...#. +...#. +..... + +..... +..... +...#. +...## +.#.## +##.## +##### + +##### +##### +#.##. +..#.. +..#.. +..... +..... + +..... +#.#.. +#.#.. +#.#.. +#.#.# +##### +##### + +##### +##### +#.##. +#.##. +#.#.. +#.... +..... + +##### +##### +##.## +##.## +#..#. +#..#. +..... + +##### +.#### +.##.# +.##.# +.#... +..... +..... + +##### +##### +###.# +###.# +.##.# +.#..# +..... + +##### +.#### +.##.# +.##.# +.#..# +....# +..... + +..... +.#... +.#... +.#.#. +.#### +.#### +##### + +..... +....# +#...# +#...# +##..# +###.# +##### + +##### +##.#. +.#.#. +...#. +..... +..... +..... + +..... +..... +..#.. +.###. +.#### +.#### +##### + +..... +#...# +#.#.# +###.# +##### +##### +##### + +..... +..... +....# +.#..# +###.# +###.# +##### + +..... +#.... +##... +###.. +###.# +###.# +##### + +##### +##### +##.## +.#.#. +...#. +...#. +..... + +##### +##.## +##..# +##..# +.#..# +.#..# +..... + +..... +#...# +#...# +#.#.# +##### +##### +##### + +..... +#.... +##..# +###.# +##### +##### +##### + +..... +..#.. +..#.. +.##.# +###.# +###.# +##### + +##### +##### +#.### +...## +...## +....# +..... + +..... +....# +..#.# +..#.# +#.#.# +###.# +##### + +##### +##### +##.## +#...# +#.... +..... +..... + +##### +##.## +##.## +##.#. +.#.#. +.#.#. +..... + +##### +##### +.#.## +.#.#. +.#.#. +.#.#. +..... + +..... +...#. +..### +..### +#.### +##### +##### + +..... +...#. +..##. +..##. +..##. +#.### +##### + +##### +.###. +.##.. +.#... +.#... +..... +..... + +##### +#.### +#.##. +#.##. +#.##. +#..#. +..... + +..... +..... +.#... +.#... +##..# +##.## +##### + +##### +#.### +#..## +#..## +...## +...#. +..... + +##### +##### +##### +.#### +.#.#. +.#.#. +..... + +..... +..... +..... +.#.#. +##.#. +##.#. +##### + +##### +#.### +#..## +#..#. +#..#. +#..#. +..... + +..... +..#.. +#.#.. +####. +####. +####. +##### + +..... +...#. +...#. +#.##. +##### +##### +##### + +..... +..... +.#.#. +##.#. +####. +####. +##### + +..... +..#.. +..##. +..##. +..### +.#### +##### + +..... +..#.# +.##.# +###.# +###.# +##### +##### + +..... +....# +...## +#..## +##.## +##### +##### + +##### +##### +##### +.##.# +.#..# +.#..# +..... + +##### +####. +.###. +.##.. +.#... +.#... +..... + +##### +##.## +##.## +#...# +#...# +..... +..... + +##### +##.## +#..#. +...#. +...#. +..... +..... + +##### +##.## +##.## +##.## +.#..# +..... +..... + +..... +#...# +##..# +##..# +##.## +##.## +##### + +##### +##### +.##.# +..#.# +..#.# +..... +..... + +##### +##.## +#..## +#...# +#...# +#.... +..... + +##### +##### +#.#.# +#.#.. +..#.. +..#.. +..... + +..... +.#... +.#..# +.##.# +.#### +##### +##### + +..... +....# +...## +.#.## +.#.## +##### +##### + +..... +.#.#. +####. +####. +####. +####. +##### + +##### +##### +##.#. +##.#. +.#.#. +.#.#. +..... + +..... +#.... +#.#.# +#.#.# +#.#.# +###.# +##### + +..... +..... +#.#.. +#.#.# +###.# +##### +##### + +##### +##.## +.#..# +....# +....# +....# +..... + +..... +...#. +...#. +...## +..### +.#### +##### + +##### +#.### +#.### +#.##. +#.#.. +#.#.. +..... + +##### +##### +#.### +#..#. +#..#. +..... +..... + +##### +##### +##### +###.# +#.#.. +#.... +..... + +..... +..... +..#.# +#.#.# +#.#.# +#.#.# +##### + +##### +##### +#.#.# +..#.. +..#.. +..... +..... + +..... +..... +..... +..... +.#.#. +##.## +##### + +##### +####. +####. +#.#.. +#.#.. +..... +..... + +##### +#.### +..### +...## +...## +....# +..... + +..... +#.... +#.... +##... +##.#. +##### +##### + +..... +....# +#.#.# +#.#.# +###.# +##### +##### + +##### +.###. +.###. +..#.. +..... +..... +..... + +##### +##### +####. +####. +#.##. +#.#.. +..... + +##### +.#### +.#.#. +.#.#. +.#.#. +.#.#. +..... + +..... +....# +..#.# +..### +.#### +##### +##### + +##### +###.# +###.. +##... +##... +.#... +..... + +..... +..... +...#. +...#. +#.##. +##### +##### + +..... +..... +#..#. +##.#. +####. +##### +##### + +..... +..... +..... +....# +#.#.# +##### +##### + +..... +..... +..... +...#. +#..#. +#.##. +##### + +##### +.#### +.###. +.##.. +..#.. +..... +..... + +##### +###.# +###.. +##... +.#... +..... +..... + +##### +##### +##.## +##.## +##.#. +.#... +..... + +..... +..... +...#. +...#. +..### +.#### +##### + +..... +...#. +..### +..### +..### +#.### +##### + +..... +#.#.. +###.# +###.# +###.# +###.# +##### + +##### +#.### +#.### +#.### +#.#.# +#.#.# +..... + +##### +.#.#. +...#. +..... +..... +..... +..... + +##### +##.## +.#.## +.#.## +....# +....# +..... + +##### +##### +####. +.##.. +.#... +.#... +..... + +##### +##### +##.#. +.#... +.#... +..... +..... + +##### +#.##. +#..#. +#..#. +#..#. +#.... +..... + +..... +.#..# +.#.## +.#.## +.#### +##### +##### + +..... +.#... +.#..# +.##.# +.##.# +##### +##### + +..... +.#..# +##.## +##.## +##.## +##.## +##### + +##### +.###. +..##. +..##. +..#.. +..... +..... + +##### +.#.## +.#.#. +.#.#. +.#.#. +..... +..... + +##### +##.## +#...# +..... +..... +..... +..... + +..... +#.#.. +#.#.. +###.. +####. +##### +##### + +..... +...#. +.#.## +.#.## +##.## +##.## +##### + +..... +..... +..#.# +.##.# +.##.# +.#### +##### + +..... +..#.# +..### +..### +.#### +##### +##### + +##### +.#.## +....# +....# +....# +..... +..... + +..... +..... +..#.. +..#.# +#.### +#.### +##### + +..... +....# +#..## +##.## +##### +##### +##### + +..... +...#. +...#. +...## +.#.## +##### +##### + +##### +###.# +###.# +###.# +###.# +#.#.. +..... + +..... +#.#.# +##### +##### +##### +##### +##### + +##### +##### +####. +#.##. +...#. +..... +..... + +..... +#.... +#...# +#...# +##..# +##.## +##### + +##### +.#### +.#### +.###. +.#.#. +.#... +..... + +##### +#.#.# +..#.# +..#.# +....# +....# +..... + +##### +###.# +###.. +###.. +##... +#.... +..... + +..... +.#... +.##.. +###.# +###.# +###.# +##### + +##### +##### +.#.#. +...#. +...#. +...#. +..... + +##### +####. +##.#. +##.#. +.#.#. +..... +..... + +##### +.#### +.###. +.##.. +..#.. +..#.. +..... + +##### +#.### +#.##. +#..#. +..... +..... +..... + +..... +..#.. +.##.. +.###. +.###. +##### +##### + +##### +##.## +#..## +#...# +#.... +..... +..... + +##### +##.## +##..# +#...# +..... +..... +..... + +..... +....# +....# +#..## +#.### +##### +##### + +##### +##### +####. +####. +.#.#. +.#... +..... + +..... +#.... +#...# +#...# +#.#.# +#.### +##### + +..... +..... +..... +.#... +##.#. +##### +##### + +..... +..... +#.... +#...# +#...# +#.#.# +##### + +##### +##### +.###. +.##.. +..#.. +..... +..... + +..... +....# +....# +..#.# +#.#.# +###.# +##### + +##### +#.#.# +#.#.# +#.#.# +#...# +....# +..... + +..... +..... +#.... +#..#. +##.#. +##.#. +##### + +..... +.#.#. +##.#. +##.#. +####. +##### +##### + +..... +..... +.#... +.#..# +.#.## +.#.## +##### + +..... +..... +.#... +.#.#. +.#.#. +####. +##### + +##### +.#### +.###. +.#.#. +..... +..... +..... + +##### +.#### +.###. +.#.#. +.#.#. +.#... +..... + +..... +..... +..... +#.#.. +#.##. +##### +##### + +##### +.##.# +.##.# +.#..# +....# +..... +..... + +..... +.#... +.#... +###.. +###.. +####. +##### + +..... +..#.. +..#.. +.##.. +.###. +##### +##### + +##### +.#### +.#### +.#### +..#.# +..... +..... + +..... +#.... +#.... +##..# +##.## +##.## +##### + +##### +#.#.# +#.#.. +#.#.. +..#.. +..#.. +..... + +##### +.#### +.#### +..### +..#.# +..#.. +..... + +..... +..... +#.#.# +##### +##### +##### +##### + +..... +..#.. +#.#.. +#.#.. +###.. +####. +##### + +##### +.#.## +.#.## +.#.## +...## +....# +..... + +##### +.#### +.###. +.##.. +.#... +..... +..... + +##### +##### +#.#.# +#...# +#...# +..... +..... + +##### +##.## +.#.#. +..... +..... +..... +..... + +##### +###.# +#.#.# +#.#.# +..#.# +..#.. +..... + +##### +###.# +##..# +##..# +.#..# +.#... +..... + +..... +#...# +##..# +##.## +##### +##### +##### + +..... +..... +..... +.#..# +.#.## +##### +##### + +##### +##### +.#### +.#.#. +.#.#. +.#.#. +..... + +..... +..... +..#.# +.##.# +.##.# +.##.# +##### + +##### +##.## +##..# +.#..# +.#..# +.#..# +..... + +##### +###.# +#.#.# +#.#.. +#.#.. +#.... +..... + +..... +..... +#.... +#..#. +#.##. +####. +##### + +..... +..... +...#. +..##. +#.### +#.### +##### + +##### +##.## +##.## +##.#. +#.... +#.... +..... + +..... +....# +#.#.# +###.# +##### +##### +##### + +..... +..... +..... +..#.. +.##.# +.##.# +##### + +..... +..... +....# +#.#.# +#.#.# +#.#.# +##### + +##### +##### +####. +####. +#.#.. +..... +..... + +##### +##.## +.#.## +.#.## +.#.#. +.#... +..... + +..... +....# +....# +.#.## +.#.## +.#### +##### + +..... +...#. +#..## +#..## +#.### +##### +##### + +##### +##### +####. +#.##. +#.#.. +..... +..... + +##### +####. +.#.#. +.#.#. +.#... +..... +..... + +..... +...#. +...#. +#..#. +#.##. +####. +##### + +##### +##.## +#...# +#...# +#.... +#.... +..... + +..... +..#.. +.###. +.###. +.#### +##### +##### + +..... +#..#. +#..## +##.## +##.## +##.## +##### + +..... +..... +#...# +#...# +#.#.# +#.### +##### + +..... +.#... +.#.#. +.#.#. +##.## +##.## +##### + +..... +.#..# +.#..# +.#.## +.#.## +##### +##### + +##### +.#### +.##.# +.##.# +.#..# +.#... +..... + +##### +###.# +.#..# +.#..# +.#..# +.#..# +..... + +##### +##.## +##..# +##... +##... +#.... +..... + +..... +..... +..... +..#.. +#.#.. +####. +##### + +##### +##.## +##.## +.#.#. +..... +..... +..... + +..... +#.... +#.... +#..#. +#.##. +##### +##### + +..... +..... +..... +.#... +.#..# +###.# +##### + +..... +...#. +#..## +#..## +#.### +#.### +##### + +##### +##.## +##.## +#...# +#...# +#.... +..... + +##### +#.### +#.### +#.### +#.### +#..#. +..... + +##### +#.#.# +#.#.# +..#.. +..... +..... +..... + +##### +##.#. +##.#. +##... +#.... +..... +..... + +##### +##### +##### +##### +.##.# +.#... +..... + +##### +.###. +.###. +.##.. +..#.. +..#.. +..... + +##### +##.#. +##... +#.... +#.... +..... +..... + +..... +..... +..... +...#. +.#.#. +##.## +##### + +..... +..... +..... +....# +.#..# +.#.## +##### + +..... +....# +#..## +#.### +#.### +##### +##### + +##### +#.### +..### +..##. +...#. +...#. +..... + +##### +#.### +#.### +#..## +#...# +....# +..... + +##### +##.## +#..## +#...# +..... +..... +..... + +..... +....# +#.#.# +#.#.# +###.# +###.# +##### + +..... +...#. +...## +#..## +#.### +##### +##### + +..... +....# +..#.# +#.#.# +#.### +##### +##### + +..... +..#.# +..#.# +.##.# +##### +##### +##### + +..... +..... +.#.#. +.#.#. +.###. +.###. +##### + +..... +..... +.#... +.##.. +.##.# +###.# +##### + +..... +..... +#.... +#.... +#..#. +##.#. +##### + +##### +##### +.#### +..### +..#.# +..#.# +..... + +..... +..#.. +..##. +.###. +.###. +.#### +##### + +..... +..... +..#.. +#.##. +#.##. +####. +##### + +##### +##.## +#..## +....# +..... +..... +..... + +..... +....# +....# +#.#.# +#.### +##### +##### + +..... +#.... +#.... +#.#.# +#.#.# +#.### +##### + +..... +....# +....# +....# +....# +#.#.# +##### + +##### +#.##. +#.##. +#.#.. +#.... +..... +..... + +##### +#.#.# +....# +....# +....# +..... +..... + +..... +..... +..... +.#... +.#.#. +.#### +##### + +..... +..... +....# +#..## +##.## +##### +##### + +..... +..#.. +..##. +..##. +..##. +#.##. +##### + +##### +##### +###.# +###.# +.#..# +.#... +..... + +..... +#.... +#.... +#..#. +##.#. +##### +##### + +##### +##### +##### +.##.# +..#.# +..#.. +..... + +..... +..#.# +..#.# +.#### +.#### +##### +##### + +##### +##### +##### +#.#.# +..#.# +..... +..... + +..... +.#... +.#... +.#... +##... +###.# +##### + +##### +###.# +.##.. +..#.. +..#.. +..#.. +..... + +..... +..... +.#... +.##.# +.#### +##### +##### + +..... +..... +.#... +##... +##... +###.# +##### + +..... +#.... +#.... +#.#.. +#.##. +#.##. +##### + +..... +..... +#..#. +#.##. +#.### +#.### +##### + +##### +####. +#.##. +..##. +...#. +...#. +..... + +##### +###.# +##... +##... +.#... +.#... +..... + +##### +.#.#. +.#.#. +.#... +.#... +.#... +..... + +..... +..#.. +.##.. +.###. +.#### +##### +##### + +##### +##### +##### +.#.## +...## +....# +..... + +##### +##### +##### +##.#. +.#... +.#... +..... + +##### +##.## +#..## +#..## +#...# +..... +..... + +..... +#..#. +#.##. +#.##. +####. +##### +##### + +..... +.#... +.#... +.#... +.#... +###.# +##### + +##### +.#.## +...## +...## +....# +..... +..... + +##### +.#### +..### +..### +...## +....# +..... + +##### +##.## +##.#. +#..#. +..... +..... +..... + +..... +..#.. +.###. +####. +##### +##### +##### + +..... +..#.# +..#.# +..#.# +..### +#.### +##### + +##### +##.#. +##.#. +##.#. +.#... +.#... +..... + +..... +#.... +#.#.# +#.#.# +#.#.# +#.### +##### + +##### +.###. +.###. +.###. +..##. +..#.. +..... + +##### +.#.#. +.#.#. +...#. +..... +..... +..... + +..... +..... +..#.. +..#.. +..#.# +#.#.# +##### + +##### +.#.#. +...#. +...#. +...#. +...#. +..... + +..... +.#... +##... +###.. +####. +####. +##### + +..... +.#... +.#... +.##.# +##### +##### +##### + +..... +#...# +#...# +#..## +#.### +#.### +##### + +##### +####. +.###. +..#.. +..... +..... +..... + +##### +####. +##.#. +#.... +#.... +..... +..... + +..... +..... +...#. +.#.## +.#### +.#### +##### + +..... +#...# +#..## +##.## +##### +##### +##### + +##### +###.# +.##.. +.#... +.#... +.#... +..... + +##### +###.# +###.. +###.. +#.#.. +..... +..... + +##### +##.## +##.#. +.#.#. +...#. +..... +..... + +..... +..... +...#. +.#.#. +.#.#. +.#.## +##### + +..... +#.#.. +#.#.# +###.# +###.# +###.# +##### + +..... +..... +..... +#.#.# +#.#.# +#.#.# +##### + +##### +##.## +.#.#. +.#.#. +...#. +..... +..... + +..... +...#. +..### +.#### +.#### +.#### +##### + +##### +.#### +..##. +...#. +..... +..... +..... + +##### +#.### +#.### +#.#.# +#.#.. +#.... +..... + +##### +.#### +.###. +.###. +.#.#. +.#... +..... + +##### +####. +.#.#. +.#.#. +.#.#. +..... +..... + +..... +..... +#.... +#..#. +##.#. +##.## +##### + +##### +#.##. +..##. +..#.. +..#.. +..#.. +..... + +..... +#.... +#.... +##... +##.#. +##.## +##### + +..... +..... +....# +#..## +#.### +##### +##### + +..... +#.... +#..#. +#..#. +#..#. +#.### +##### + +..... +..#.. +..##. +..##. +#.### +#.### +##### + +..... +...#. +.#.#. +.#.#. +.###. +##### +##### + +..... +...#. +...#. +#..## +##.## +##### +##### + +##### +#.### +#.### +#.### +#.#.# +#...# +..... + +##### +.#### +.#.## +.#.#. +.#.#. +.#... +..... + +##### +##### +####. +.#.#. +.#.#. +.#... +..... + +##### +#.### +#.#.# +#.#.# +..#.# +..#.# +..... + +..... +#.#.# +#.#.# +#.### +#.### +##### +##### + +..... +#.... +#.... +##..# +###.# +###.# +##### + +##### +####. +####. +.##.. +..#.. +..... +..... + +##### +#.### +..### +..### +..##. +...#. +..... + +##### +###.# +###.# +###.. +#.#.. +..#.. +..... + +..... +..#.. +.##.. +.###. +##### +##### +##### + +##### +##### +.#.## +.#.#. +.#.#. +..... +..... + +##### +##### +##### +###.# +.#..# +....# +..... + +##### +##### +###.# +#.#.# +#.#.. +#.#.. +..... + +..... +...#. +...#. +...#. +.#.#. +.#.## +##### + +##### +##### +#.### +..### +..##. +..#.. +..... + +##### +##### +##.## +#..#. +#..#. +#..#. +..... + +##### +.#### +..### +..### +..##. +...#. +..... + +..... +..... +#.#.# +#.### +#.### +##### +##### + +..... +..... +..... +#.#.. +###.# +###.# +##### + +..... +..#.# +.##.# +.##.# +.##.# +.#### +##### + +##### +##### +#.#.# +#.#.# +....# +....# +..... + +##### +.##.# +.##.# +.##.# +..#.# +....# +..... + +..... +..... +...#. +#..#. +##.## +##.## +##### + +##### +.#### +.#### +.##.# +.#..# +....# +..... + +..... +.#... +##... +##... +##... +###.# +##### + +##### +##### +.#### +.##.# +..#.# +....# +..... + +##### +##### +####. +#.##. +#.##. +...#. +..... + +..... +#..#. +#..#. +##.## +##### +##### +##### + +..... +..... +#.... +##... +##... +##.#. +##### + +..... +..#.. +#.#.. +#.#.. +#.#.# +#.#.# +##### + +##### +###.# +###.. +###.. +.#... +..... +..... + +..... +...#. +.#.## +##.## +##.## +##.## +##### + +##### +####. +###.. +###.. +#.#.. +..... +..... + +..... +.#... +.#.#. +.#.#. +##.#. +####. +##### + +##### +###.# +#.#.# +..#.. +..#.. +..#.. +..... + +##### +##.## +##.## +##..# +#.... +..... +..... + +..... +..#.# +#.#.# +#.#.# +#.### +#.### +##### + +..... +..... +..... +..... +.#... +###.# +##### + +##### +##### +.#.## +.#..# +.#..# +.#..# +..... + +##### +##### +.##.# +.#..# +.#..# +.#..# +..... + +##### +##### +##.## +.#.## +.#..# +....# +..... + +..... +#.... +##... +##... +###.# +###.# +##### + +##### +##### +##### +##.## +.#..# +..... +..... + +##### +###.# +.##.# +.##.. +..#.. +..... +..... + +..... +.#... +.#... +.#... +.#... +.#.#. +##### + +..... +#.... +#...# +#...# +##.## +##.## +##### + +##### +##.## +.#.#. +...#. +...#. +...#. +..... + +..... +..#.. +..##. +.###. +####. +##### +##### + +##### +##### +##.## +##.## +.#.## +....# +..... + +..... +.#... +.#... +.#..# +.#..# +.##.# +##### + +..... +#.... +#...# +#...# +##.## +##### +##### + +..... +..#.. +..#.. +.###. +.#### +##### +##### + +..... +..#.. +..#.. +..#.. +.###. +.#### +##### + +..... +#..#. +#..## +#..## +#..## +#.### +##### + +##### +##### +##### +.##.# +.#..# +....# +..... + +..... +..... +..... +....# +.#.## +##### +##### + +..... +..... +..... +...#. +..### +.#### +##### + +##### +###.# +.#..# +.#..# +.#... +.#... +..... + +##### +.##.# +.##.. +..#.. +..... +..... +..... + +..... +..... +#.... +#.... +#.#.# +#.#.# +##### + +##### +##### +##### +#.### +#.#.# +#...# +..... + +..... +#..#. +#.##. +#.##. +#.### +#.### +##### + +..... +....# +#.#.# +#.### +#.### +#.### +##### + +..... +..#.. +..#.. +..#.. +#.##. +####. +##### + +..... +..... +..#.# +..#.# +.#### +##### +##### + +..... +..#.. +..#.# +..### +.#### +.#### +##### + +##### +##### +##### +####. +.###. +..#.. +..... + +##### +##### +#.### +..### +..##. +...#. +..... + +##### +.#### +..### +..##. +..#.. +..#.. +..... + +##### +#.### +#.### +#.### +...## +...#. +..... + +..... +..#.. +..#.. +..#.# +..#.# +.#### +##### + +##### +##### +.#### +.#### +..#.# +..#.# +..... + +##### +##.## +##.## +.#.## +.#..# +.#..# +..... + +..... +..... +....# +..#.# +..### +.#### +##### + +..... +...#. +.#.#. +.#.## +.#.## +.#.## +##### + +..... +.#... +.#... +.#... +.#.#. +.#.#. +##### + +..... +..... +..#.. +#.#.# +##### +##### +##### + +..... +.#.#. +.#.#. +##### +##### +##### +##### + +##### +##### +.#### +..### +..#.# +..#.. +..... + +##### +####. +.#.#. +.#.#. +.#... +.#... +..... + +..... +#.#.. +####. +####. +####. +####. +##### + +##### +##### +####. +####. +###.. +.#... +..... + +##### +##.## +##.#. +#..#. +...#. +...#. +..... + +..... +..#.. +..#.. +..##. +.#### +.#### +##### + +##### +##### +##.## +#..## +#...# +#...# +..... + +..... +..... +....# +.#..# +.#..# +.##.# +##### + +..... +.#.#. +.#.#. +.#.#. +##.#. +##.#. +##### + +..... +..... +..#.. +.##.. +.##.. +.###. +##### + +..... +....# +#...# +#...# +##..# +##.## +##### + +##### +##.## +##.## +.#..# +.#... +..... +..... + +..... +...#. +...## +..### +#.### +#.### +##### + +##### +##### +##### +#.#.# +..#.# +....# +..... + +..... +..... +...#. +.#.## +##.## +##.## +##### + +##### +####. +####. +.#.#. +.#.#. +..... +..... + +##### +##### +##.#. +##.#. +##... +#.... +..... + +..... +....# +#.#.# +#.#.# +#.### +#.### +##### + +..... +.#... +.##.. +.##.# +.##.# +###.# +##### + +..... +.#.#. +.#.#. +.#.#. +.###. +##### +##### + +##### +##### +.###. +..##. +..##. +..#.. +..... + +##### +####. +####. +.###. +..##. +..#.. +..... + +..... +...#. +#.##. +#.##. +#.##. +#.### +##### + +..... +..... +..#.# +#.#.# +###.# +##### +##### + +..... +..... +..#.. +..#.. +#.#.. +#.#.# +##### + +..... +..... +..#.. +#.#.# +#.#.# +###.# +##### + +..... +#..#. +#..#. +##.#. +##.#. +####. +##### + +..... +....# +....# +....# +...## +#.### +##### + +..... +....# +#.#.# +###.# +###.# +###.# +##### + +..... +..... +..... +#..#. +#..#. +#.##. +##### + +..... +..... +.#..# +##.## +##### +##### +##### + +##### +##### +#.### +#.#.# +#...# +#...# +..... + +##### +##### +##.#. +##... +#.... +#.... +..... + +..... +..... +#.#.. +#.##. +#.##. +#.### +##### + +##### +##.## +##.#. +##.#. +.#.#. +.#.#. +..... + +..... +.#.#. +.#.#. +.#.#. +##.#. +##.## +##### + +..... +..#.. +..#.. +.###. +####. +##### +##### + +..... +....# +..#.# +..#.# +.##.# +.##.# +##### + +..... +.#... +.#.#. +##.## +##.## +##.## +##### + +..... +..#.. +..#.. +..#.. +..#.# +#.### +##### + +..... +.#.#. +.#.## +.#.## +##.## +##.## +##### + +..... +..... +#...# +#...# +##..# +##.## +##### + +..... +.#... +.#... +.##.# +###.# +##### +##### + +..... +..#.. +.##.. +###.# +###.# +##### +##### + +##### +.###. +.#.#. +.#.#. +.#.#. +...#. +..... + +##### +###.# +###.# +.#..# +....# +..... +..... + +..... +.#..# +.##.# +.##.# +.##.# +##### +##### + +##### +##### +##### +###.# +##..# +#.... +..... + +##### +##### +###.# +#.#.. +#.#.. +#.... +..... + +..... +#.#.. +#.#.# +#.#.# +#.#.# +###.# +##### + +..... +..#.. +.##.# +.##.# +##### +##### +##### + +##### +##.## +##.## +#...# +..... +..... +..... + +##### +##.## +##.## +##.## +##.#. +#.... +..... + +..... +..... +..... +#...# +#...# +##.## +##### + +..... +..... +..... +#.#.. +#.#.. +####. +##### + +..... +#.... +#.#.. +#.#.# +#.#.# +#.#.# +##### diff --git a/src/main/scala/eu/sim642/adventofcode2024/Day25.scala b/src/main/scala/eu/sim642/adventofcode2024/Day25.scala new file mode 100644 index 00000000..b083668a --- /dev/null +++ b/src/main/scala/eu/sim642/adventofcode2024/Day25.scala @@ -0,0 +1,27 @@ +package eu.sim642.adventofcode2024 + +import eu.sim642.adventofcodelib.Grid +import eu.sim642.adventofcodelib.GridImplicits._ + +object Day25 { + + def isKey(grid: Grid[Boolean]): Boolean = + grid.head.forall(identity) + + def countLockKeyFits(lockKeys: Seq[Grid[Boolean]]): Int = { + val (keys, locks) = lockKeys.partition(isKey) + (for { + key <- keys + lock <- locks + if key.correspondsGrid(lock)((k, l) => !(k && l)) + } yield ()).size + } + + def parseLockKeys(input: String): Seq[Grid[Boolean]] = input.split("\n\n").map(_.linesIterator.map(_.map(_ == '#').toVector).toVector).toSeq + + lazy val input: String = scala.io.Source.fromInputStream(getClass.getResourceAsStream("day25.txt")).mkString.trim + + def main(args: Array[String]): Unit = { + println(countLockKeyFits(parseLockKeys(input))) + } +} diff --git a/src/test/scala/eu/sim642/adventofcode2024/Day25Test.scala b/src/test/scala/eu/sim642/adventofcode2024/Day25Test.scala new file mode 100644 index 00000000..081714fa --- /dev/null +++ b/src/test/scala/eu/sim642/adventofcode2024/Day25Test.scala @@ -0,0 +1,56 @@ +package eu.sim642.adventofcode2024 + +import Day25._ +import org.scalatest.funsuite.AnyFunSuite + +class Day25Test extends AnyFunSuite { + + val exampleInput = + """##### + |.#### + |.#### + |.#### + |.#.#. + |.#... + |..... + | + |##### + |##.## + |.#.## + |...## + |...#. + |...#. + |..... + | + |..... + |#.... + |#.... + |#...# + |#.#.# + |#.### + |##### + | + |..... + |..... + |#.#.. + |###.. + |###.# + |###.# + |##### + | + |..... + |..... + |..... + |#.... + |#.#.. + |#.#.# + |#####""".stripMargin + + test("Part 1 examples") { + assert(countLockKeyFits(parseLockKeys(exampleInput)) == 3) + } + + test("Part 1 input answer") { + assert(countLockKeyFits(parseLockKeys(input)) == 3264) + } +}