diff --git a/day_25/example.txt b/day_25/example.txt new file mode 100644 index 0000000..a53fe9b --- /dev/null +++ b/day_25/example.txt @@ -0,0 +1,39 @@ +##### +.#### +.#### +.#### +.#.#. +.#... +..... + +##### +##.## +.#.## +...## +...#. +...#. +..... + +..... +#.... +#.... +#...# +#.#.# +#.### +##### + +..... +..... +#.#.. +###.. +###.# +###.# +##### + +..... +..... +..... +#.... +#.#.. +#.#.# +##### \ No newline at end of file diff --git a/day_25/input.txt b/day_25/input.txt new file mode 100644 index 0000000..aa00a4b --- /dev/null +++ b/day_25/input.txt @@ -0,0 +1,3999 @@ +##### +###.# +###.# +.##.# +.#..# +....# +..... + +..... +..... +...#. +.#.#. +####. +##### +##### + +##### +#.### +#.### +#..## +...#. +...#. +..... + +##### +##.## +#...# +....# +..... +..... +..... + +##### +##### +###.# +#.#.# +#.#.. +#.#.. +..... + +..... +..... +#.... +#.... +#.#.. +#.##. +##### + +##### +##### +.#### +.##.# +..#.. +..#.. +..... + +##### +##### +##### +###.# +#.#.. +#.#.. +..... + +..... +..... +#...# +#.#.# +#.### +##### +##### + +..... +..#.# +..### +.#### +.#### +##### +##### + +##### +##.## +##.## +##.## +#..## +#..#. +..... + +..... +..... +#.... +#..#. +#..#. +#.### +##### + +..... +#.... +##.#. +##.#. +##.#. +####. +##### + +##### +##### +##### +#.### +...## +...#. +..... + +##### +.#.## +...## +....# +....# +..... +..... + +##### +#.### +#.### +#.#.# +..#.# +..#.. +..... + +##### +.##.# +..#.# +..#.# +..#.. +..#.. +..... + +..... +..#.. +..##. +#.##. +#.### +##### +##### + +..... +..... +#...# +#...# +#.#.# +##### +##### + +..... +..... +....# +..#.# +#.#.# +##### +##### + +##### +##.## +.#.## +.#..# +.#... +.#... +..... + +..... +#.... +#..#. +#..#. +#..#. +#.##. +##### + +##### +##### +##.#. +.#.#. +.#... +.#... +..... + +..... +...#. +..##. +#.##. +#.##. +####. +##### + +##### +#.### +#.##. +#.#.. +#.#.. +#.#.. +..... + +..... +..... +...#. +..##. +#.### +#.### +##### + +##### +#.### +#.### +..#.# +..#.. +..#.. +..... + +##### +##.## +##.## +#..#. +..... +..... +..... + +##### +##### +##.## +##..# +.#..# +....# +..... + +..... +..... +..... +..... +....# +#.#.# +##### + +##### +##### +##### +###.# +###.# +#.#.# +..... + +##### +.#### +.###. +.##.. +.##.. +.#... +..... + +..... +.#... +.##.. +####. +##### +##### +##### + +##### +###.# +###.# +###.# +.#..# +.#... +..... + +..... +..#.. +.##.. +.##.# +.##.# +.##.# +##### + +##### +.##.# +.##.# +.##.# +..#.. +..... +..... + +..... +..... +.#..# +###.# +###.# +##### +##### + +..... +.#... +.#... +.#... +.#..# +.##.# +##### + +..... +..... +..#.. +.###. +####. +####. +##### + +..... +..... +#.#.. +#.##. +#.### +#.### +##### + +..... +.#... +.#... +.##.. +.##.# +###.# +##### + +..... +....# +#.#.# +#.#.# +###.# +###.# +##### + +..... +....# +....# +...## +...## +#.### +##### + +..... +..#.. +..#.# +.#### +##### +##### +##### + +##### +##### +###.# +##..# +#...# +#.... +..... + +##### +##### +##### +##.#. +##.#. +#..#. +..... + +##### +##.## +.#.## +.#..# +.#... +..... +..... + +##### +##### +####. +###.. +#.#.. +..... +..... + +##### +##### +###.# +##... +.#... +.#... +..... + +..... +...#. +...#. +.#.#. +.#.## +.#### +##### + +##### +##.## +#..#. +#.... +..... +..... +..... + +##### +###.# +##..# +##..# +##..# +.#... +..... + +##### +#.### +#.#.# +#.#.# +#.#.# +..... +..... + +##### +##### +.#### +..#.# +..... +..... +..... + +##### +##.#. +##.#. +##.#. +#.... +#.... +..... + +..... +.#.#. +.#.#. +.#.## +.#.## +.#.## +##### + +##### +##.## +#..## +...## +...## +...#. +..... + +..... +..#.. +..##. +..##. +.#### +##### +##### + +..... +..... +..#.# +..#.# +#.#.# +###.# +##### + +##### +###.# +###.# +#.#.# +#...# +....# +..... + +##### +##.## +##.#. +.#.#. +...#. +...#. +..... + +##### +##### +##### +.#### +.##.# +.#... +..... + +##### +###.# +#.#.# +#.#.# +#.#.# +..#.# +..... + +..... +..... +..... +..#.# +.##.# +###.# +##### + +..... +..... +#.... +##.#. +##.## +##.## +##### + +##### +.#### +.#### +.#### +.#.#. +.#.#. +..... + +..... +..... +#..#. +##.## +##### +##### +##### + +..... +..... +..... +.#.#. +####. +##### +##### + +..... +.#... +.#... +.#... +.#... +.##.# +##### + +##### +##### +####. +###.. +##... +.#... +..... + +..... +..... +#.... +#.#.. +#.#.. +####. +##### + +..... +..... +..... +.#.#. +.#.#. +####. +##### + +..... +#.#.# +#.### +#.### +#.### +#.### +##### + +..... +..#.. +..#.. +..#.. +.##.# +.##.# +##### + +##### +##### +####. +.#.#. +.#.#. +..... +..... + +..... +.#... +.#..# +##..# +##..# +##.## +##### + +##### +.#### +.###. +.##.. +.##.. +..#.. +..... + +..... +..... +..... +...#. +.#.#. +.#.## +##### + +##### +##.## +##..# +##..# +#...# +..... +..... + +##### +##### +##### +#.#.# +..#.# +....# +..... + +##### +##.## +.#.## +...## +....# +....# +..... + +##### +.#### +.#### +.###. +..#.. +..#.. +..... + +..... +..... +.#... +##..# +##.## +##.## +##### + +..... +...#. +#..#. +#.##. +#.##. +####. +##### + +##### +##### +##### +.#.#. +..... +..... +..... + +##### +#.### +#.#.# +..#.. +..#.. +..#.. +..... + +##### +##.## +#..## +#...# +#...# +#...# +..... + +..... +.#.#. +##.#. +##.#. +##.#. +##.## +##### + +##### +#.### +#.### +#.### +#.##. +#.#.. +..... + +..... +#.#.. +#.#.# +#.### +#.### +##### +##### + +##### +####. +.###. +.###. +..##. +...#. +..... + +##### +##.## +##.## +#..## +#..## +...#. +..... + +..... +..... +#.#.. +#.#.# +#.### +##### +##### + +##### +.#### +.##.# +.##.# +.##.. +.#... +..... + +##### +#.##. +#.##. +..##. +..##. +..#.. +..... + +##### +##### +####. +.#.#. +.#... +..... +..... + +##### +#.### +#..#. +...#. +...#. +..... +..... + +##### +##### +###.# +#.#.# +#...# +..... +..... + +##### +.###. +..##. +...#. +...#. +..... +..... + +##### +##.## +#..## +...## +....# +....# +..... + +##### +##.## +#..## +...## +...#. +..... +..... + +..... +#.... +#.... +#..#. +#.### +##### +##### + +..... +..#.. +..#.. +.###. +####. +##### +##### + +##### +.#.## +.#.#. +.#... +.#... +.#... +..... + +..... +#.... +#...# +#..## +##.## +##.## +##### + +..... +.#... +.#.#. +##.## +##.## +##### +##### + +##### +##### +##### +#.##. +#..#. +...#. +..... + +..... +#..#. +#..#. +#..#. +#..## +#.### +##### + +##### +#.### +#.### +#..## +#..## +...#. +..... + +##### +###.# +#.#.# +#.#.# +..... +..... +..... + +##### +####. +####. +###.. +.#... +..... +..... + +..... +#.... +##..# +##.## +##.## +##### +##### + +..... +...#. +...#. +..### +#.### +##### +##### + +..... +..#.. +..#.. +.###. +.###. +.###. +##### + +##### +#.#.# +#.#.. +#.#.. +#.#.. +#.#.. +..... + +##### +##### +#.### +..##. +..#.. +..... +..... + +##### +##### +#.##. +...#. +...#. +..... +..... + +##### +##.## +.#.## +.#.## +....# +....# +..... + +..... +..#.. +#.#.. +####. +##### +##### +##### + +##### +###.# +###.# +#.#.# +#.#.# +#...# +..... + +..... +..... +.#.#. +.#.## +.#.## +##.## +##### + +##### +##### +##### +##### +##.#. +.#.#. +..... + +..... +.#... +.#..# +##..# +###.# +##### +##### + +##### +#.### +..##. +..##. +..##. +...#. +..... + +##### +#.##. +#.##. +#..#. +...#. +..... +..... + +##### +##### +##.## +#...# +#...# +....# +..... + +##### +##### +#.#.# +#.#.# +#...# +#.... +..... + +..... +..... +#.#.. +###.. +####. +##### +##### + +..... +..... +..... +#.... +#..#. +##.#. +##### + +..... +..... +..... +#..#. +#.##. +##### +##### + +##### +#.### +..### +..### +...#. +..... +..... + +..... +..... +#.... +#..#. +#.##. +#.##. +##### + +..... +#.... +#.#.. +###.. +####. +####. +##### + +##### +####. +#.##. +..##. +..#.. +..... +..... + +..... +...#. +...#. +..##. +.###. +.#### +##### + +..... +..... +..... +#..#. +#.##. +####. +##### + +..... +....# +#...# +#.#.# +##### +##### +##### + +..... +..#.. +..#.. +..#.. +..##. +.###. +##### + +..... +...#. +...#. +#.##. +##### +##### +##### + +##### +##.## +#..## +#..#. +#..#. +#.... +..... + +##### +##### +#.### +...#. +...#. +...#. +..... + +##### +.#### +..### +..### +...## +...#. +..... + +..... +#.#.. +#.#.. +#.#.. +####. +####. +##### + +##### +#.#.# +#.#.# +..#.# +....# +..... +..... + +##### +##.## +##.## +##..# +##..# +#...# +..... + +..... +....# +...## +...## +.#.## +.#.## +##### + +##### +##.## +#..## +#...# +....# +..... +..... + +##### +####. +##.#. +##.#. +#.... +#.... +..... + +..... +...#. +...#. +#..#. +#.##. +##### +##### + +##### +###.# +###.# +##..# +.#..# +.#... +..... + +..... +....# +....# +#.#.# +#.#.# +##### +##### + +..... +....# +.#..# +.##.# +###.# +##### +##### + +##### +####. +####. +.###. +.#.#. +..... +..... + +##### +##### +.#### +..#.# +..#.. +..... +..... + +..... +..... +..... +....# +..#.# +.#### +##### + +..... +.#.#. +##.#. +##.#. +####. +##### +##### + +##### +##### +##.## +##.## +##.#. +#.... +..... + +..... +#..#. +##.#. +##.## +##.## +##.## +##### + +..... +#..#. +##.## +##.## +##.## +##### +##### + +..... +..... +..... +..... +...#. +.#.#. +##### + +..... +#...# +##..# +###.# +##### +##### +##### + +..... +#.... +#.... +##..# +##.## +##### +##### + +##### +#.### +#.### +#.### +#..## +....# +..... + +##### +###.# +##..# +.#..# +.#..# +..... +..... + +##### +##### +###.# +.##.# +.#..# +....# +..... + +##### +##.## +.#.## +.#.## +.#..# +....# +..... + +##### +###.# +#.#.. +#.#.. +#.... +..... +..... + +..... +..... +....# +#.#.# +#.#.# +###.# +##### + +##### +#.### +#.#.# +....# +....# +..... +..... + +..... +..#.# +..#.# +..#.# +.#### +##### +##### + +##### +##### +#.### +#.### +#..## +...#. +..... + +..... +.#... +.#... +##.#. +##.#. +##.#. +##### + +..... +..... +.#... +.#.#. +.#.## +##.## +##### + +..... +..#.# +..#.# +..#.# +..#.# +.#### +##### + +..... +#.... +#.#.. +#.#.# +###.# +##### +##### + +##### +##.## +##.## +##..# +##..# +#.... +..... + +..... +#..#. +##.#. +##.#. +####. +##### +##### + +##### +#.#.# +..#.# +..#.# +..#.# +..... +..... + +..... +..... +...#. +.#.#. +.###. +.#### +##### + +..... +.#... +.##.# +.##.# +.##.# +###.# +##### + +..... +..... +#.... +#.... +#..#. +#.### +##### + +##### +##.## +#...# +#...# +#.... +#.... +..... + +..... +..#.# +..#.# +.#### +##### +##### +##### + +##### +.#.#. +.#.#. +...#. +...#. +..... +..... + +..... +.#... +.#... +.##.# +###.# +##### +##### + +##### +.#### +.#.## +.#.#. +...#. +...#. +..... + +..... +...#. +...#. +..##. +..### +#.### +##### + +..... +...#. +.#.#. +.#.#. +.#### +##### +##### + +##### +##### +.#### +.#.#. +.#... +..... +..... + +..... +...#. +...## +..### +#.### +#.### +##### + +..... +..... +..#.# +..#.# +.##.# +###.# +##### + +##### +.##.# +.##.. +..#.. +..#.. +..... +..... + +##### +##### +.#### +.#.## +.#.## +.#..# +..... + +##### +##### +##### +##.#. +#..#. +#..#. +..... + +..... +#.#.. +###.. +###.. +####. +##### +##### + +..... +#.#.. +#.#.. +#.#.. +#.#.# +##### +##### + +..... +..... +..#.. +.###. +.###. +##### +##### + +##### +###.# +#.#.. +#.#.. +..#.. +..#.. +..... + +##### +#.##. +#.##. +#..#. +#..#. +#..#. +..... + +##### +####. +###.. +###.. +###.. +#.#.. +..... + +##### +##.## +#...# +#...# +....# +..... +..... + +..... +..... +.#..# +###.# +##### +##### +##### + +..... +....# +...## +#..## +#.### +##### +##### + +##### +#.### +#..## +#...# +..... +..... +..... + +##### +###.# +.##.. +..#.. +..... +..... +..... + +##### +.#.## +.#.## +...## +....# +....# +..... + +..... +..... +.#... +.#.#. +.###. +.#### +##### + +..... +..... +...#. +...#. +..##. +.###. +##### + +##### +.#### +.#.#. +..... +..... +..... +..... + +##### +##### +##### +##### +####. +#.#.. +..... + +..... +...#. +...#. +#..#. +#..## +#.### +##### + +..... +..#.. +..#.. +..#.# +.##.# +.#### +##### + +..... +..... +.#.#. +.#.#. +.#.#. +##.#. +##### + +..... +#.... +#...# +#...# +#..## +#.### +##### + +##### +##### +#.#.# +#.#.. +..... +..... +..... + +##### +#.### +#.### +#.### +#.### +#.#.# +..... + +..... +.#... +.#.#. +.#.#. +.#.#. +.#.#. +##### + +##### +##### +####. +####. +##.#. +#.... +..... + +##### +##### +##### +##### +##### +#.#.# +..... + +..... +#.... +#.... +#.#.. +#.#.# +#.#.# +##### + +##### +##### +#.#.# +#.#.. +#.#.. +#.#.. +..... + +..... +..... +...#. +#..#. +#.### +#.### +##### + +..... +#.#.# +###.# +###.# +###.# +##### +##### + +##### +##.#. +.#... +.#... +.#... +.#... +..... + +..... +..... +..... +....# +.#.## +##.## +##### + +..... +...#. +...## +.#.## +.#### +##### +##### + +##### +#.#.# +..#.# +..#.. +..... +..... +..... + +..... +.#... +.#... +.#.#. +##.## +##.## +##### + +..... +..... +.#... +.#... +###.. +###.# +##### + +..... +....# +..#.# +..#.# +..#.# +.##.# +##### + +..... +...#. +...#. +..##. +#.##. +#.##. +##### + +..... +..#.. +#.#.. +#.#.. +#.#.# +#.#.# +##### + +..... +.#..# +.##.# +.##.# +.##.# +.##.# +##### + +..... +.#..# +.#..# +.#.## +.#.## +.#.## +##### + +##### +##### +#.### +#.### +...#. +...#. +..... + +##### +##### +##### +##.## +.#.## +.#.#. +..... + +##### +##.## +##.## +.#.#. +.#.#. +.#... +..... + +##### +####. +##.#. +#.... +..... +..... +..... + +##### +.#### +.#### +..##. +..#.. +..#.. +..... + +##### +##### +##.#. +#..#. +#..#. +...#. +..... + +..... +..... +.#... +.#... +###.# +##### +##### + +..... +#.... +#.#.# +###.# +##### +##### +##### + +##### +###.# +###.# +#.#.# +#.#.. +..... +..... + +##### +##### +###.# +#.#.# +#.#.# +#.... +..... + +..... +.#..# +##..# +##..# +###.# +##### +##### + +..... +..... +.#.#. +##.#. +##.#. +##.## +##### + +..... +..... +#.#.. +####. +####. +####. +##### + +##### +#.#.# +#.#.# +#.#.# +#.... +..... +..... + +##### +##### +.#### +.##.# +.##.. +.#... +..... + +##### +##### +#.### +#.##. +#.#.. +..#.. +..... + +##### +.###. +.###. +.#.#. +..... +..... +..... + +##### +##.#. +##... +##... +#.... +..... +..... + +..... +.#... +.#... +##.#. +##.#. +##.## +##### + +##### +.#### +.##.# +.##.# +.#... +..... +..... + +..... +...#. +..##. +..##. +..##. +#.##. +##### + +##### +##### +####. +####. +#.#.. +..#.. +..... + +..... +..... +..#.. +..##. +.#### +##### +##### + +..... +#.... +#.#.. +####. +####. +##### +##### + +##### +.##.# +..#.# +..#.# +..#.# +....# +..... + +##### +##.## +##.#. +##.#. +##.#. +.#.#. +..... + +..... +..... +....# +...## +...## +#.### +##### + +..... +...#. +...#. +...#. +#.### +#.### +##### + +..... +.#... +.#.#. +.#.#. +.###. +##### +##### + +..... +...#. +...#. +.#.#. +.#.#. +####. +##### + +##### +.#### +..### +...#. +...#. +...#. +..... + +##### +##### +##### +.#### +.#### +..#.# +..... + +##### +##.## +##..# +.#..# +.#... +..... +..... + +..... +..#.. +..#.. +..##. +#.##. +####. +##### + +..... +..#.# +..#.# +..#.# +..#.# +#.#.# +##### + +##### +.#.#. +..... +..... +..... +..... +..... + +##### +####. +###.. +###.. +###.. +.#... +..... + +##### +#.#.# +#.#.# +#.#.# +..#.. +..#.. +..... + +..... +..#.. +..#.# +#.### +#.### +##### +##### + +##### +###.# +##..# +##..# +##... +.#... +..... + +..... +..#.# +..#.# +#.### +##### +##### +##### + +..... +...#. +...## +...## +.#.## +.#.## +##### + +..... +..#.. +.###. +##### +##### +##### +##### + +##### +##### +##### +.#.#. +...#. +...#. +..... + +..... +..... +.#... +###.# +###.# +##### +##### + +##### +##### +##.## +##..# +#...# +..... +..... + +..... +..#.. +..#.# +..#.# +..#.# +.#### +##### + +..... +..... +....# +....# +#..## +##.## +##### + +..... +..... +..... +.#... +.#.#. +##### +##### + +##### +##.## +.#.## +.#.## +.#.## +.#..# +..... + +..... +.#.#. +.#.## +.#.## +##### +##### +##### + +##### +###.# +#.#.# +#.#.# +#.... +..... +..... + +..... +..... +..#.. +..##. +..##. +.###. +##### + +..... +..#.. +..#.# +#.#.# +#.#.# +#.### +##### + +##### +##.## +.#.#. +.#.#. +.#.#. +..... +..... + +##### +##### +.##.# +..#.. +..#.. +..... +..... + +..... +.#... +.##.. +###.# +##### +##### +##### + +..... +..... +..... +.#... +##... +##.#. +##### + +..... +.#... +.#... +.##.. +.##.. +####. +##### + +..... +..... +#.#.. +###.. +####. +####. +##### + +##### +##.## +.#.## +....# +....# +..... +..... + +##### +##### +##.## +##.## +##..# +#...# +..... + +..... +..... +..#.# +#.#.# +#.### +##### +##### + +##### +###.# +.##.# +..#.. +..... +..... +..... + +##### +###.# +###.# +.#... +..... +..... +..... + +..... +..... +...#. +#..## +#..## +##.## +##### + +..... +.#... +.##.. +###.. +###.# +##### +##### + +##### +.#### +.#.## +.#.#. +.#.#. +.#... +..... + +..... +.#..# +.#.## +.#.## +##.## +##### +##### + +##### +##### +.###. +.###. +.#.#. +.#... +..... + +##### +##### +###.# +###.. +.##.. +..#.. +..... + +##### +##### +##### +.##.# +.#... +..... +..... + +..... +..... +..... +#..#. +##.## +##.## +##### + +##### +#.### +#.##. +#.##. +#.#.. +..#.. +..... + +##### +##### +##### +#.#.# +....# +....# +..... + +..... +..#.. +..#.. +#.#.. +#.##. +####. +##### + +..... +#.... +##... +##..# +###.# +###.# +##### + +##### +##.## +##.## +.#..# +.#... +.#... +..... + +..... +.#... +.#... +##.#. +####. +##### +##### + +..... +..#.. +#.#.. +#.#.. +###.# +###.# +##### + +..... +..... +...#. +...#. +..##. +#.##. +##### + +##### +#.### +#.### +#..#. +#..#. +..... +..... + +..... +#..#. +#..#. +#..#. +#..#. +##.## +##### + +..... +.#... +.#.#. +.#.#. +.#### +##### +##### + +##### +.##.# +.##.# +.##.# +.##.. +..#.. +..... + +..... +...#. +.#.#. +.#.## +.#.## +##### +##### + +..... +....# +..#.# +..#.# +..### +.#### +##### + +..... +.#.#. +.#.#. +##.## +##### +##### +##### + +##### +.###. +.#.#. +.#.#. +.#.#. +.#.#. +..... + +##### +###.# +###.# +###.# +##..# +#.... +..... + +..... +#.... +#.#.. +#.#.# +#.### +#.### +##### + +##### +##### +.#### +.#.## +...#. +...#. +..... + +..... +.#... +.##.# +.##.# +###.# +##### +##### + +..... +#.#.. +###.. +####. +##### +##### +##### + +..... +.#... +.##.. +.##.# +.##.# +.#### +##### + +..... +...#. +...#. +...## +.#.## +##.## +##### + +##### +##### +##.#. +##.#. +.#.#. +.#.#. +..... + +##### +###.# +###.. +###.. +#.#.. +..#.. +..... + +..... +..... +.#.#. +.#.#. +##### +##### +##### + +##### +##.## +##.#. +.#... +..... +..... +..... + +##### +##.## +##.#. +##.#. +.#... +.#... +..... + +##### +##.#. +##.#. +.#... +.#... +..... +..... + +##### +#.### +#.### +#.### +#..## +#..#. +..... + +##### +#.### +#.#.# +#...# +....# +....# +..... + +##### +.###. +.###. +.###. +.#.#. +...#. +..... + +##### +##### +##### +##### +##.#. +.#... +..... + +##### +##### +##.#. +##.#. +.#.#. +..... +..... + +..... +.#..# +##..# +##.## +##### +##### +##### + +..... +#.... +#..#. +##.## +##.## +##### +##### + +..... +..... +..#.. +#.#.# +##### +##### +##### + +##### +#.### +#.##. +#.##. +...#. +..... +..... + +##### +##### +#.### +#..## +#...# +..... +..... + +##### +##### +#.#.# +..#.# +....# +....# +..... + +##### +##.#. +.#.#. +.#.#. +...#. +...#. +..... + +..... +..... +....# +.#..# +.##.# +###.# +##### + +##### +##### +#.### +#.#.# +#.#.. +..... +..... + +..... +.#... +##... +##... +###.# +###.# +##### + +##### +##.#. +##... +##... +.#... +..... +..... + +##### +##### +.##.# +.##.# +..#.# +..#.# +..... + +..... +..#.. +.##.. +.##.. +.##.. +###.# +##### + +##### +##### +####. +####. +.###. +..#.. +..... + +..... +..#.. +..#.# +#.#.# +##### +##### +##### + +..... +.#... +.#... +.##.. +.##.. +.##.# +##### + +..... +....# +..#.# +#.#.# +#.#.# +##### +##### + +..... +#.#.. +###.. +###.. +####. +####. +##### + +..... +....# +#...# +#..## +##.## +##### +##### + +..... +....# +....# +....# +..#.# +.##.# +##### + +##### +####. +.###. +.###. +..#.. +..... +..... + +..... +.#... +.#.#. +##.#. +####. +##### +##### + +##### +#.### +#.### +..##. +..#.. +..#.. +..... + +..... +#...# +#...# +#...# +#.#.# +##### +##### + +##### +#.### +#.### +#.### +#.### +#..#. +..... + +..... +..#.. +..#.# +..#.# +..### +#.### +##### + +..... +#.#.# +#.#.# +#.#.# +#.#.# +#.#.# +##### + +..... +....# +....# +#...# +##..# +###.# +##### + +##### +###.# +##..# +##... +.#... +..... +..... + +##### +.#### +.#.## +.#.## +....# +..... +..... + +##### +#.### +#.### +...#. +..... +..... +..... + +..... +..... +....# +...## +#.### +##### +##### + +##### +##### +.#### +.##.# +.##.# +.#..# +..... + +..... +..... +#..#. +#..#. +#..## +#.### +##### + +##### +##.## +.#.## +.#.## +...#. +..... +..... + +##### +##### +##.## +#...# +#.... +..... +..... + +##### +###.# +.##.# +.#..# +....# +....# +..... + +..... +..#.. +..#.. +..#.# +.##.# +##### +##### + +##### +.#.## +...## +...## +....# +....# +..... + +..... +..#.. +.##.. +###.. +###.# +###.# +##### + +##### +#.### +#..## +#..#. +#..#. +...#. +..... + +##### +##### +##### +.#### +.#.## +...#. +..... + +..... +..... +.#... +.##.. +.###. +####. +##### + +##### +.#### +.###. +..#.. +..... +..... +..... + +##### +#.##. +#.##. +#.#.. +..#.. +..... +..... + +..... +..#.. +.##.. +.##.. +###.. +###.# +##### + +##### +##### +#.##. +...#. +..... +..... +..... + +..... +..#.. +..#.# +#.#.# +#.#.# +##### +##### + +..... +..... +..... +..#.. +#.#.# +#.#.# +##### + +..... +..#.. +#.#.# +#.#.# +###.# +###.# +##### + +..... +#..#. +#..#. +#..#. +##.#. +##### +##### + +..... +#.... +#.... +##... +###.. +###.# +##### + +##### +####. +####. +##.#. +##.#. +#..#. +..... + +..... +...#. +.#.#. +.#.## +##.## +##.## +##### + +##### +#.### +..### +..#.# +....# +..... +..... + +##### +#.### +...#. +...#. +...#. +..... +..... + +..... +..... +#.... +#.... +#.... +##.#. +##### + +..... +.#..# +###.# +###.# +###.# +##### +##### + +##### +##### +.###. +.#.#. +.#.#. +...#. +..... + +..... +..... +..... +#.#.. +#.#.. +###.# +##### + +##### +##.#. +#..#. +#..#. +#..#. +...#. +..... + +..... +.#.#. +.###. +.###. +####. +####. +##### + +##### +.#### +.#### +.#### +.#### +..#.# +..... + +##### +#.##. +#.##. +..#.. +..... +..... +..... + +..... +..#.. +..#.. +#.##. +#.##. +#.### +##### + +##### +##### +###.# +###.# +.#... +.#... +..... + +##### +.#### +.##.# +.##.# +.#..# +.#..# +..... + +..... +...#. +...#. +...#. +..### +.#### +##### + +..... +#.#.# +###.# +##### +##### +##### +##### + +..... +.#... +.#..# +.#..# +.#.## +.#.## +##### + +..... +..... +..... +..#.# +.##.# +.##.# +##### + +##### +##.## +.#.## +.#.#. +.#.#. +.#.#. +..... + +..... +..... +...#. +#..#. +##.#. +##.#. +##### + +##### +##.#. +##.#. +##.#. +##... +#.... +..... + +..... +..... +#.#.. +#.#.. +###.# +###.# +##### + +##### +####. +##.#. +##... +.#... +.#... +..... + +..... +#.... +#.#.. +#.#.. +#.##. +##### +##### + +##### +##### +.#### +.#### +.#.## +....# +..... + +..... +..... +..#.# +..### +#.### +#.### +##### + +##### +##### +.##.# +.##.# +.#..# +.#..# +..... + +##### +#.#.# +#.#.# +#...# +#.... +..... +..... + +##### +###.# +#.#.# +#.#.. +..#.. +..... +..... + +..... +...#. +...#. +.#.#. +.#.#. +.#### +##### + +..... +..... +..... +..... +..#.# +#.#.# +##### + +..... +.#... +.#.#. +.#.#. +##.## +##.## +##### + +..... +..... +#.... +##.#. +####. +##### +##### + +##### +###.# +###.. +###.. +.#... +.#... +..... + +..... +..... +..... +...#. +...#. +.#.## +##### + +##### +##### +###.# +###.# +##..# +#.... +..... + +##### +.#.## +...## +...## +...## +....# +..... + +..... +..#.. +..##. +#.##. +#.##. +##### +##### + +..... +#...# +#..## +##.## +##### +##### +##### + +##### +.#### +..##. +..#.. +..... +..... +..... + +..... +.#... +.#... +.#... +.#.#. +.#.#. +##### + +##### +.#### +.#.## +....# +..... +..... +..... + +..... +..#.. +..#.. +#.#.. +###.# +###.# +##### + +..... +.#... +##..# +##..# +###.# +###.# +##### + +##### +##### +.#.## +....# +....# +..... +..... + +..... +...#. +#..#. +##.## +##### +##### +##### + +##### +###.# +###.# +.##.# +.##.# +.#... +..... + +..... +#.... +#.... +##..# +##.## +##.## +##### + +##### +##### +###.# +##..# +##..# +.#..# +..... + +##### +##.## +##.#. +.#.#. +.#... +..... +..... + +..... +..#.. +..#.. +..#.. +..#.# +.#### +##### + +##### +.#.## +.#.## +.#.## +.#.#. +...#. +..... + +..... +.#... +.#... +.#..# +.#..# +.#.## +##### + +..... +..#.. +.##.. +.###. +.#### +.#### +##### + +..... +#.... +#...# +##.## +##.## +##### +##### + +##### +##.## +##.#. +##.#. +##.#. +#..#. +..... + +##### +##### +##.#. +.#.#. +.#.#. +..... +..... + +..... +..#.. +.##.# +.##.# +.##.# +###.# +##### + +##### +.###. +.##.. +..#.. +..#.. +..... +..... + +##### +#.#.# +#.#.. +#.#.. +..#.. +..... +..... + +##### +##### +##### +#.### +#.#.# +#.... +..... + +##### +##### +#.### +..#.# +..#.# +..#.# +..... + +##### +##.## +##..# +.#..# +.#..# +....# +..... + +..... +#.... +#...# +#.#.# +#.#.# +###.# +##### + +..... +..#.# +..#.# +..### +#.### +##### +##### + +..... +..... +..#.. +.##.# +##### +##### +##### + +..... +..... +..... +.#..# +.#.## +##.## +##### + +##### +##### +####. +#.#.. +#.... +..... +..... + +..... +...#. +..##. +#.##. +####. +##### +##### + +..... +..... +...#. +.#.#. +.#.## +##.## +##### + +..... +..... +.#... +##.#. +####. +####. +##### + +..... +.#.#. +.#.#. +.#.#. +.#### +##### +##### + +..... +..... +....# +...## +.#.## +.#### +##### + +##### +###.# +###.# +.#..# +.#..# +....# +..... + +##### +##### +##.## +.#.## +.#.## +...#. +..... + +##### +#.### +#..## +#..## +#..#. +#.... +..... + +##### +#.### +...## +...## +...#. +..... +..... + +##### +###.# +###.. +#.#.. +#.#.. +#.#.. +..... + +##### +##### +##### +#.### +#.### +..#.# +..... + +..... +..#.. +#.##. +#.##. +#.### +##### +##### + +..... +..#.. +..#.. +..##. +.###. +.#### +##### + +..... +..... +..... +..... +.#..# +.#.## +##### + +..... +..... +..... +#.... +#.#.. +#.#.# +##### + +##### +####. +###.. +.#... +.#... +..... +..... + +..... +..... +..... +#.#.. +###.# +###.# +##### + +..... +..#.. +#.#.. +#.#.. +#.#.. +####. +##### + +##### +####. +####. +####. +##.#. +#.... +..... + +..... +..#.. +.##.. +####. +####. +####. +##### + +..... +...#. +.#.#. +.###. +.#### +##### +##### + +..... +.#... +.#.#. +####. +####. +####. +##### + +##### +##.## +##.## +.#.## +...#. +..... +..... + +##### +##### +#.#.# +..#.# +..#.# +..... +..... + +..... +..#.. +..##. +#.##. +#.##. +#.##. +##### + +..... +..... +....# +.#.## +##### +##### +##### + +##### +##### +##.## +##.#. +#..#. +#.... +..... + +..... +..... +..... +.#... +###.# +###.# +##### + +..... +..#.. +.##.. +.###. +####. +##### +##### + +..... +.#..# +.#..# +##..# +##.## +##### +##### + +##### +#.#.# +#...# +#...# +....# +..... +..... + +##### +#.### +#.### +#.#.# +#.#.# +#.#.# +..... + +##### +#.### +..##. +..##. +...#. +..... +..... + +##### +##### +.#.## +.#..# +....# +....# +..... + +##### +.##.# +..#.# +..#.# +....# +....# +..... + +##### +##.## +##.## +##.#. +#..#. +#.... +..... + +..... +.#... +.#... +##..# +##..# +##.## +##### + +##### +##.## +.#..# +.#..# +.#... +..... +..... \ No newline at end of file diff --git a/day_25/solve_1.ts b/day_25/solve_1.ts new file mode 100644 index 0000000..5425e37 --- /dev/null +++ b/day_25/solve_1.ts @@ -0,0 +1,66 @@ +// +export type KeyImage = string[][]; + +export async function readKeyImageData(path: string): Promise { + const data = await Deno.readTextFile(path); + const keyImage: KeyImage[] = data.replaceAll("\r","").split('\n\n').map((line) => line.split('\n').map((char) => char.split(''))); + return keyImage; +} + +type KeyImageType = "key" | "lock"; + +export function getKeyImageType(keyImage: KeyImage): KeyImageType { + return keyImage[0][0] === "." ? "key" : "lock"; +} + +export type LockShape = number[]; + +export function getLockShape(keyImage: KeyImage): LockShape { + const lockShape: LockShape = [0,0,0,0,0] + let start, increment, end; + if (getKeyImageType(keyImage) === "key") { + start = keyImage.length - 1; + increment = -1; + end = -1; + } + else { + start = 0; + increment = 1; + end = keyImage.length; + } + + for (let i = 0; i < keyImage[0].length; i++) { + let height = 0; + for (let j = start; j != end ; j += increment) { + if (keyImage[j][i] === ".") { + lockShape[i] = height - 1; + break; + } + height++; + } + } + return lockShape; +} + +if (import.meta.main) { + const keyImage = await readKeyImageData(new URL('input.txt', import.meta.url).pathname.slice(1)); + const keys = keyImage.filter((key) => getKeyImageType(key) === "key").map(getLockShape); + const locks = keyImage.filter((key) => getKeyImageType(key) === "lock").map(getLockShape); + + let fitCount = 0; + for (const lock of locks) { + for (const key of keys) { + let fit = true; + for (let i = 0; i < 5; i++) { + if (key[i] + lock[i] > 5) { + fit = false; + break; + } + } + if (fit) { + fitCount++; + } + } + } + console.log(fitCount); +} \ No newline at end of file