From c6c314ca308ce0dfe65868cad69f573b91adcd20 Mon Sep 17 00:00:00 2001 From: Andrew Tomaka Date: Wed, 25 Dec 2024 10:44:45 -0500 Subject: [PATCH] Day twenty-five Part one --- 25/input | 3999 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 25/main.rb | 69 + 2 files changed, 4068 insertions(+) create mode 100644 25/input create mode 100755 25/main.rb diff --git a/25/input b/25/input new file mode 100644 index 0000000..3bcd3bc --- /dev/null +++ b/25/input @@ -0,0 +1,3999 @@ +..... +#...# +#...# +##..# +##..# +###.# +##### + +..... +..... +#..#. +#..## +#.### +##### +##### + +..... +..... +.#.#. +####. +##### +##### +##### + +..... +....# +...## +..### +.#### +##### +##### + +..... +....# +....# +..#.# +.##.# +.#### +##### + +##### +##### +##### +####. +##.#. +#..#. +..... + +##### +##### +#.### +#..## +#..## +....# +..... + +..... +#.... +#.... +##... +##... +###.# +##### + +..... +#.#.# +#.### +##### +##### +##### +##### + +..... +..... +..#.. +#.#.. +#.#.. +####. +##### + +..... +...#. +.#.#. +.#.#. +.#.#. +.#### +##### + +##### +####. +.###. +..##. +...#. +..... +..... + +..... +#.#.. +#.#.. +###.. +###.# +###.# +##### + +..... +..... +..... +#.#.. +#.#.# +###.# +##### + +..... +..... +..... +...#. +..### +#.### +##### + +##### +##### +#.### +#.### +#..#. +#..#. +..... + +..... +..... +.#... +.#... +###.# +##### +##### + +##### +.#### +..### +..#.# +..#.. +..... +..... + +##### +#.### +#.##. +#..#. +...#. +..... +..... + +..... +..... +#..#. +#.### +#.### +##### +##### + +##### +.###. +..##. +..##. +..##. +..#.. +..... + +..... +..#.. +..#.. +.##.. +###.# +###.# +##### + +..... +.#..# +.##.# +.##.# +###.# +##### +##### + +..... +....# +..#.# +..#.# +.#### +.#### +##### + +##### +#.### +#.### +#..## +#...# +....# +..... + +##### +.#### +.##.# +.##.# +.#... +.#... +..... + +..... +..... +....# +#..## +##.## +##.## +##### + +##### +#.### +..### +...## +...#. +...#. +..... + +##### +##### +####. +#.#.. +#.#.. +#.#.. +..... + +##### +##### +##### +##### +.#.#. +..... +..... + +##### +###.# +##... +##... +#.... +..... +..... + +##### +#.### +#..## +#..#. +#..#. +..... +..... + +..... +..... +.#..# +##..# +##..# +###.# +##### + +##### +####. +#.#.. +#.#.. +..... +..... +..... + +..... +#.... +#.#.# +#.#.# +#.### +##### +##### + +##### +.#### +..### +..### +..### +...#. +..... + +..... +#.#.. +###.. +####. +##### +##### +##### + +##### +####. +####. +####. +##.#. +#.... +..... + +##### +#.### +#.### +#.##. +#..#. +#.... +..... + +##### +##### +##### +#.### +#..#. +#..#. +..... + +..... +.#... +##... +##.#. +##.#. +##.## +##### + +..... +..... +...#. +..##. +.###. +##### +##### + +..... +..#.# +..#.# +..#.# +#.### +#.### +##### + +##### +.#### +.#### +.#### +..### +...#. +..... + +..... +#.... +#...# +#...# +##.## +##### +##### + +##### +####. +##.#. +#.... +..... +..... +..... + +##### +#.### +#..## +#...# +#.... +..... +..... + +##### +##### +###.# +.#..# +.#..# +.#..# +..... + +##### +.##.# +.##.# +.#... +.#... +..... +..... + +..... +.#.#. +##.#. +##### +##### +##### +##### + +##### +####. +####. +####. +.#.#. +.#.#. +..... + +..... +..... +..#.. +..#.. +..#.. +.##.# +##### + +..... +#.#.# +#.#.# +#.#.# +###.# +##### +##### + +##### +##### +#.##. +#.#.. +#.#.. +#.#.. +..... + +##### +##.## +.#.#. +...#. +...#. +..... +..... + +..... +..... +.#..# +##..# +##.## +##.## +##### + +..... +....# +....# +....# +#...# +#.#.# +##### + +..... +.#... +.##.# +.##.# +.##.# +.##.# +##### + +..... +#..#. +#.##. +#.##. +#.### +#.### +##### + +##### +##### +##.## +#..## +....# +..... +..... + +..... +.#..# +##..# +###.# +###.# +##### +##### + +##### +.#.## +...## +....# +....# +..... +..... + +..... +..... +.#.#. +.###. +.#### +##### +##### + +..... +..... +..... +.#... +.#... +.##.# +##### + +##### +##### +###.# +###.# +#.#.# +#.#.# +..... + +..... +#.... +#...# +#.#.# +#.#.# +##### +##### + +..... +.#... +.#... +.##.. +###.. +####. +##### + +..... +..... +#.... +#.#.# +###.# +###.# +##### + +##### +####. +###.. +#.#.. +..#.. +..#.. +..... + +..... +#.#.. +#.#.. +#.#.. +#.#.. +###.# +##### + +##### +#.### +#.### +#.##. +#..#. +...#. +..... + +..... +#...# +#..## +#..## +##.## +##### +##### + +##### +##### +##### +###.# +###.. +.#... +..... + +##### +#.#.# +#.#.# +#.#.# +#.#.. +#.#.. +..... + +##### +.#.## +.#.## +.#.## +....# +....# +..... + +..... +..... +...#. +...#. +#..#. +#.##. +##### + +..... +#.#.. +#.#.. +###.. +####. +####. +##### + +..... +.#... +.#..# +.##.# +##### +##### +##### + +##### +##### +#.### +..### +...## +...#. +..... + +##### +###.# +#.#.# +#.#.# +#.#.. +#.... +..... + +..... +.#... +.#... +###.. +###.. +###.# +##### + +..... +..#.. +#.#.. +###.# +###.# +##### +##### + +##### +####. +##.#. +##... +#.... +#.... +..... + +##### +####. +##.#. +.#.#. +.#... +..... +..... + +##### +##### +##### +####. +#.#.. +#.#.. +..... + +##### +#.##. +..##. +..##. +...#. +..... +..... + +..... +....# +#...# +#...# +##.## +##.## +##### + +##### +###.# +#.#.# +#.#.. +#.... +..... +..... + +##### +.##.# +.##.# +..#.# +..#.# +..#.. +..... + +..... +#.... +#.... +#.#.. +#.#.. +#.##. +##### + +..... +..... +....# +#.#.# +#.#.# +#.#.# +##### + +##### +#.### +#.#.# +#.#.# +..#.# +..... +..... + +..... +#...# +#...# +#...# +##..# +##.## +##### + +..... +.#..# +.#..# +.#.## +.#.## +##.## +##### + +##### +###.# +.##.# +.##.. +.#... +..... +..... + +..... +..... +#.... +#..#. +##.#. +##.#. +##### + +..... +...#. +#..#. +#..## +#.### +##### +##### + +##### +##### +#.### +#..## +#...# +....# +..... + +##### +##.#. +##.#. +##.#. +.#.#. +.#... +..... + +##### +##.#. +.#.#. +.#.#. +...#. +..... +..... + +##### +###.# +.##.# +.##.# +.##.# +..#.. +..... + +##### +.#### +..#.# +..#.# +..... +..... +..... + +##### +.#.## +.#.#. +.#... +..... +..... +..... + +##### +####. +#.##. +..##. +..##. +...#. +..... + +##### +#.##. +..#.. +..#.. +..#.. +..... +..... + +##### +.#### +.###. +.#.#. +.#.#. +...#. +..... + +..... +..... +..#.. +..#.# +..#.# +#.#.# +##### + +##### +#.### +..### +..##. +..#.. +..#.. +..... + +..... +..... +..... +#...# +#.#.# +#.#.# +##### + +..... +..#.. +..##. +#.##. +##### +##### +##### + +..... +....# +..#.# +..#.# +#.### +##### +##### + +##### +###.# +.##.. +..#.. +..#.. +..... +..... + +##### +###.# +##..# +##..# +.#..# +....# +..... + +..... +..#.. +..#.# +#.### +#.### +##### +##### + +##### +.###. +.###. +.##.. +..#.. +..... +..... + +##### +.#.## +.#..# +.#... +.#... +..... +..... + +..... +..... +..#.. +.###. +.###. +##### +##### + +##### +##.## +##..# +##..# +#...# +#...# +..... + +##### +.#### +.#### +.#### +.#.## +.#..# +..... + +##### +##### +#.##. +#.##. +#..#. +#.... +..... + +##### +#.### +#..#. +#..#. +#.... +..... +..... + +..... +..... +...#. +#..#. +#.##. +#.##. +##### + +..... +..... +..... +...#. +#..#. +##.## +##### + +##### +#.### +#.### +#..## +....# +....# +..... + +..... +.#... +.#... +.##.. +.##.. +####. +##### + +##### +##### +##.## +.#..# +.#..# +....# +..... + +..... +#...# +#..## +#.### +#.### +##### +##### + +##### +#.### +#.### +..### +...## +...#. +..... + +..... +..#.. +.###. +.###. +####. +####. +##### + +..... +..#.. +..#.. +..#.. +#.#.. +#.##. +##### + +..... +.#... +.#.#. +.#.#. +.#.#. +.###. +##### + +..... +..#.. +.##.# +.##.# +.#### +##### +##### + +..... +#.... +##... +##... +##..# +###.# +##### + +..... +.#... +##..# +###.# +###.# +##### +##### + +..... +..#.. +..#.# +..#.# +#.#.# +#.#.# +##### + +##### +##### +.#### +.##.# +.##.. +.#... +..... + +##### +###.# +.##.# +.##.# +.#..# +....# +..... + +..... +..... +..... +#..#. +##.#. +####. +##### + +..... +...#. +...## +..### +..### +.#### +##### + +##### +##### +#.### +#.#.# +#.#.# +....# +..... + +##### +####. +###.. +##... +#.... +#.... +..... + +..... +..#.. +.##.. +.##.# +.##.# +##### +##### + +..... +#...# +#...# +##..# +##..# +##.## +##### + +..... +...#. +...#. +...#. +.#.#. +.#.#. +##### + +##### +###.# +###.# +###.# +###.. +.#... +..... + +..... +...#. +#.##. +#.### +#.### +##### +##### + +##### +#.### +#..#. +#..#. +..... +..... +..... + +##### +##### +.#.## +....# +....# +....# +..... + +##### +##### +##### +.###. +.#.#. +.#... +..... + +##### +##### +#.#.# +#.#.. +..... +..... +..... + +..... +#..#. +##.#. +##.#. +##### +##### +##### + +..... +..#.. +..#.. +..#.. +.##.# +##### +##### + +##### +###.# +#.#.# +#...# +#...# +..... +..... + +##### +#.##. +#..#. +#..#. +..... +..... +..... + +..... +..... +....# +.#..# +.##.# +.#### +##### + +..... +...#. +#..## +#..## +#..## +##.## +##### + +##### +####. +###.. +#.#.. +#.#.. +#.#.. +..... + +##### +###.# +###.# +.##.# +.##.# +..#.# +..... + +..... +..#.. +..#.. +..#.. +.##.. +####. +##### + +##### +##.## +#..## +#..## +#..## +...#. +..... + +##### +##### +##.## +##.## +.#.## +...#. +..... + +##### +###.# +###.. +###.. +##... +#.... +..... + +##### +##.## +##.#. +##.#. +.#.#. +.#.#. +..... + +..... +....# +....# +#..## +##.## +##.## +##### + +##### +.###. +.###. +.###. +..#.. +..... +..... + +##### +#.### +#.##. +...#. +...#. +...#. +..... + +##### +###.# +##..# +.#..# +.#... +.#... +..... + +..... +#.... +#.... +#..#. +#.### +##### +##### + +..... +..#.. +..#.. +.###. +##### +##### +##### + +##### +##.## +##.## +##.#. +##.#. +.#.#. +..... + +##### +##### +#.#.# +#.#.# +..#.# +..#.. +..... + +..... +...#. +#..#. +#..#. +#.### +##### +##### + +##### +.##.# +.##.. +..#.. +..#.. +..#.. +..... + +##### +.#.#. +.#.#. +.#.#. +.#... +..... +..... + +..... +..... +..... +..... +.#..# +.#.## +##### + +##### +##### +##### +#.#.# +#.#.# +#.#.# +..... + +##### +####. +.###. +.###. +.#.#. +...#. +..... + +##### +##### +###.# +.##.# +.##.# +.#..# +..... + +..... +..... +#.... +#.#.# +###.# +##### +##### + +..... +..#.. +..#.. +..#.. +#.##. +##### +##### + +##### +##### +##.## +##.## +##.#. +#..#. +..... + +..... +....# +..#.# +..### +..### +.#### +##### + +##### +.##.# +.##.. +.##.. +..#.. +..#.. +..... + +##### +#.### +#.#.# +#...# +#.... +..... +..... + +##### +##### +####. +#.#.. +#.... +#.... +..... + +##### +##### +##.## +.#.## +.#.#. +...#. +..... + +##### +####. +#.##. +#.#.. +#.#.. +..#.. +..... + +##### +##### +.#### +.##.# +..#.# +..... +..... + +..... +..... +..#.. +..#.# +.#### +.#### +##### + +##### +##.## +##..# +#...# +..... +..... +..... + +##### +.##.# +.#..# +.#..# +.#... +..... +..... + +..... +...#. +#.##. +#.##. +#.### +#.### +##### + +##### +###.# +##... +.#... +..... +..... +..... + +##### +##### +###.# +.##.# +..#.# +....# +..... + +##### +###.# +###.. +.##.. +.##.. +..#.. +..... + +..... +...#. +.#.#. +.#.## +##.## +##### +##### + +..... +.#... +.#... +##..# +###.# +###.# +##### + +..... +....# +#...# +#.#.# +#.#.# +#.#.# +##### + +##### +.##.# +.##.# +..#.# +....# +..... +..... + +..... +.#.#. +.#.#. +.#.#. +##.## +##.## +##### + +..... +.#... +.##.. +.##.. +.##.# +.##.# +##### + +..... +..... +..#.# +.#### +.#### +##### +##### + +..... +.#... +.#... +.##.# +.##.# +##### +##### + +..... +...#. +#..#. +#.### +#.### +##### +##### + +..... +...#. +...#. +#..#. +#..#. +##.## +##### + +##### +##.#. +##... +.#... +.#... +..... +..... + +##### +##### +###.# +##..# +##... +.#... +..... + +##### +####. +####. +##.#. +#.... +#.... +..... + +..... +..... +.#.#. +.#.## +##.## +##### +##### + +##### +#.#.# +#.#.. +#.#.. +#.#.. +#.... +..... + +..... +..... +....# +....# +..#.# +.#### +##### + +##### +##.## +##.## +##.#. +#..#. +..... +..... + +##### +##.## +##.## +#...# +#.... +..... +..... + +..... +...#. +...#. +.#.#. +.#.#. +.#.## +##### + +..... +.#.#. +##.#. +##.#. +##.## +##### +##### + +..... +#...# +#...# +##..# +###.# +##### +##### + +..... +..... +....# +....# +....# +.#.## +##### + +..... +...#. +.#.#. +.###. +.###. +##### +##### + +##### +##### +####. +#.##. +#.#.. +#.#.. +..... + +..... +....# +..#.# +.##.# +##### +##### +##### + +##### +#.### +#.### +#.##. +#.#.. +#.#.. +..... + +..... +.#... +.#... +.#..# +.##.# +##### +##### + +..... +..#.# +..#.# +..#.# +#.#.# +#.#.# +##### + +##### +##.#. +##.#. +##.#. +.#.#. +.#.#. +..... + +..... +..... +#..#. +#..#. +#..## +#.### +##### + +..... +....# +#...# +#..## +#.### +#.### +##### + +##### +####. +####. +.###. +.#.#. +...#. +..... + +..... +..... +..... +..#.# +..#.# +.##.# +##### + +..... +..... +..... +..... +#.#.# +###.# +##### + +..... +.#.#. +.#.#. +.###. +.###. +##### +##### + +..... +#.... +#.... +#..#. +##.#. +##### +##### + +##### +.#### +.#### +.#.## +.#.## +...#. +..... + +..... +.#... +.#... +.#... +###.. +####. +##### + +..... +..#.. +..#.# +..#.# +..### +.#### +##### + +##### +##.## +##.## +#...# +#.... +#.... +..... + +..... +....# +.#.## +.#### +##### +##### +##### + +..... +..... +..#.. +.##.. +####. +####. +##### + +##### +.#.## +...## +...#. +...#. +...#. +..... + +..... +..#.. +..#.. +..#.. +#.##. +#.##. +##### + +##### +#.#.# +#.#.# +..... +..... +..... +..... + +##### +##### +##### +##.## +#...# +#...# +..... + +..... +..... +#.... +#...# +#.#.# +###.# +##### + +##### +#.### +#.### +..##. +...#. +..... +..... + +##### +##### +##.#. +.#.#. +.#.#. +..... +..... + +..... +...#. +...## +..### +.#### +##### +##### + +..... +.#... +.#... +##... +###.. +###.# +##### + +..... +.#... +.#..# +.#..# +.#.## +.#.## +##### + +..... +..... +....# +.#..# +.#.## +.#### +##### + +..... +..... +.#..# +.#.## +.#.## +.#.## +##### + +..... +.#... +##..# +##..# +##.## +##.## +##### + +##### +##### +.#### +.###. +.###. +..#.. +..... + +##### +#.### +#.##. +#.##. +#.##. +...#. +..... + +..... +#.#.. +#.#.. +###.# +###.# +###.# +##### + +..... +..#.. +..##. +..##. +..##. +.###. +##### + +..... +...#. +...#. +...#. +...#. +.#.#. +##### + +##### +#.### +#.### +#.##. +#.##. +..#.. +..... + +..... +....# +...## +.#.## +.#.## +##.## +##### + +##### +##### +.#### +.###. +.#.#. +.#.#. +..... + +##### +##### +#.#.# +#...# +#.... +#.... +..... + +..... +#.#.# +#.#.# +#.#.# +##### +##### +##### + +..... +.#... +.##.. +####. +##### +##### +##### + +..... +..#.# +..### +#.### +#.### +#.### +##### + +##### +##### +##### +###.# +##... +.#... +..... + +##### +##### +#.#.# +..#.# +..#.# +..... +..... + +##### +####. +####. +####. +#.#.. +#.#.. +..... + +##### +#.### +#.#.# +#...# +....# +....# +..... + +..... +...#. +...#. +...## +...## +#.### +##### + +##### +.###. +.###. +.###. +..##. +...#. +..... + +..... +..... +.#..# +.#..# +.##.# +##### +##### + +##### +#.#.# +#.#.# +#.#.# +..#.# +..#.. +..... + +##### +##.## +.#.## +...## +...#. +...#. +..... + +##### +####. +##.#. +##.#. +.#.#. +..... +..... + +##### +##### +##.## +#...# +#...# +#.... +..... + +##### +#.### +#.### +#.##. +#..#. +#..#. +..... + +##### +###.# +###.# +#.#.# +#.#.# +#.#.# +..... + +##### +##### +##### +#.### +#.### +...#. +..... + +..... +.#... +.#.#. +##.#. +##.#. +##### +##### + +..... +..... +..#.. +..##. +..##. +.###. +##### + +..... +..... +...#. +..### +..### +#.### +##### + +##### +##.## +##.## +##..# +##..# +#.... +..... + +##### +#.### +#.##. +..##. +..#.. +..#.. +..... + +..... +..#.. +.##.. +.##.. +.##.# +###.# +##### + +##### +.#### +.#### +.##.# +.#..# +..... +..... + +##### +#.### +..##. +...#. +...#. +...#. +..... + +##### +#.### +#..#. +...#. +..... +..... +..... + +..... +...#. +#.### +#.### +##### +##### +##### + +..... +..#.# +..#.# +#.#.# +#.### +##### +##### + +##### +#.### +#.#.# +#.#.# +#.#.. +#.... +..... + +..... +..#.. +..#.. +#.#.. +#.#.# +###.# +##### + +##### +#.### +#.### +#..#. +#..#. +..... +..... + +..... +.#... +.#.#. +####. +####. +####. +##### + +##### +##.#. +##.#. +##.#. +##... +.#... +..... + +##### +.#### +..##. +..##. +..#.. +..#.. +..... + +##### +#.#.# +#.#.# +#...# +#...# +..... +..... + +..... +..... +#...# +#...# +#...# +##.## +##### + +..... +....# +....# +...## +..### +.#### +##### + +##### +##### +#.### +#.#.# +#.#.# +#.... +..... + +..... +#.#.. +#.#.. +#.#.. +#.##. +#.##. +##### + +##### +##.## +#..## +#..## +...#. +...#. +..... + +..... +..#.. +..#.. +.###. +.#### +##### +##### + +##### +#.### +#.### +#.#.# +#.#.# +#...# +..... + +..... +.#... +.#..# +.#..# +.##.# +###.# +##### + +..... +..... +.#... +.#..# +.##.# +.##.# +##### + +##### +#.#.# +#...# +#...# +....# +....# +..... + +..... +.#..# +.#.## +##.## +##.## +##### +##### + +##### +##### +##.#. +.#... +.#... +..... +..... + +..... +..... +#.#.. +####. +####. +##### +##### + +..... +..... +....# +#...# +#...# +#.#.# +##### + +##### +####. +####. +####. +####. +#.#.. +..... + +..... +..... +..... +..#.. +..##. +.###. +##### + +..... +..... +..#.. +.##.. +.###. +.#### +##### + +..... +..... +..#.. +#.##. +#.##. +#.##. +##### + +..... +...#. +.#.## +.#.## +.#.## +##.## +##### + +##### +.#### +.#### +.##.# +.##.# +..#.. +..... + +..... +.#... +.##.. +.###. +.#### +.#### +##### + +..... +#..#. +#..#. +##.#. +##### +##### +##### + +..... +..#.. +..#.. +.##.. +.###. +####. +##### + +##### +##### +####. +##.#. +.#.#. +.#.#. +..... + +##### +###.# +#.#.# +#.#.# +#.#.# +#.#.. +..... + +##### +##### +##.## +#...# +....# +..... +..... + +..... +....# +...## +#.### +##### +##### +##### + +..... +...#. +...#. +#..#. +#.##. +####. +##### + +..... +...#. +.#.#. +.###. +####. +####. +##### + +..... +.#... +.#... +.##.# +.##.# +###.# +##### + +##### +####. +####. +.##.. +.#... +.#... +..... + +##### +.###. +.###. +.#.#. +.#.#. +.#.#. +..... + +..... +..... +#.#.. +####. +##### +##### +##### + +##### +##### +##### +###.# +.##.# +..#.# +..... + +..... +.#... +.#... +###.. +###.# +###.# +##### + +..... +.#... +.#... +.##.# +.#### +##### +##### + +##### +###.# +#.#.# +....# +..... +..... +..... + +##### +##.## +##.## +##.## +#..## +#..#. +..... + +##### +#.### +..### +..#.# +..#.# +..#.# +..... + +..... +..... +..... +...#. +..### +.#### +##### + +##### +##### +#.### +#.### +...## +....# +..... + +##### +.#### +.#.## +.#.#. +...#. +..... +..... + +##### +#.#.# +..#.# +..#.# +..#.# +..... +..... + +##### +.###. +.###. +.##.. +.#... +.#... +..... + +..... +..... +.#..# +.#.## +.#### +.#### +##### + +..... +#.... +#.... +#.#.. +###.. +###.# +##### + +..... +.#... +.#.#. +.#.#. +.#.#. +####. +##### + +##### +##### +#.### +#.### +...#. +...#. +..... + +..... +...#. +#..#. +#..## +##.## +##### +##### + +..... +..#.. +..#.. +.###. +.#### +.#### +##### + +..... +#.... +#.... +#..#. +##.#. +##.## +##### + +..... +..... +..... +.#... +.##.# +.##.# +##### + +##### +###.# +.##.# +.##.# +.#..# +.#... +..... + +##### +.#.## +.#.## +.#.## +...#. +...#. +..... + +..... +#.... +#.#.. +#.#.. +###.# +###.# +##### + +..... +#.#.. +#.##. +#.##. +#.### +##### +##### + +..... +..... +#.... +#..#. +##.#. +##.## +##### + +##### +####. +####. +.###. +..#.. +..#.. +..... + +##### +.###. +.###. +.###. +.###. +..#.. +..... + +##### +##### +#.### +..### +..##. +..#.. +..... + +##### +##.## +#...# +#...# +#...# +....# +..... + +..... +..... +.#... +.##.# +.#### +.#### +##### + +..... +..... +..#.# +#.#.# +#.### +##### +##### + +##### +##### +##.## +##.## +.#.#. +.#... +..... + +..... +#.... +#.#.. +#.#.# +##### +##### +##### + +##### +###.# +.#..# +.#..# +.#... +..... +..... + +..... +.#... +.#..# +###.# +##### +##### +##### + +##### +##### +.#.## +....# +..... +..... +..... + +..... +.#.#. +.#.#. +##.#. +##.#. +##### +##### + +##### +##### +.#### +.##.# +..#.# +....# +..... + +..... +#...# +##..# +##..# +##.## +##.## +##### + +##### +##### +##### +.#.## +...#. +...#. +..... + +..... +..... +.#... +.##.. +.##.. +####. +##### + +##### +#.### +#.### +..#.# +..... +..... +..... + +##### +##.#. +##.#. +##.#. +##... +#.... +..... + +..... +#...# +#...# +#...# +#.#.# +###.# +##### + +##### +##### +##### +###.# +##..# +#.... +..... + +##### +#.##. +#.#.. +#.#.. +#.#.. +#.... +..... + +..... +..... +..#.. +#.#.# +#.### +##### +##### + +..... +.#..# +.#.## +.#.## +##.## +##### +##### + +..... +.#... +.#..# +.#.## +.#.## +.#.## +##### + +##### +##.## +#..## +#..#. +#..#. +...#. +..... + +##### +##### +.##.# +.##.. +.#... +..... +..... + +..... +....# +...## +..### +#.### +#.### +##### + +##### +##### +##### +####. +##.#. +#.... +..... + +..... +.#... +.#... +##.#. +####. +##### +##### + +##### +###.# +###.# +.##.. +..#.. +..... +..... + +..... +..... +...#. +...#. +..### +#.### +##### + +..... +..... +..#.. +..#.# +#.### +#.### +##### + +##### +####. +.##.. +.#... +.#... +..... +..... + +..... +.#.#. +.#.#. +.#.#. +.#.## +.#### +##### + +##### +##### +##.## +.#.#. +.#... +.#... +..... + +##### +#.### +#..#. +#..#. +#..#. +#.... +..... + +##### +#.### +#.#.# +#...# +..... +..... +..... + +..... +#.#.. +#.#.# +#.#.# +##### +##### +##### + +##### +##### +##.## +#..## +#...# +....# +..... + +..... +#.... +##... +##.#. +##### +##### +##### + +##### +###.# +###.# +###.# +#.#.# +#.#.# +..... + +##### +.###. +.#.#. +.#.#. +..... +..... +..... + +..... +..#.. +..#.# +..#.# +#.#.# +#.### +##### + +##### +##### +####. +#.##. +#.#.. +..... +..... + +..... +..... +..#.. +.##.. +###.# +###.# +##### + +..... +...#. +...#. +.#.## +.#### +##### +##### + +..... +..... +.#... +.#... +.#.#. +####. +##### + +..... +..... +..... +.#..# +.#.## +##.## +##### + +..... +....# +...## +.#.## +##.## +##### +##### + +..... +#...# +#..## +#..## +#.### +#.### +##### + +##### +##### +##.#. +##.#. +.#.#. +..... +..... + +##### +##.## +##..# +.#..# +....# +..... +..... + +..... +..... +..#.. +#.#.. +#.#.. +###.# +##### + +##### +#.### +#..## +#...# +#...# +#.... +..... + +##### +#.### +#..## +#..#. +#..#. +#..#. +..... + +..... +#.... +#.... +#..#. +#.### +#.### +##### + +##### +#.### +#.#.# +#.#.# +#...# +....# +..... + +..... +..... +..... +.#..# +.##.# +###.# +##### + +##### +##.## +.#.## +.#.## +.#.## +...#. +..... + +##### +#.#.# +#.#.. +#.#.. +#.#.. +..#.. +..... + +..... +.#... +.#... +.#..# +.#.## +##.## +##### + +..... +.#.#. +.#.#. +.#.## +.#.## +.#### +##### + +..... +#.#.. +###.. +###.. +####. +##### +##### + +..... +....# +....# +....# +...## +.#.## +##### + +..... +..... +..... +....# +..#.# +.##.# +##### + +..... +.#..# +.##.# +.##.# +##### +##### +##### + +..... +..... +.#... +.#... +##..# +##.## +##### + +##### +##### +####. +###.. +##... +#.... +..... + +..... +...#. +#..## +##.## +##### +##### +##### + +##### +##.## +##.## +.#.## +.#.## +....# +..... + +..... +..... +.#... +.#.#. +##.#. +##.## +##### + +..... +..... +.#... +.#.#. +.#.#. +.#.## +##### + +..... +#.#.# +#.#.# +#.#.# +#.### +#.### +##### + +..... +...#. +...#. +#..#. +##.#. +##.#. +##### + +##### +####. +###.. +##... +##... +.#... +..... + +##### +####. +.##.. +.#... +..... +..... +..... + +..... +.#.#. +.#.#. +.###. +####. +####. +##### + +..... +..... +....# +#...# +#.#.# +###.# +##### + +..... +..... +..#.# +#.#.# +#.#.# +##### +##### + +##### +##.## +##.## +##..# +#.... +..... +..... + +..... +...#. +#..#. +#..#. +#..#. +#.### +##### + +##### +##.## +##.## +#..## +...#. +...#. +..... + +..... +....# +.#.## +.#.## +##.## +##### +##### + +##### +##.## +##.#. +.#.#. +.#.#. +.#... +..... + +##### +##### +##### +##### +####. +#.#.. +..... + +##### +##### +##.#. +#.... +#.... +#.... +..... + +..... +#..#. +#.### +#.### +#.### +##### +##### + +##### +#.##. +#.#.. +#.#.. +..#.. +..#.. +..... + +..... +..... +.#... +.#... +.##.# +.##.# +##### + +##### +##### +.###. +.##.. +..#.. +..#.. +..... + +##### +##### +##.## +##..# +##..# +#.... +..... + +##### +.#.## +.#.## +.#.## +.#.## +.#..# +..... + +##### +##.## +##.## +##.## +##.## +.#..# +..... + +..... +..#.. +..#.. +..#.. +..#.. +.##.# +##### + +..... +.#... +.#... +###.# +###.# +###.# +##### + +..... +..#.. +..#.. +..##. +.#### +.#### +##### + +..... +.#... +.##.. +.###. +.###. +##### +##### + +##### +##### +#.### +#.##. +#..#. +...#. +..... + +..... +#..#. +#..## +#..## +##.## +##.## +##### + +##### +.#### +.#.## +....# +..... +..... +..... + +##### +####. +#.##. +#.##. +#..#. +..... +..... + +##### +###.# +#.#.# +#.#.# +....# +....# +..... + +##### +#.### +#.### +#.#.# +..... +..... +..... + +##### +##### +##### +##.#. +#.... +#.... +..... + +..... +...#. +..##. +#.##. +#.##. +####. +##### + +..... +..... +..... +.#..# +.#.## +.#.## +##### + +..... +...#. +.#.#. +.#.#. +.#.## +##### +##### + +##### +.#### +.#### +.#.#. +...#. +...#. +..... + +##### +##.#. +##.#. +##... +##... +#.... +..... + +..... +..... +..#.. +..##. +..##. +.#### +##### + +##### +####. +####. +.##.. +.##.. +..#.. +..... + +##### +.#### +.##.# +.##.. +.#... +..... +..... + +..... +..... +....# +.#..# +.#..# +.#.## +##### + +##### +##.#. +#..#. +#..#. +#.... +..... +..... + +..... +.#..# +.#.## +.#.## +.#.## +##### +##### + +##### +##### +##.## +##.## +.#..# +..... +..... + +##### +##### +##### +#.##. +..#.. +..#.. +..... + +##### +#.### +...## +....# +..... +..... +..... + +##### +##### +#.#.# +#.#.. +..#.. +..... +..... + +##### +###.# +.##.# +.##.. +.#... +.#... +..... + +..... +..#.. +..#.. +#.#.# +#.#.# +#.### +##### + +..... +.#... +.#... +.##.. +.###. +##### +##### + +..... +#..#. +#..#. +#..#. +##.#. +##.## +##### + +..... +.#..# +.##.# +.##.# +.#### +##### +##### + +..... +..... +.#.#. +.#### +.#### +.#### +##### + +..... +.#... +.#.#. +.###. +.#### +##### +##### + +..... +#..#. +#..## +#..## +#..## +##.## +##### + +..... +..#.. +#.#.. +####. +####. +####. +##### + +##### +##### +##.## +##.## +#..## +....# +..... + +##### +.##.# +.##.. +.#... +.#... +..... +..... + +##### +##### +.#### +.#.#. +...#. +...#. +..... + +..... +.#... +.#.#. +.#.#. +##### +##### +##### + +..... +#.#.. +#.##. +#.### +#.### +##### +##### + +##### +.#.## +.#..# +.#... +..... +..... +..... + +##### +#.### +#.### +#..#. +#.... +#.... +..... + +##### +##### +##.## +##.#. +##... +.#... +..... + +##### +##.## +##.## +##.## +##..# +.#..# +..... + +..... +..... +.#.#. +.#.#. +.#.## +.#### +##### + +##### +#.#.# +..#.# +..#.# +..... +..... +..... + +##### +##### +###.# +##..# +#.... +..... +..... + +..... +..... +.#... +.#.#. +.#.#. +.#.#. +##### + +##### +.#.## +...## +...## +....# +....# +..... + +##### +##### +.#### +.#### +..#.# +..#.. +..... + +..... +..... +..#.. +..#.. +..#.# +#.### +##### + +##### +.#### +.#.## +.#.#. +.#... +..... +..... + +##### +##.#. +.#... +..... +..... +..... +..... + +##### +##### +##### +.###. +.###. +.#.#. +..... + +..... +...#. +.#.#. +##.#. +##.#. +##### +##### + +##### +####. +#.#.. +#.#.. +..#.. +..#.. +..... \ No newline at end of file diff --git a/25/main.rb b/25/main.rb new file mode 100755 index 0000000..1e22e01 --- /dev/null +++ b/25/main.rb @@ -0,0 +1,69 @@ +#!/usr/bin/env ruby + +class Component < Array + def self.from_line(line) + new(line.map(&:chars)[1..-2].transpose.map { _1.count("#") }) + end +end + +class Lock < Component + def accepts?(key) = zip(key).all? { _1.sum <= 5 } +end + +Key = Class.new(Component) + +def create(line) + (line.first == "#####" ? Lock : Key).from_line(line) +end + +input = (ARGV.first.nil? ? DATA : ARGF) + .readlines(chomp: true) + .slice_when { |a, b| b.empty? } + .map { _1.reject { |a| a.empty? } } + .map(&method(:create)) + +locks, keys = input.partition { _1.is_a?(Lock) } + +p locks.sum { |lock| keys.count { lock.accepts?(_1) } } + + +__END__ +##### +.#### +.#### +.#### +.#.#. +.#... +..... + +##### +##.## +.#.## +...## +...#. +...#. +..... + +..... +#.... +#.... +#...# +#.#.# +#.### +##### + +..... +..... +#.#.. +###.. +###.# +###.# +##### + +..... +..... +..... +#.... +#.#.. +#.#.# +#####