diff --git a/day-25/input.txt b/day-25/input.txt new file mode 100644 index 0000000..2d3cc08 --- /dev/null +++ b/day-25/input.txt @@ -0,0 +1,3999 @@ +..... +..#.. +..#.# +..#.# +#.### +##### +##### + +##### +.#.## +.#..# +..... +..... +..... +..... + +..... +..... +..... +....# +.#.## +##.## +##### + +..... +..... +..... +#..#. +#..## +#.### +##### + +..... +#.... +#.#.. +###.. +####. +##### +##### + +..... +#.... +#.... +#.#.# +#.#.# +#.#.# +##### + +##### +#.#.# +....# +....# +....# +..... +..... + +##### +.#### +.##.# +.##.. +.##.. +..#.. +..... + +##### +#.### +#.### +#.### +#..#. +..... +..... + +##### +#.### +#.### +#.#.# +#.#.# +..... +..... + +..... +..#.. +#.#.. +###.. +####. +####. +##### + +..... +#.... +#.#.. +#.#.. +####. +####. +##### + +##### +.###. +..#.. +..#.. +..#.. +..... +..... + +..... +....# +..#.# +.##.# +.##.# +.##.# +##### + +..... +..... +..#.. +..##. +.###. +.###. +##### + +..... +..... +..... +.#..# +###.# +##### +##### + +##### +##.## +##.#. +##.#. +##... +.#... +..... + +##### +##### +#.### +#.#.# +#...# +#.... +..... + +##### +.#.## +...## +....# +....# +....# +..... + +..... +#.... +##..# +##.## +##.## +##.## +##### + +..... +..... +#.... +#...# +#.#.# +#.#.# +##### + +##### +.#.## +.#.#. +.#... +.#... +.#... +..... + +..... +#.... +##..# +###.# +###.# +###.# +##### + +##### +###.# +#.#.# +#.#.# +#...# +#...# +..... + +##### +##.#. +##.#. +.#.#. +.#... +..... +..... + +##### +##### +.##.# +.##.. +.#... +.#... +..... + +##### +##### +#.### +#.### +#..#. +#..#. +..... + +..... +#.... +##... +##.#. +####. +####. +##### + +..... +....# +.#.## +.#.## +.#### +##### +##### + +..... +#.... +#.#.# +#.#.# +##### +##### +##### + +##### +####. +####. +#.##. +..##. +..#.. +..... + +..... +#.... +##... +##... +##.#. +##.#. +##### + +..... +.#..# +.##.# +.#### +##### +##### +##### + +..... +...#. +...#. +.#.#. +##### +##### +##### + +..... +..... +...#. +..##. +#.##. +##### +##### + +##### +##.#. +.#.#. +.#.#. +.#.#. +...#. +..... + +##### +#.#.# +..#.# +..#.# +..... +..... +..... + +##### +##### +.###. +.###. +.###. +.#.#. +..... + +..... +..... +..#.. +..#.. +.##.# +.#### +##### + +##### +#.### +#.### +...#. +...#. +..... +..... + +..... +..... +.#... +.##.. +.###. +####. +##### + +..... +#.#.# +#.#.# +###.# +###.# +###.# +##### + +##### +##### +##### +##### +#.##. +#.#.. +..... + +..... +..... +..#.. +..#.. +#.#.. +###.# +##### + +##### +##### +###.# +###.. +#.#.. +#.#.. +..... + +##### +##### +##.## +#..#. +#..#. +#.... +..... + +..... +..#.. +.##.. +###.# +###.# +###.# +##### + +..... +.#... +.#... +.#.#. +.#.## +.#### +##### + +..... +.#... +###.. +###.# +###.# +###.# +##### + +..... +...#. +#.##. +##### +##### +##### +##### + +..... +...#. +...#. +#..#. +#..#. +##.#. +##### + +##### +.#### +.###. +.#.#. +..... +..... +..... + +..... +#.#.. +#.#.# +#.### +#.### +##### +##### + +##### +##### +###.# +#.#.. +#.#.. +..... +..... + +..... +#.#.. +#.##. +####. +####. +####. +##### + +##### +##### +##.## +#..#. +#..#. +#..#. +..... + +..... +#.#.# +#.#.# +#.#.# +###.# +###.# +##### + +##### +##### +##### +####. +#.##. +..#.. +..... + +..... +..... +....# +....# +..#.# +#.#.# +##### + +..... +..#.# +#.#.# +#.#.# +#.### +#.### +##### + +##### +#.##. +...#. +...#. +...#. +...#. +..... + +..... +...#. +.#.## +##### +##### +##### +##### + +##### +##.## +##.#. +##.#. +#.... +..... +..... + +..... +..#.. +..#.# +..### +.#### +##### +##### + +##### +####. +####. +####. +##.#. +.#.#. +..... + +##### +##### +###.# +#.#.. +..#.. +..... +..... + +..... +#.... +#.... +#...# +#.#.# +#.### +##### + +..... +..... +#.#.# +#.#.# +#.#.# +#.### +##### + +##### +.#### +..### +..#.# +....# +..... +..... + +..... +#...# +#...# +#.#.# +#.#.# +#.#.# +##### + +##### +###.# +###.. +.##.. +..#.. +..... +..... + +..... +..... +#..#. +##.#. +##.#. +##### +##### + +..... +..#.. +..##. +..##. +..### +#.### +##### + +##### +.##.# +.#... +.#... +.#... +.#... +..... + +##### +##.## +##.## +.#..# +.#..# +..... +..... + +..... +....# +#...# +#...# +#...# +#.#.# +##### + +..... +..... +#.... +#..#. +##.#. +##.## +##### + +..... +..... +...#. +.#.#. +.#.#. +####. +##### + +##### +.#### +..##. +..##. +..##. +...#. +..... + +##### +#.#.# +..#.# +..#.# +..#.# +..#.# +..... + +##### +.#.## +.#.## +...## +....# +..... +..... + +..... +#...# +#...# +##.## +##.## +##### +##### + +##### +##### +####. +.###. +.#.#. +..... +..... + +##### +##### +###.# +.##.# +.#..# +.#... +..... + +##### +##.## +##.## +##..# +##..# +.#... +..... + +##### +##### +##### +##.## +#..## +...#. +..... + +##### +#.### +#.### +#.#.# +#.#.. +#.#.. +..... + +..... +....# +..#.# +#.#.# +#.#.# +#.### +##### + +..... +.#... +.#.#. +.#.## +.#### +##### +##### + +##### +#.##. +#.##. +#.#.. +#.#.. +#.#.. +..... + +..... +..... +..... +#.... +##.#. +##.## +##### + +..... +..#.. +..##. +..##. +.#### +##### +##### + +##### +#.##. +#.#.. +#.#.. +..#.. +..#.. +..... + +..... +.#..# +.#..# +.#.## +##.## +##.## +##### + +..... +..... +....# +#.#.# +#.#.# +##### +##### + +..... +..... +...#. +.#.## +.#.## +.#.## +##### + +##### +###.# +.##.# +.#... +.#... +..... +..... + +..... +..#.. +..#.. +..##. +.#### +.#### +##### + +##### +#.### +..##. +..##. +..#.. +..#.. +..... + +##### +.#### +..### +..### +...#. +..... +..... + +##### +#.##. +..##. +..##. +...#. +...#. +..... + +##### +#.#.# +#...# +..... +..... +..... +..... + +..... +..#.. +..#.# +#.#.# +#.#.# +#.#.# +##### + +##### +##### +.###. +.#.#. +.#... +..... +..... + +##### +##### +##### +#.#.# +..#.. +..#.. +..... + +..... +...#. +...#. +..##. +.#### +##### +##### + +##### +###.# +###.. +#.#.. +..... +..... +..... + +..... +..... +.#.#. +.#.#. +##.## +##### +##### + +..... +..... +..#.# +#.#.# +###.# +##### +##### + +..... +.#... +.#..# +##..# +##..# +###.# +##### + +##### +##### +##### +#.##. +#.##. +..#.. +..... + +..... +#..#. +#..#. +#.### +#.### +##### +##### + +..... +..... +.#... +.#..# +.#.## +.#### +##### + +..... +.#.#. +####. +####. +##### +##### +##### + +##### +#.### +#.##. +..##. +..##. +..#.. +..... + +..... +..#.. +..#.# +..### +#.### +##### +##### + +..... +..... +..... +.#..# +###.# +###.# +##### + +##### +##### +##### +####. +#.#.. +..... +..... + +..... +..... +...#. +...## +.#.## +##### +##### + +..... +.#... +.#... +.#... +##... +###.# +##### + +..... +..#.# +..#.# +#.#.# +##### +##### +##### + +##### +##### +##.## +##.## +#...# +#.... +..... + +..... +....# +#...# +#...# +#.#.# +###.# +##### + +..... +....# +....# +..#.# +..#.# +.##.# +##### + +##### +####. +.#.#. +.#.#. +.#.#. +.#.#. +..... + +##### +#.#.# +#.#.# +#.#.# +#.#.# +#.#.# +..... + +##### +###.# +##..# +##..# +##..# +#...# +..... + +##### +#.### +#.#.# +#...# +#...# +#.... +..... + +##### +##### +###.# +##..# +.#..# +.#..# +..... + +..... +..... +..... +#.... +#.#.. +#.##. +##### + +##### +.#### +.##.# +..#.# +..#.# +....# +..... + +..... +..... +..#.. +..#.# +.##.# +###.# +##### + +..... +#..#. +#.##. +####. +####. +##### +##### + +..... +..#.. +..#.. +#.##. +#.### +##### +##### + +##### +##### +##.## +.#.#. +.#.#. +...#. +..... + +##### +##.## +##.## +#...# +#.... +#.... +..... + +..... +..... +..... +..#.# +..### +.#### +##### + +..... +#.#.. +#.##. +#.### +#.### +##### +##### + +..... +#.... +#...# +##.## +##.## +##### +##### + +##### +####. +#.##. +..##. +..##. +...#. +..... + +##### +#.##. +#.##. +#.##. +..#.. +..#.. +..... + +##### +##.## +##.## +##.## +.#.## +.#.#. +..... + +##### +##### +##### +#.#.# +#.#.# +#.... +..... + +##### +####. +.###. +.###. +..#.. +..... +..... + +..... +.#..# +.#.## +.#.## +.#.## +.#.## +##### + +##### +.#### +.#### +.###. +.#.#. +.#.#. +..... + +..... +..... +.#... +.##.. +###.# +###.# +##### + +..... +..... +....# +....# +#.#.# +##### +##### + +##### +##### +##.## +#..#. +#..#. +...#. +..... + +##### +.#### +..### +...#. +...#. +...#. +..... + +..... +....# +.#.## +.#.## +.#.## +.#.## +##### + +..... +#.... +#..#. +##.#. +##.#. +##.#. +##### + +..... +...#. +...#. +#.##. +#.##. +#.##. +##### + +..... +.#..# +.##.# +##### +##### +##### +##### + +##### +.###. +..##. +..#.. +..#.. +..#.. +..... + +##### +#.#.# +#.#.# +..#.# +..#.# +....# +..... + +##### +##### +##.#. +##.#. +##... +#.... +..... + +##### +##### +##.#. +.#.#. +...#. +...#. +..... + +##### +.#### +.#.## +.#..# +.#..# +.#... +..... + +##### +##### +###.# +.##.# +.#... +..... +..... + +##### +##### +###.# +.##.# +.##.# +..#.# +..... + +##### +#.### +..### +..### +...## +...#. +..... + +..... +.#... +.#... +.##.# +###.# +###.# +##### + +##### +##### +##### +##### +##.## +.#..# +..... + +..... +#.... +#...# +#.#.# +###.# +###.# +##### + +##### +.#.## +.#..# +.#... +..... +..... +..... + +..... +..#.. +#.##. +#.##. +#.##. +####. +##### + +##### +##.#. +##.#. +##... +.#... +.#... +..... + +..... +..... +.#... +###.# +###.# +##### +##### + +##### +##### +##### +###.# +.##.# +.#..# +..... + +..... +..#.. +.##.. +.##.. +.###. +.###. +##### + +##### +##### +##### +#.##. +...#. +...#. +..... + +..... +#...# +##.## +##.## +##.## +##### +##### + +..... +..... +..#.. +.##.. +.##.# +.#### +##### + +..... +..... +....# +#.#.# +#.#.# +#.### +##### + +##### +##### +##### +##### +.#.#. +..... +..... + +##### +##.## +.#..# +.#..# +....# +....# +..... + +..... +..#.. +#.#.. +#.##. +#.##. +####. +##### + +..... +..... +.#... +.##.. +.##.# +.##.# +##### + +..... +..... +.#... +.#... +.##.# +##### +##### + +..... +#...# +##.## +##.## +##### +##### +##### + +..... +#.#.. +####. +##### +##### +##### +##### + +..... +..#.# +..#.# +.##.# +.##.# +###.# +##### + +##### +####. +##.#. +##... +.#... +.#... +..... + +##### +##### +###.# +###.# +#.#.# +..#.# +..... + +##### +##### +##### +.#### +..#.# +..... +..... + +..... +...#. +.#.#. +.#.## +##.## +##.## +##### + +..... +..... +..#.. +..#.# +..### +.#### +##### + +##### +#.### +#.#.# +#.#.. +..#.. +..... +..... + +..... +....# +..#.# +..### +..### +#.### +##### + +##### +#.### +#.#.# +#.#.. +..#.. +..#.. +..... + +##### +##### +##### +#.### +#.##. +#..#. +..... + +..... +.#... +.#.#. +.#.#. +##.## +##.## +##### + +##### +.#.#. +.#.#. +...#. +...#. +..... +..... + +..... +...#. +..##. +..##. +#.### +#.### +##### + +..... +#.... +#..#. +#..#. +##.## +##### +##### + +##### +##### +.###. +..#.. +..#.. +..... +..... + +##### +##### +###.# +#.#.# +..#.. +..#.. +..... + +..... +.#... +.#.#. +.#.#. +##.#. +##### +##### + +..... +.#... +##... +##... +###.# +###.# +##### + +..... +..... +...#. +#..## +#.### +##### +##### + +..... +..... +#.... +##.#. +##.#. +##### +##### + +..... +..... +...#. +..##. +#.##. +####. +##### + +##### +#.#.# +#.#.# +#.#.. +#.#.. +..... +..... + +..... +#.#.. +###.. +####. +####. +##### +##### + +..... +..... +.#..# +.#..# +.#..# +.#.## +##### + +##### +.#### +.###. +..#.. +..#.. +..... +..... + +##### +#.### +#.##. +#.##. +..##. +...#. +..... + +##### +##.## +.#.## +.#..# +....# +....# +..... + +##### +##.## +##.## +##.#. +.#... +..... +..... + +..... +#..#. +##.#. +##.#. +##.#. +####. +##### + +..... +.#... +.#... +.#.#. +.#.#. +##.## +##### + +..... +..... +..... +..#.. +..#.. +#.##. +##### + +##### +##.## +.#.## +.#.## +.#.#. +...#. +..... + +..... +#.... +#.... +##... +###.# +###.# +##### + +..... +.#..# +.#..# +##..# +##..# +###.# +##### + +..... +..... +..... +#...# +#.#.# +#.#.# +##### + +##### +####. +####. +####. +#.##. +..#.. +..... + +##### +##.#. +##.#. +.#.#. +.#.#. +.#.#. +..... + +..... +..... +..#.# +.##.# +.##.# +.##.# +##### + +##### +##### +####. +.###. +.#.#. +.#... +..... + +..... +..... +..... +...#. +..##. +#.### +##### + +##### +####. +#.##. +..#.. +..#.. +..... +..... + +..... +..... +..#.. +#.#.. +#.#.# +#.### +##### + +##### +#.#.# +#...# +#.... +#.... +..... +..... + +..... +#...# +#..## +##.## +##### +##### +##### + +##### +#.##. +#.##. +#.#.. +#.#.. +..#.. +..... + +..... +.#... +.#..# +.#..# +.#.## +##### +##### + +..... +..... +#.#.. +#.##. +#.##. +#.### +##### + +##### +###.# +.##.# +.#..# +.#... +.#... +..... + +..... +..#.. +..#.# +..### +..### +#.### +##### + +..... +#...# +#...# +#..## +#.### +#.### +##### + +..... +#.#.. +#.#.. +#.#.. +#.##. +####. +##### + +##### +.#### +.###. +.#.#. +.#.#. +.#.#. +..... + +##### +##.## +.#.## +...## +...## +....# +..... + +##### +.###. +.##.. +..#.. +..#.. +..... +..... + +##### +##.#. +##.#. +#..#. +...#. +...#. +..... + +##### +#.### +#.### +#.#.# +#.#.. +..#.. +..... + +..... +#..#. +#.##. +#.### +#.### +#.### +##### + +..... +..... +#.#.. +#.#.. +###.. +####. +##### + +..... +#.... +#...# +#.#.# +##### +##### +##### + +..... +....# +#.#.# +#.#.# +###.# +##### +##### + +##### +.#### +.#### +..#.# +....# +..... +..... + +..... +..... +#..#. +#..## +##.## +##.## +##### + +##### +#.### +...## +...#. +...#. +..... +..... + +..... +..... +....# +.#..# +##..# +##.## +##### + +##### +##### +##### +##### +.#.## +.#..# +..... + +##### +##### +##### +####. +#.#.. +..#.. +..... + +..... +.#... +.#.#. +.#.#. +.#.#. +.#.#. +##### + +##### +#.### +#.### +#.#.# +#.#.. +#.... +..... + +..... +...#. +...#. +.#.## +##### +##### +##### + +##### +.#### +..### +..### +..#.# +..#.. +..... + +##### +##### +##### +##### +##.## +.#.#. +..... + +##### +.#### +.##.# +..#.# +..... +..... +..... + +##### +##### +#.### +#..## +#..## +....# +..... + +..... +.#..# +###.# +###.# +###.# +##### +##### + +..... +...#. +...#. +#..## +##.## +##### +##### + +##### +#.##. +#.#.. +#.#.. +#.... +..... +..... + +##### +###.# +###.# +##..# +#...# +..... +..... + +##### +##### +#.### +#.##. +#.#.. +#.... +..... + +..... +..... +..#.. +#.#.. +#.#.# +###.# +##### + +##### +##.## +#..## +...#. +...#. +..... +..... + +..... +..#.. +..#.. +.##.. +.##.. +.##.# +##### + +##### +##### +.#### +.#.## +...## +....# +..... + +##### +.#### +.#### +..### +...#. +..... +..... + +##### +##### +#.##. +#.##. +#..#. +..... +..... + +##### +#.#.# +#.#.. +#.#.. +..... +..... +..... + +..... +..... +..#.. +..#.. +..##. +.#### +##### + +##### +###.# +##..# +.#..# +.#..# +.#..# +..... + +##### +###.# +###.# +#.#.. +..... +..... +..... + +##### +#.##. +#..#. +#.... +..... +..... +..... + +..... +..... +..... +..... +#..#. +#.##. +##### + +##### +####. +##.#. +#..#. +#..#. +...#. +..... + +..... +..#.. +.##.# +###.# +###.# +##### +##### + +..... +.#... +.#.#. +.###. +.###. +##### +##### + +##### +#.##. +#..#. +..... +..... +..... +..... + +..... +#.... +#..#. +##.#. +##.## +##### +##### + +##### +#.### +#.#.# +#.... +#.... +..... +..... + +##### +##### +##.#. +##.#. +##... +.#... +..... + +..... +....# +..#.# +..#.# +..### +.#### +##### + +..... +..#.. +..#.# +..#.# +#.### +#.### +##### + +##### +##.## +.#.## +.#.## +...## +...#. +..... + +##### +###.# +##... +.#... +.#... +..... +..... + +##### +##### +##.## +##.#. +##.#. +#..#. +..... + +..... +...#. +#..#. +##.#. +##.#. +####. +##### + +##### +.#.#. +...#. +...#. +...#. +..... +..... + +..... +..... +#.... +#.... +#..#. +#.##. +##### + +..... +....# +....# +#..## +#.### +#.### +##### + +##### +#.### +#.### +#.#.# +#...# +....# +..... + +##### +##### +.#### +.###. +.#.#. +.#... +..... + +##### +####. +.###. +..#.. +..#.. +..#.. +..... + +..... +..... +..#.. +..#.# +.##.# +##### +##### + +..... +..... +..#.# +..### +..### +#.### +##### + +..... +#.... +#...# +##..# +##..# +###.# +##### + +##### +##.## +##.## +##..# +#...# +#...# +..... + +##### +##.#. +.#.#. +.#.#. +.#.#. +.#... +..... + +##### +####. +###.. +#.#.. +#.#.. +#.#.. +..... + +##### +##.## +#..#. +...#. +..... +..... +..... + +##### +.###. +.#.#. +.#.#. +...#. +...#. +..... + +..... +..... +..#.# +..#.# +.##.# +.##.# +##### + +##### +#.##. +#.##. +#.##. +#.#.. +..... +..... + +##### +##.## +##..# +##... +##... +.#... +..... + +##### +.#### +.#.## +.#.## +.#..# +....# +..... + +##### +.###. +.#.#. +...#. +..... +..... +..... + +..... +..... +.#..# +.##.# +.##.# +###.# +##### + +..... +#.... +#..#. +#.##. +##### +##### +##### + +..... +#.#.. +#.#.. +#.##. +####. +####. +##### + +##### +##### +##### +.###. +.#.#. +.#... +..... + +##### +##### +#.### +#.### +...#. +...#. +..... + +..... +..... +..... +..... +.#... +.#.#. +##### + +..... +..#.. +..#.. +.###. +.#### +.#### +##### + +##### +##.## +##.## +##.## +#..## +#..#. +..... + +##### +.#### +.#.## +.#.#. +.#... +.#... +..... + +..... +..#.. +..#.. +.##.. +.###. +.###. +##### + +##### +##### +##.## +##.## +##.#. +.#.#. +..... + +##### +##.## +##.## +#..## +#...# +#.... +..... + +..... +..... +..... +.#... +.##.# +.##.# +##### + +..... +.#... +.#... +.#.#. +.###. +.###. +##### + +..... +.#... +.#.#. +##.## +##.## +##### +##### + +##### +##### +#.##. +#..#. +#..#. +#..#. +..... + +##### +.#### +.##.# +.##.# +..#.# +..... +..... + +##### +##### +#.### +#.#.# +....# +..... +..... + +..... +..#.# +..### +#.### +##### +##### +##### + +##### +###.# +.##.# +.##.. +.##.. +.#... +..... + +..... +.#... +.##.. +###.# +##### +##### +##### + +..... +.#... +.#... +.#.#. +.#.## +##### +##### + +##### +.#### +.###. +..#.. +..#.. +..#.. +..... + +..... +.#... +.#... +.#.#. +.#.#. +.#### +##### + +..... +.#..# +.#..# +.#.## +.#.## +.#.## +##### + +##### +##.#. +.#... +.#... +..... +..... +..... + +##### +##### +##### +##.## +#..#. +#.... +..... + +##### +##### +#.#.# +#.#.. +..#.. +..... +..... + +##### +#.#.# +#.#.# +#.#.# +#.#.. +..... +..... + +..... +#.... +#.... +##... +##.#. +####. +##### + +..... +..... +#.#.. +#.#.# +#.### +#.### +##### + +##### +###.# +##..# +##..# +##... +.#... +..... + +..... +..... +#..#. +#..#. +#.##. +#.### +##### + +##### +##### +###.# +#.#.# +#.#.# +..#.# +..... + +..... +...#. +#..#. +#..## +#..## +##.## +##### + +..... +....# +#.#.# +#.#.# +#.#.# +###.# +##### + +..... +..... +..... +....# +.#..# +.#.## +##### + +..... +.#.#. +####. +##### +##### +##### +##### + +..... +..... +..... +..... +#.#.# +#.### +##### + +..... +.#.#. +.###. +.#### +##### +##### +##### + +##### +#.### +#..## +#..#. +...#. +...#. +..... + +##### +##### +###.# +##..# +.#..# +.#... +..... + +..... +..... +...#. +.#.## +##.## +##.## +##### + +..... +..#.. +#.#.. +###.. +###.. +###.# +##### + +..... +#.... +#.... +#..#. +#.##. +#.### +##### + +##### +##### +##### +#.##. +#..#. +...#. +..... + +##### +##### +.#### +.#### +.##.# +.#... +..... + +..... +.#.#. +.#.#. +.#.#. +##.## +##### +##### + +..... +#.... +#..#. +##.#. +####. +##### +##### + +##### +#.### +#.#.# +..#.# +..#.# +..... +..... + +##### +###.# +###.. +###.. +##... +#.... +..... + +..... +...#. +#..#. +#..## +#.### +#.### +##### + +..... +..... +#..#. +#..## +#..## +##.## +##### + +..... +....# +....# +.#..# +.#..# +##.## +##### + +##### +####. +##.#. +##.#. +##.#. +#..#. +..... + +##### +##.## +.#..# +.#..# +.#..# +....# +..... + +##### +#.### +#.### +..##. +..#.. +..... +..... + +..... +...#. +...#. +...#. +.#.## +.#.## +##### + +..... +.#... +.#... +###.. +###.# +##### +##### + +##### +##.## +.#..# +....# +....# +....# +..... + +##### +##.## +##.#. +.#... +.#... +..... +..... + +##### +##.## +#..## +#..## +#..## +#...# +..... + +..... +..#.. +#.#.. +###.. +####. +##### +##### + +..... +#.#.# +###.# +###.# +###.# +###.# +##### + +##### +.#### +.#### +.#### +.#.#. +.#... +..... + +..... +.#.#. +.#.#. +.#.## +##### +##### +##### + +..... +#...# +#.#.# +#.#.# +##### +##### +##### + +..... +.#... +.#.#. +.###. +####. +####. +##### + +##### +###.# +###.# +###.. +#.#.. +#.#.. +..... + +..... +..... +..... +..#.. +..#.# +#.#.# +##### + +##### +##.## +##.#. +#..#. +#..#. +#.... +..... + +..... +...#. +..### +..### +#.### +#.### +##### + +##### +####. +.#.#. +.#.#. +.#.#. +.#... +..... + +##### +###.# +#.#.# +#.#.. +#.#.. +..#.. +..... + +##### +##.## +##..# +#...# +#.... +..... +..... + +##### +.#### +..### +..### +..#.# +....# +..... + +##### +.##.# +..#.# +..#.# +..#.# +..#.# +..... + +##### +##### +.#### +.#### +..#.# +..#.. +..... + +##### +#.### +#..#. +..... +..... +..... +..... + +..... +..... +..#.# +..#.# +..#.# +.##.# +##### + +##### +##### +##.## +##.## +.#.#. +...#. +..... + +##### +##.## +#..## +#..## +#..#. +..... +..... + +##### +.#### +.#.#. +.#... +..... +..... +..... + +..... +.#... +.#... +.#..# +.#.## +.#### +##### + +..... +#.... +#...# +#.#.# +###.# +##### +##### + +..... +....# +#.#.# +#.#.# +#.#.# +#.### +##### + +##### +####. +.##.. +..#.. +..... +..... +..... + +##### +##### +##### +###.# +##... +.#... +..... + +##### +##### +##.## +#..#. +#..#. +..... +..... + +##### +##### +##### +##.#. +##.#. +#.... +..... + +..... +#..#. +#.##. +#.##. +##### +##### +##### + +##### +##### +.#### +..#.# +....# +..... +..... + +##### +#.#.# +..#.# +..#.. +..#.. +..... +..... + +##### +##.#. +##.#. +##... +#.... +..... +..... + +..... +..#.# +..#.# +.#### +.#### +##### +##### + +..... +#.... +#.... +##... +###.# +##### +##### + +##### +##.#. +##.#. +.#.#. +.#.#. +.#... +..... + +..... +.#... +##..# +##..# +###.# +###.# +##### + +..... +#...# +##.## +##.## +##.## +##.## +##### + +..... +.#... +.#... +.#... +.##.# +###.# +##### + +..... +....# +.#.## +.#.## +.#### +.#### +##### + +..... +.#... +##..# +##.## +##.## +##.## +##### + +..... +..... +..... +....# +.#..# +##.## +##### + +..... +.#.#. +##.#. +##.#. +##.#. +####. +##### + +##### +##### +###.# +###.# +#.#.# +..#.. +..... + +..... +..#.. +..#.. +..##. +..##. +#.##. +##### + +..... +..... +..... +....# +.#.## +.#### +##### + +..... +.#.#. +.#.#. +.#.#. +.###. +.###. +##### + +##### +##.## +##.## +##..# +#...# +#.... +..... + +##### +###.# +.#... +..... +..... +..... +..... + +##### +#.### +#.#.# +#.#.# +#...# +#...# +..... + +##### +###.# +.##.. +.##.. +.##.. +..#.. +..... + +##### +####. +####. +###.. +.#... +.#... +..... + +##### +####. +#.#.. +#.#.. +#.... +..... +..... + +##### +.#.## +.#.## +.#.## +.#..# +.#..# +..... + +##### +#.### +#..## +#..#. +..... +..... +..... + +##### +##### +#.### +#.##. +#.#.. +#.#.. +..... + +##### +.##.# +.#..# +.#..# +....# +..... +..... + +##### +##### +#.##. +#.##. +#.##. +..#.. +..... + +..... +..... +...#. +.#.#. +.#.#. +##.#. +##### + +..... +...#. +...#. +...## +..### +.#### +##### + +##### +##### +##### +###.# +.##.. +.#... +..... + +##### +##### +##.## +#...# +#.... +#.... +..... + +##### +####. +.###. +.#.#. +...#. +..... +..... + +..... +..... +..... +..#.. +.##.. +.###. +##### + +##### +###.# +##... +##... +.#... +..... +..... + +..... +..#.. +..#.. +.###. +.#### +##### +##### + +##### +.###. +.##.. +.##.. +.#... +.#... +..... + +..... +....# +#...# +#...# +##.## +##.## +##### + +##### +##.## +.#.#. +.#.#. +..... +..... +..... + +##### +#.### +#.### +#.### +#..## +...#. +..... + +##### +.##.# +.#..# +....# +....# +....# +..... + +..... +..... +.#... +.#.#. +.#### +.#### +##### + +..... +#.... +#.#.. +#.##. +####. +##### +##### + +##### +##.#. +##.#. +##.#. +##... +#.... +..... + +..... +.#.#. +##.#. +##.#. +##.## +##### +##### + +..... +.#.#. +.#.#. +.#.## +.#### +##### +##### + +..... +.#... +##.#. +##.## +##.## +##### +##### + +..... +..... +.#... +.#.#. +####. +####. +##### + +..... +....# +.#..# +##.## +##.## +##.## +##### + +##### +##### +##### +#.#.# +#.#.# +..#.. +..... + +..... +#...# +#...# +##.## +##.## +##.## +##### + +..... +..... +#...# +#.#.# +#.### +#.### +##### + +##### +.#### +.#### +.#.#. +..... +..... +..... + +..... +.#... +##... +##..# +##.## +##### +##### + +##### +.#### +.#.## +.#..# +..... +..... +..... + +##### +.#### +.##.# +.##.# +.#..# +.#... +..... + +..... +..... +..... +..... +#.#.. +#.#.# +##### + +..... +..... +...#. +...#. +.#.#. +.#.## +##### + +..... +..#.. +..#.. +#.#.. +#.#.. +#.#.# +##### + +..... +..... +..... +.#.#. +##.#. +##.## +##### + +..... +...#. +..##. +#.##. +#.### +##### +##### + +##### +##.## +##.## +##.#. +.#... +.#... +..... + +..... +..... +#.... +#.#.. +#.#.. +####. +##### + +..... +..... +...#. +.#.#. +##.## +##.## +##### + +..... +..... +.#..# +.##.# +.##.# +##### +##### + +..... +..#.. +.##.. +.##.. +.##.# +.#### +##### + +..... +.#..# +.##.# +.##.# +##### +##### +##### + +..... +..... +#..#. +#.### +#.### +#.### +##### + +..... +.#.#. +.#.#. +##.#. +##.#. +##.#. +##### + +##### +###.# +#.#.. +#.... +..... +..... +..... + +##### +##### +.#.## +.#.## +.#.## +....# +..... + +##### +#.### +#.#.# +#...# +....# +..... +..... + +##### +###.# +.##.# +..#.# +..#.# +..#.# +..... + +##### +###.# +.##.# +.##.. +..#.. +..#.. +..... + +##### +.##.# +.##.# +.#..# +..... +..... +..... + +##### +##### +.#### +.##.# +..#.. +..... +..... + +##### +#.### +#..## +...## +...#. +..... +..... + +##### +##### +##### +##### +#.### +..#.# +..... + +..... +....# +.#..# +.#..# +.#.## +##### +##### + +##### +##### +##### +##.## +##.## +#...# +..... + +..... +..... +..... +..#.. +.##.. +.##.# +##### + +##### +##### +####. +####. +.#.#. +...#. +..... + +..... +.#..# +.#.## +.#.## +##.## +##### +##### + +..... +..#.# +..#.# +..#.# +#.### +#.### +##### + +##### +##### +####. +##.#. +#..#. +#..#. +..... + +..... +..... +..... +.#.#. +.#.#. +.###. +##### + +..... +..#.. +#.#.. +#.#.# +##### +##### +##### + +##### +###.# +##..# +.#... +.#... +..... +..... + +##### +#.### +#.##. +#.##. +#.#.. +#.... +..... + +..... +#.... +#.... +#..#. +##.## +##### +##### + +##### +##### +.##.# +..#.# +..#.# +....# +..... + +..... +..... +#..#. +#.##. +#.### +#.### +##### + +..... +...#. +...## +#.### +#.### +##### +##### + +##### +##### +.###. +.#.#. +...#. +...#. +..... + +..... +..... +.#.#. +.#.#. +##.## +##.## +##### + +..... +...#. +..##. +..##. +..##. +.#### +##### + +..... +.#... +.#..# +.#..# +##..# +##.## +##### + +..... +#.#.. +#.#.. +#.#.. +#.#.# +###.# +##### + +##### +.###. +.###. +.###. +.#.#. +...#. +..... + +##### +##### +.#.## +.#.## +.#.#. +.#... +..... + +..... +.#... +.#.#. +.#.#. +.#.#. +.###. +##### + +##### +#.### +#.### +#.### +..##. +...#. +..... + +..... +..... +.#... +.#..# +.#..# +##.## +##### + +..... +..#.. +..#.# +.##.# +.##.# +.##.# +##### + +##### +##### +.#.## +...## +....# +..... +..... diff --git a/day-25/main.c b/day-25/main.c new file mode 100644 index 0000000..de17744 --- /dev/null +++ b/day-25/main.c @@ -0,0 +1,83 @@ +#include "aoc.h" + +typedef struct Pattern { + i8 heights[5]; +} Pattern; + +typedef DYNAMIC_ARRAY(Pattern) Patterns; + +static Pattern +parse_lock_or_key(Grid grid, bool *is_lock) { + *is_lock = true; + for (isize x = 0; x < grid.width; x++) { + if (grid.grid[x] != '#') { + *is_lock = false; + break; + } + } + + Pattern result = {0}; + ASSERT(grid.width == ARRAY_SIZE(result.heights)); + for (isize x = 0; x < grid.width; x++) { + i8 height = 0; + if (*is_lock) { + for (isize y = 0; y < grid.height && grid.grid[y * grid.width + x] == '#'; y++) { + height++; + } + } + else { + for (isize y = grid.height - 1; y >= 0 && grid.grid[y * grid.width + x] == '#'; y--) { + height++; + } + } + result.heights[x] = height - 1; + } + /* printf("Result: %d %d %d %d %d\n", result.heights[0], result.heights[1], result.heights[2], result.heights[3], result.heights[4]); */ + return result; +} + +static bool +fits(Pattern lock, Pattern key) { + for (isize x = 0; x < ARRAY_SIZE(lock.heights); x++) { + if (lock.heights[x] + key.heights[x] > 5) { + return false; + } + } + return true; +} + +int main(int argc, char **argv) { + Arena *arena = make_arena(Megabytes(1)); + Arena *temp = make_arena(Megabytes(1)); + str input = read_file(arena, argv[1]); + + Patterns locks = {0}; + Patterns keys = {0}; + + str entry; + while ((entry = str_next_token(&input, STR("\n\n"))).len > 0) { + Grid grid = parse_grid(entry, temp); + bool is_lock; + Pattern pattern = parse_lock_or_key(grid, &is_lock); + if (is_lock) { + *push(&locks, arena) = pattern; + } + else { + *push(&keys, arena) = pattern; + } + arena_clear(temp); + } + + i32 part_1 = 0; + for (isize lock_index = 0; lock_index < locks.len; lock_index++) { + Pattern lock = locks.data[lock_index]; + for (isize key_index = 0; key_index < keys.len; key_index++) { + Pattern key = keys.data[key_index]; + if (fits(lock, key)) { + part_1++; + /* printf("Lock %ld fits key %ld\n", lock_index, key_index); */ + } + } + } + printf("%d\n", part_1); +} diff --git a/day-25/test.txt b/day-25/test.txt new file mode 100644 index 0000000..8e29855 --- /dev/null +++ b/day-25/test.txt @@ -0,0 +1,39 @@ +##### +.#### +.#### +.#### +.#.#. +.#... +..... + +##### +##.## +.#.## +...## +...#. +...#. +..... + +..... +#.... +#.... +#...# +#.#.# +#.### +##### + +..... +..... +#.#.. +###.. +###.# +###.# +##### + +..... +..... +..... +#.... +#.#.. +#.#.# +#####