advent-of-code-2024

My solutions to AoC 2024
Log | Files | Refs

commit c6567752c59474c54d63edcfc1a3105d57f5a8b2
parent 97d18b948329b91bd9148c09f1b4b6b0bcbe8f6a
Author: Lukas Henkel <lh@entf.net>
Date:   Wed, 25 Dec 2024 06:27:35 +0100

Day 25

Diffstat:
Ainput/25.txt | 3999+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Asrc/day-25.lisp | 40++++++++++++++++++++++++++++++++++++++++
At/day-25.lisp | 52++++++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 4091 insertions(+), 0 deletions(-)

diff --git a/input/25.txt b/input/25.txt @@ -0,0 +1,3999 @@ +##### +##### +##.## +#..#. +..... +..... +..... + +..... +..#.. +#.#.# +###.# +##### +##### +##### + +##### +##### +###.# +#.#.# +#.#.# +....# +..... + +..... +#..#. +##.#. +####. +##### +##### +##### + +##### +##.#. +##... +#.... +#.... +..... +..... + +..... +..... +.#... +##..# +###.# +###.# +##### + +..... +..#.. +..##. +#.##. +#.### +#.### +##### + +##### +##### +####. +.#.#. +..... +..... +..... + +..... +..... +.#.#. +##.## +##### +##### +##### + +##### +##### +####. +.##.. +..#.. +..#.. +..... + +..... +..... +..#.# +.#### +##### +##### +##### + +..... +.#..# +.#..# +.#..# +###.# +##### +##### + +##### +##.## +.#.## +.#..# +....# +....# +..... + +##### +#.### +..### +..#.# +..#.# +..#.# +..... + +..... +..... +...#. +...#. +#..#. +##.#. +##### + +##### +####. +####. +#.#.. +#.#.. +..#.. +..... + +##### +##.## +#...# +#...# +....# +....# +..... + +##### +####. +####. +#.#.. +#.#.. +..... +..... + +##### +####. +####. +##.#. +##.#. +.#.#. +..... + +##### +##### +.#### +.#### +.#.#. +..... +..... + +..... +..... +..#.. +..#.. +.##.# +.#### +##### + +##### +#.#.# +#.#.# +#.#.# +#.#.# +#.... +..... + +..... +..#.. +..#.. +..#.# +..### +.#### +##### + +..... +#..#. +##.#. +####. +####. +##### +##### + +##### +#.### +#.#.# +..#.. +..... +..... +..... + +..... +...#. +#..## +##.## +##.## +##.## +##### + +##### +.###. +.###. +.###. +.###. +..#.. +..... + +##### +##### +##### +#.### +#.#.# +....# +..... + +..... +..... +#.... +#...# +##.## +##### +##### + +..... +....# +#..## +#..## +##.## +##### +##### + +..... +#...# +#...# +#...# +##..# +##.## +##### + +##### +##.## +##.## +##.## +##..# +#...# +..... + +##### +##.## +#..## +...## +...## +...#. +..... + +..... +#.... +##..# +##.## +##### +##### +##### + +##### +.##.# +.##.# +.##.. +.#... +..... +..... + +##### +##### +####. +##.#. +.#... +..... +..... + +##### +##### +###.# +##..# +##..# +#...# +..... + +..... +....# +....# +#..## +#.### +#.### +##### + +##### +##### +##.#. +##.#. +##... +#.... +..... + +##### +##### +##### +.###. +.#.#. +.#.#. +..... + +..... +..... +..#.. +#.#.. +#.#.# +#.### +##### + +..... +#..#. +##.#. +##.## +##.## +##.## +##### + +..... +..... +..... +..#.. +.##.# +.##.# +##### + +##### +.#### +.#### +.##.# +.##.# +..#.. +..... + +..... +...#. +#..#. +#..#. +##.## +##.## +##### + +..... +..#.. +..#.. +.##.# +##### +##### +##### + +##### +.#### +..### +..### +...## +...#. +..... + +##### +#.### +#..## +#..## +#..#. +#.... +..... + +..... +...#. +...#. +#.##. +#.##. +#.##. +##### + +..... +..... +#...# +#...# +#.#.# +##### +##### + +..... +..... +#...# +#...# +##..# +###.# +##### + +##### +##.## +#..## +...#. +..... +..... +..... + +##### +#.##. +#.##. +#..#. +...#. +..... +..... + +..... +.#... +.#... +.#.#. +##.#. +####. +##### + +##### +##### +#.### +#.### +..#.# +..#.# +..... + +##### +##.## +#..## +#..## +....# +....# +..... + +..... +...#. +...#. +...#. +.#.#. +.#.## +##### + +..... +...#. +#..#. +#..## +#.### +##### +##### + +##### +####. +.##.. +.##.. +..#.. +..#.. +..... + +##### +####. +.###. +.##.. +.##.. +.#... +..... + +##### +##.#. +.#... +.#... +.#... +..... +..... + +..... +..... +#.#.# +###.# +###.# +###.# +##### + +..... +.#... +.##.# +.##.# +###.# +###.# +##### + +..... +..#.. +#.##. +#.##. +#.##. +#.##. +##### + +..... +..#.. +#.#.. +#.##. +##### +##### +##### + +..... +...#. +...## +...## +...## +.#.## +##### + +##### +##### +##### +#.#.# +#.#.. +..... +..... + +..... +.#..# +.#..# +.#.## +.#### +.#### +##### + +..... +...#. +..##. +..##. +.###. +####. +##### + +##### +###.# +###.# +.##.# +.##.. +..#.. +..... + +..... +#.... +#.... +#.... +#.#.. +#.##. +##### + +##### +##.## +##.## +.#.#. +.#.#. +.#... +..... + +..... +..#.. +..#.# +#.#.# +#.#.# +#.#.# +##### + +##### +#.### +#..## +#..## +#..## +...#. +..... + +##### +####. +###.. +.#... +.#... +.#... +..... + +##### +###.# +###.. +###.. +##... +#.... +..... + +##### +.###. +.##.. +.#... +.#... +..... +..... + +..... +..#.. +..#.. +..#.. +..##. +.#### +##### + +##### +#.### +#..#. +#.... +#.... +#.... +..... + +..... +#.... +##... +##..# +##..# +###.# +##### + +##### +##### +#.#.# +#.#.. +#.#.. +#.... +..... + +..... +..... +#.... +#.... +##.#. +####. +##### + +##### +#.### +...## +...## +...## +....# +..... + +..... +..... +#.... +#.#.# +#.#.# +##### +##### + +..... +...#. +.#.#. +##.#. +##### +##### +##### + +..... +..... +..... +#...# +##.## +##### +##### + +##### +####. +#.##. +..#.. +..#.. +..... +..... + +..... +...#. +.#.#. +##### +##### +##### +##### + +..... +..... +..... +..#.# +#.#.# +##### +##### + +..... +..#.. +.##.. +###.. +####. +####. +##### + +..... +..#.. +#.##. +#.### +##### +##### +##### + +..... +....# +.#.## +##### +##### +##### +##### + +..... +..... +#.... +#...# +#.#.# +##### +##### + +..... +.#.#. +.#.#. +##.#. +##.#. +##.#. +##### + +..... +..... +..... +..... +#.#.. +#.##. +##### + +##### +.###. +..##. +..#.. +..... +..... +..... + +..... +..... +#.... +#.#.. +###.# +###.# +##### + +##### +.#### +.#### +..##. +..##. +...#. +..... + +##### +#.#.# +#...# +#.... +#.... +..... +..... + +##### +##.## +##.## +.#.## +.#.#. +.#.#. +..... + +..... +....# +....# +...## +.#.## +##### +##### + +..... +..... +....# +#..## +##.## +##### +##### + +##### +##.#. +##... +.#... +.#... +..... +..... + +..... +.#... +.##.. +###.. +###.. +####. +##### + +##### +.#### +.#### +..##. +...#. +...#. +..... + +##### +##### +##.## +#..## +#...# +#...# +..... + +..... +..... +...#. +.#.#. +.#.#. +.###. +##### + +..... +..... +....# +....# +.#..# +##.## +##### + +##### +####. +####. +##.#. +##.#. +#..#. +..... + +..... +..... +.#... +.#... +##.#. +####. +##### + +##### +##.## +##.## +##.## +.#.## +....# +..... + +##### +.##.# +.##.. +..#.. +..#.. +..#.. +..... + +##### +##.## +##.## +#..#. +#.... +..... +..... + +##### +##### +.#### +.#.## +...#. +...#. +..... + +..... +..... +...#. +..##. +#.### +##### +##### + +##### +##### +##### +###.# +##..# +#.... +..... + +##### +##### +#.#.# +#.#.. +#.#.. +#.#.. +..... + +##### +#.#.# +#.#.# +..#.# +..... +..... +..... + +..... +..... +...#. +#..## +##.## +##### +##### + +..... +.#..# +.#..# +.#..# +.#.## +##.## +##### + +##### +.##.# +..#.# +..... +..... +..... +..... + +..... +...#. +...#. +.#.#. +##.#. +##### +##### + +..... +..... +....# +..#.# +#.#.# +##### +##### + +..... +..... +..... +#...# +#..## +#.### +##### + +##### +#.### +..#.# +..#.# +....# +....# +..... + +..... +..... +..#.# +..#.# +.#### +##### +##### + +##### +###.# +###.# +###.# +#.#.. +#.#.. +..... + +..... +....# +..#.# +..### +.#### +##### +##### + +..... +....# +.#.## +.#### +.#### +.#### +##### + +##### +##.## +##.## +.#.## +.#.#. +.#... +..... + +..... +#.... +#.#.. +#.#.# +#.#.# +#.### +##### + +..... +..... +#.... +##.#. +####. +####. +##### + +..... +..#.. +..#.# +.#### +.#### +##### +##### + +..... +...#. +...#. +.#.## +.#.## +.#.## +##### + +##### +.#### +.#### +..#.# +..#.# +..#.. +..... + +..... +#.... +#.... +#.#.# +#.#.# +###.# +##### + +..... +.#... +.#..# +###.# +###.# +##### +##### + +##### +#.### +#.### +..### +...#. +..... +..... + +..... +..#.. +#.#.. +###.. +####. +####. +##### + +..... +..... +..#.. +..#.. +..#.# +#.### +##### + +..... +..... +....# +#.#.# +###.# +##### +##### + +..... +..... +.#.#. +.#.#. +.#.## +.#### +##### + +..... +.#... +.##.. +####. +####. +##### +##### + +..... +..... +..... +#.... +#.#.# +###.# +##### + +##### +##### +.##.# +.##.. +.#... +..... +..... + +##### +##### +##### +#.##. +#.##. +..#.. +..... + +##### +##.#. +##... +##... +##... +#.... +..... + +##### +##### +##### +##### +#.#.# +....# +..... + +##### +###.# +##..# +##..# +#...# +#...# +..... + +##### +.#### +.#### +.#.## +.#.## +.#..# +..... + +..... +.#... +.##.# +###.# +##### +##### +##### + +..... +..... +..... +#.#.# +###.# +##### +##### + +..... +..... +.#... +.#..# +.#..# +##.## +##### + +##### +#.### +#..## +...#. +..... +..... +..... + +##### +##### +##### +##.## +#..## +#..#. +..... + +##### +##### +#.##. +..##. +...#. +...#. +..... + +..... +..#.. +..##. +#.##. +####. +##### +##### + +##### +#.### +#.##. +#.##. +..##. +...#. +..... + +##### +##### +.#### +.###. +..#.. +..#.. +..... + +..... +#.#.. +#.##. +#.##. +#.### +##### +##### + +##### +##.## +#..#. +#.... +#.... +..... +..... + +##### +####. +#.##. +#..#. +#.... +..... +..... + +##### +##### +##### +##.## +#..#. +#.... +..... + +..... +..#.# +..#.# +#.#.# +#.#.# +#.### +##### + +##### +#.### +#..## +#..## +...## +....# +..... + +##### +##.## +##.## +##.#. +.#... +.#... +..... + +##### +#.### +#.### +#.#.# +..#.# +..#.. +..... + +..... +..... +...#. +..##. +.###. +.#### +##### + +##### +##### +##.## +##.## +#..#. +..... +..... + +##### +###.# +###.# +###.# +.#..# +....# +..... + +..... +..... +..... +#.#.# +#.#.# +##### +##### + +..... +....# +.#..# +###.# +###.# +###.# +##### + +##### +.#### +..#.# +..#.. +..#.. +..#.. +..... + +..... +..#.# +..### +..### +.#### +##### +##### + +##### +.#### +.###. +..##. +..#.. +..#.. +..... + +..... +..#.. +..#.. +..#.# +..### +#.### +##### + +##### +.###. +.#.#. +.#.#. +...#. +...#. +..... + +..... +.#... +.#... +##.#. +##.#. +##.#. +##### + +##### +##### +.#.## +...## +....# +....# +..... + +..... +..#.. +..#.. +..#.. +..#.. +.###. +##### + +##### +##### +##### +.#.#. +.#.#. +..... +..... + +##### +##### +##### +###.# +#.#.# +#.#.# +..... + +##### +##### +#.### +...#. +...#. +...#. +..... + +##### +##### +#.#.# +..#.# +..#.. +..... +..... + +..... +..... +.#..# +.##.# +.##.# +###.# +##### + +##### +###.# +###.# +##..# +##..# +#...# +..... + +..... +..... +..#.. +#.#.. +###.. +####. +##### + +##### +.#.## +.#.#. +..... +..... +..... +..... + +##### +##### +###.# +##..# +.#..# +.#..# +..... + +##### +##### +##### +.#.## +.#.#. +.#.#. +..... + +##### +#.### +..##. +..#.. +..... +..... +..... + +##### +###.# +#.#.# +..... +..... +..... +..... + +##### +###.# +.##.# +.#..# +.#..# +.#..# +..... + +..... +....# +#...# +#...# +#..## +#.### +##### + +##### +##### +#.#.# +#...# +#...# +..... +..... + +..... +....# +...## +...## +..### +#.### +##### + +##### +##### +#.##. +...#. +...#. +...#. +..... + +##### +.#### +.#### +.#.#. +.#... +.#... +..... + +##### +##.#. +##... +#.... +..... +..... +..... + +..... +..#.. +..#.. +.##.. +.##.# +##### +##### + +..... +#.#.. +#.#.# +##### +##### +##### +##### + +..... +..... +...#. +#.##. +#.##. +#.### +##### + +##### +#.### +#.#.# +#.#.# +..#.. +..#.. +..... + +##### +###.# +###.# +.##.# +.##.# +..#.# +..... + +##### +.#### +.#### +.##.# +.##.. +..#.. +..... + +..... +.#.#. +.###. +####. +##### +##### +##### + +..... +..#.. +.##.. +###.. +###.# +###.# +##### + +##### +##### +#.#.# +#.... +#.... +..... +..... + +##### +##### +#.##. +#.##. +#..#. +...#. +..... + +..... +#.#.. +#.#.# +#.### +##### +##### +##### + +..... +.#.#. +.#.#. +.#.#. +.###. +.#### +##### + +..... +.#... +.##.. +.##.# +.##.# +.#### +##### + +##### +.###. +.#.#. +.#... +.#... +.#... +..... + +..... +.#... +.#.#. +.#.#. +##.## +##### +##### + +..... +..#.. +#.#.# +#.#.# +#.#.# +##### +##### + +##### +##.## +.#.#. +.#.#. +.#.#. +.#.#. +..... + +..... +#.#.. +#.#.# +###.# +##### +##### +##### + +..... +.#... +.#.#. +.#.#. +.###. +####. +##### + +##### +#.##. +#.##. +#.##. +#.#.. +#.#.. +..... + +##### +#.##. +..##. +..##. +..##. +...#. +..... + +..... +#...# +#.#.# +#.#.# +#.### +#.### +##### + +##### +##### +.###. +.###. +..##. +...#. +..... + +##### +##### +##### +####. +.##.. +.#... +..... + +..... +#.... +#.... +##..# +##..# +###.# +##### + +##### +##### +##### +#.### +#.### +#..#. +..... + +##### +##.## +##.## +.#..# +..... +..... +..... + +##### +#.##. +#.##. +..##. +..#.. +..... +..... + +##### +#.##. +#.##. +#.#.. +#.... +..... +..... + +..... +.#... +.#... +.##.# +###.# +###.# +##### + +..... +..... +.#... +##..# +###.# +##### +##### + +##### +##.## +.#..# +.#..# +.#... +.#... +..... + +..... +#.... +##... +##..# +##..# +##.## +##### + +..... +..... +#.... +#...# +##..# +###.# +##### + +..... +..... +#.... +#.... +#.#.# +#.### +##### + +..... +..... +..... +#.#.# +#.### +#.### +##### + +##### +##### +#.### +..### +..#.# +..#.. +..... + +..... +#...# +#...# +#.#.# +#.#.# +#.### +##### + +..... +....# +....# +#...# +#...# +##.## +##### + +##### +##### +.#### +.#### +..#.# +..... +..... + +..... +..... +..... +..... +.#.#. +.#### +##### + +##### +##.## +#..## +...## +....# +....# +..... + +##### +##.#. +.#.#. +...#. +..... +..... +..... + +##### +##### +##.## +##.## +.#.#. +.#... +..... + +..... +..... +...#. +...#. +.#.#. +.#### +##### + +..... +...#. +#..#. +#..#. +#.##. +####. +##### + +##### +####. +###.. +##... +.#... +..... +..... + +..... +..#.# +..### +#.### +##### +##### +##### + +##### +#.### +#.### +#.#.# +#.#.# +....# +..... + +..... +.#..# +##..# +##.## +##### +##### +##### + +##### +#.### +#.#.# +#.#.# +....# +....# +..... + +##### +#.### +#.#.# +..#.# +..#.# +..#.# +..... + +..... +...#. +..##. +..### +#.### +##### +##### + +..... +..... +..#.. +..##. +.#### +##### +##### + +##### +##### +#.#.# +#.#.# +#...# +#.... +..... + +##### +#.### +#.### +#..## +...## +...#. +..... + +..... +....# +#...# +#...# +#.#.# +##### +##### + +..... +#.... +#.... +#..#. +#..#. +##.## +##### + +##### +##.## +##.## +#..## +#..#. +...#. +..... + +##### +####. +#.#.. +#.#.. +#.... +#.... +..... + +..... +#.... +#.... +##.#. +##.#. +##.#. +##### + +##### +.#### +.#### +.#.#. +...#. +...#. +..... + +##### +###.# +###.. +.#... +.#... +..... +..... + +##### +##### +#.### +#.#.# +....# +....# +..... + +##### +##### +.#### +.##.# +.##.. +.#... +..... + +..... +..... +.#.#. +.#### +.#### +.#### +##### + +##### +####. +#.##. +#.##. +..#.. +..... +..... + +..... +..... +.#.#. +.#.## +##### +##### +##### + +##### +##### +##.## +##..# +#...# +..... +..... + +..... +..#.# +..#.# +.#### +##### +##### +##### + +##### +##.## +#..## +...## +...## +....# +..... + +..... +.#... +##.#. +##.#. +####. +##### +##### + +..... +...#. +...#. +#..#. +#..#. +##.## +##### + +##### +#.### +#..## +#...# +....# +..... +..... + +..... +..... +...#. +..##. +#.### +#.### +##### + +##### +##### +####. +####. +#.##. +#.#.. +..... + +##### +##### +#.### +#.##. +#.#.. +#.#.. +..... + +..... +..... +..... +#...# +#...# +#.#.# +##### + +##### +###.# +###.# +#.#.. +#.#.. +..#.. +..... + +##### +##### +###.# +##..# +.#..# +..... +..... + +..... +..... +#.... +#.#.. +###.# +##### +##### + +##### +####. +####. +###.. +##... +.#... +..... + +..... +...#. +.#.#. +##.#. +##.#. +##.## +##### + +..... +...#. +...#. +...## +..### +.#### +##### + +..... +..... +.#... +.##.. +###.. +###.# +##### + +..... +..... +#.... +#.#.# +#.### +#.### +##### + +..... +..... +...#. +..### +#.### +##### +##### + +..... +#.#.. +#.##. +#.### +#.### +##### +##### + +..... +....# +....# +.#..# +.#..# +###.# +##### + +##### +#.### +..##. +..#.. +..#.. +..... +..... + +..... +..... +...#. +..##. +..##. +#.##. +##### + +..... +#.... +#..#. +#..#. +#..#. +##.## +##### + +..... +..#.. +.##.. +###.. +###.. +####. +##### + +..... +...#. +...## +..### +..### +.#### +##### + +..... +...#. +#..#. +#..#. +#..## +##.## +##### + +..... +#.#.# +###.# +###.# +##### +##### +##### + +##### +##### +.#### +.#### +.###. +.#.#. +..... + +##### +.##.# +..#.# +....# +....# +....# +..... + +..... +....# +.#..# +##..# +###.# +###.# +##### + +##### +##### +.#.## +...#. +...#. +...#. +..... + +##### +#.### +..### +...## +...#. +...#. +..... + +##### +###.# +#.#.# +..#.# +..#.# +..#.# +..... + +##### +####. +####. +##.#. +#..#. +#..#. +..... + +..... +..... +..#.. +..##. +.###. +.###. +##### + +##### +###.# +#.#.# +#.#.. +#.#.. +#.... +..... + +##### +##### +.#### +.##.# +.#... +..... +..... + +..... +....# +#.#.# +#.#.# +##### +##### +##### + +..... +..... +..... +...#. +.#.#. +.###. +##### + +##### +###.# +###.# +.##.# +..#.. +..#.. +..... + +##### +###.# +###.# +###.. +###.. +#.#.. +..... + +..... +...#. +#..## +#.### +#.### +##### +##### + +##### +##### +####. +.###. +..#.. +..... +..... + +..... +.#.#. +##.#. +##.#. +##.## +##### +##### + +..... +#...# +#.#.# +#.#.# +###.# +##### +##### + +##### +##### +###.# +#.#.# +..#.# +..#.. +..... + +##### +#.### +#..## +#..#. +...#. +...#. +..... + +..... +....# +....# +.#.## +##.## +##.## +##### + +##### +#.#.# +..#.# +..#.# +..#.. +..#.. +..... + +##### +##### +.#### +..#.# +..#.# +....# +..... + +##### +##### +.#### +.#.#. +.#.#. +..... +..... + +..... +....# +....# +....# +...## +#.### +##### + +..... +..... +.#... +.#... +.#.#. +####. +##### + +..... +..#.. +#.#.. +####. +####. +####. +##### + +##### +#.### +#.##. +#.#.. +#.... +#.... +..... + +##### +##### +.#### +.###. +..##. +...#. +..... + +..... +..... +...#. +...#. +..##. +.#### +##### + +##### +###.# +###.# +###.# +##... +#.... +..... + +..... +..... +..... +.#.#. +.#.## +##.## +##### + +..... +..#.. +.###. +.###. +.###. +####. +##### + +..... +..... +#..#. +#..#. +#.### +##### +##### + +..... +...#. +..### +.#### +.#### +.#### +##### + +..... +.#... +##.#. +##.#. +##.#. +##.## +##### + +..... +.#... +.#... +.#.#. +##.#. +##.#. +##### + +##### +.##.# +.#..# +....# +....# +..... +..... + +##### +##### +#.#.# +#.... +..... +..... +..... + +..... +..#.. +..#.. +#.#.# +#.#.# +#.#.# +##### + +##### +####. +####. +#.##. +#.##. +#..#. +..... + +##### +####. +####. +.###. +.#.#. +..... +..... + +##### +###.# +##..# +.#... +.#... +..... +..... + +##### +##### +##### +##.#. +.#... +..... +..... + +##### +##.## +.#.## +.#.## +.#.#. +.#... +..... + +..... +..... +..... +....# +..#.# +#.### +##### + +..... +..... +....# +..#.# +.##.# +.##.# +##### + +##### +##.## +##.## +##.#. +#.... +#.... +..... + +##### +.#.## +.#.## +.#..# +..... +..... +..... + +..... +..... +....# +..#.# +..### +.#### +##### + +..... +....# +#.#.# +#.### +#.### +#.### +##### + +..... +#.#.. +#.#.. +#.##. +#.##. +#.### +##### + +..... +#..#. +#.##. +####. +##### +##### +##### + +##### +#.#.# +#...# +..... +..... +..... +..... + +##### +##### +#.### +..### +...#. +..... +..... + +##### +##### +###.# +#.#.# +..#.. +..... +..... + +..... +.#... +.#... +.#.#. +####. +####. +##### + +##### +.###. +..#.. +..... +..... +..... +..... + +..... +..... +...#. +...#. +..##. +.###. +##### + +##### +.#### +.#### +.#.## +.#.## +....# +..... + +##### +##### +.#.#. +.#.#. +.#.#. +..... +..... + +##### +##### +##.#. +##.#. +#..#. +..... +..... + +##### +###.# +.##.# +.##.# +.#..# +.#..# +..... + +##### +#.### +#..## +....# +..... +..... +..... + +##### +##.## +.#.#. +..... +..... +..... +..... + +##### +##### +.###. +.###. +.#.#. +.#... +..... + +##### +##.## +##..# +.#..# +....# +....# +..... + +..... +#.... +#.#.. +#.#.. +#.#.. +####. +##### + +##### +####. +####. +####. +.###. +..#.. +..... + +##### +##.## +.#..# +.#... +.#... +..... +..... + +..... +..#.. +..##. +#.### +#.### +##### +##### + +##### +##### +.#### +.#.#. +.#... +..... +..... + +##### +.#.## +.#.## +.#..# +.#..# +..... +..... + +..... +..... +..#.. +.###. +.###. +.###. +##### + +..... +.#... +.##.. +.###. +.###. +##### +##### + +##### +.#### +..#.# +..#.# +..... +..... +..... + +..... +..... +..#.. +#.#.. +#.#.# +#.#.# +##### + +##### +####. +##.#. +.#.#. +.#.#. +.#... +..... + +..... +.#.#. +.#.#. +.###. +.###. +.#### +##### + +..... +..... +.#..# +.#.## +.#### +.#### +##### + +##### +##### +###.# +##..# +##... +.#... +..... + +..... +#.... +#.... +#.#.. +#.##. +#.##. +##### + +..... +..#.# +#.### +#.### +##### +##### +##### + +..... +....# +...## +#.### +#.### +##### +##### + +..... +..#.. +..#.. +.##.. +####. +####. +##### + +##### +####. +.#.#. +.#.#. +...#. +..... +..... + +##### +.#.#. +...#. +...#. +...#. +..... +..... + +##### +##### +###.# +.#... +..... +..... +..... + +..... +#.... +#..#. +#..## +#.### +##### +##### + +..... +..... +..... +#.#.. +#.#.# +###.# +##### + +##### +##### +####. +.#.#. +.#... +.#... +..... + +##### +###.# +#.#.. +..... +..... +..... +..... + +##### +##.## +##..# +.#..# +.#... +..... +..... + +##### +##.## +##..# +##..# +##..# +.#..# +..... + +..... +..... +#...# +##..# +##.## +##.## +##### + +##### +####. +####. +####. +.#.#. +...#. +..... + +..... +.#..# +.#..# +.#..# +##.## +##### +##### + +##### +####. +.##.. +..#.. +..#.. +..... +..... + +..... +..... +..... +.#... +.#.#. +####. +##### + +..... +#.... +#.... +#.... +#.#.# +#.#.# +##### + +##### +##### +#.##. +#..#. +...#. +...#. +..... + +..... +.#..# +##..# +##..# +##.## +##### +##### + +##### +####. +####. +####. +.##.. +.#... +..... + +..... +..... +..#.. +.##.# +.#### +##### +##### + +##### +####. +#.#.. +#.... +..... +..... +..... + +..... +....# +....# +..#.# +..#.# +.#### +##### + +..... +.#.#. +.#.#. +.#.## +.#### +.#### +##### + +..... +.#... +.#..# +.#..# +.#..# +###.# +##### + +##### +#.#.# +..#.. +..#.. +..#.. +..#.. +..... + +..... +...#. +...#. +..##. +#.##. +#.### +##### + +..... +..... +#.... +#..#. +#.### +#.### +##### + +..... +..... +...#. +...#. +#.##. +####. +##### + +##### +##### +#.##. +...#. +...#. +..... +..... + +..... +#.... +##... +##.#. +##### +##### +##### + +..... +..... +...#. +.#.#. +##.## +##.## +##### + +..... +.#.#. +.#.#. +.#.#. +.#.#. +##.## +##### + +..... +.#... +.#... +##... +##.#. +##.## +##### + +##### +##### +###.# +##..# +#.... +#.... +..... + +..... +....# +....# +....# +#.#.# +##### +##### + +..... +....# +.#..# +.##.# +.##.# +##### +##### + +..... +..#.# +..#.# +..### +..### +.#### +##### + +..... +...#. +...#. +...#. +..##. +.###. +##### + +##### +.###. +.#.#. +.#.#. +.#.#. +.#... +..... + +..... +.#.#. +.###. +.###. +.#### +##### +##### + +##### +##.## +##.#. +#.... +..... +..... +..... + +##### +##.## +##.## +##.## +#..## +#...# +..... + +..... +..... +.#.#. +.###. +.###. +.#### +##### + +..... +.#... +##... +##... +###.# +##### +##### + +##### +##### +.#### +.#.## +.#.#. +...#. +..... + +..... +..... +..... +.#..# +.#.## +.#.## +##### + +##### +##### +##.## +#...# +#...# +#...# +..... + +..... +....# +...## +..### +#.### +#.### +##### + +##### +####. +#.##. +#.#.. +#.#.. +#.#.. +..... + +##### +#.### +..### +..#.# +..#.# +..#.. +..... + +##### +##### +##### +.#### +.#.## +.#..# +..... + +..... +.#..# +##..# +##..# +###.# +###.# +##### + +##### +##### +###.# +###.# +#.#.# +..... +..... + +##### +##### +##.#. +##... +#.... +..... +..... + +##### +##.## +##.## +##.## +##.#. +.#... +..... + +..... +...#. +.#.#. +##.#. +##.## +##### +##### + +##### +.#### +..### +..### +..##. +..#.. +..... + +##### +.#.## +.#..# +.#..# +.#... +.#... +..... + +..... +..... +..... +..#.# +.##.# +.#### +##### + +..... +.#... +.##.# +.#### +.#### +##### +##### + +##### +.###. +.###. +.#.#. +.#... +.#... +..... + +##### +.#.## +...#. +...#. +..... +..... +..... + +..... +.#... +.##.. +.##.. +.###. +####. +##### + +##### +###.# +##..# +##..# +.#..# +.#... +..... + +..... +..#.. +.##.# +###.# +##### +##### +##### + +##### +##### +###.# +##... +.#... +.#... +..... + +..... +..#.. +..#.. +..#.. +.##.. +.###. +##### + +..... +...#. +.#.#. +.#.## +.#.## +.#.## +##### + +##### +###.# +##..# +#.... +#.... +#.... +..... + +##### +##### +.##.# +.#..# +.#..# +.#... +..... + +..... +.#... +###.. +###.. +####. +####. +##### + +..... +....# +#..## +#.### +#.### +##### +##### + +##### +.#### +.#.## +.#.#. +.#... +.#... +..... + +..... +....# +.#.## +.#.## +.#.## +.#.## +##### + +##### +#.#.# +#.#.# +#.#.. +#.... +..... +..... + +..... +#.#.. +#.#.. +#.##. +####. +##### +##### + +..... +..... +..... +#.... +#...# +#.#.# +##### + +##### +##### +###.# +.##.# +.##.# +..#.# +..... + +##### +.#### +.#### +.###. +.#.#. +.#.#. +..... + +..... +..#.. +#.#.. +#.#.. +#.#.# +##### +##### + +##### +#.### +#.#.# +#.#.# +#.#.# +..#.. +..... + +..... +.#.#. +##.#. +##.## +##.## +##.## +##### + +..... +....# +#..## +##.## +##.## +##.## +##### + +..... +..... +...#. +#.##. +##### +##### +##### + +##### +####. +###.. +.##.. +.#... +.#... +..... + +##### +.#.## +.#..# +.#..# +.#..# +.#..# +..... + +..... +..... +..... +..... +.#... +.##.# +##### + +..... +...#. +...#. +.#.#. +##.#. +##.## +##### + +..... +..... +.#.#. +.###. +.###. +####. +##### + +##### +##### +#.### +#..#. +...#. +...#. +..... + +..... +..#.. +..#.. +#.#.. +#.#.# +##### +##### + +##### +###.# +###.# +###.# +.#... +..... +..... + +..... +...#. +.#.#. +.#.## +.#.## +##### +##### + +..... +..#.. +..#.. +..##. +..##. +#.##. +##### + +##### +#.### +..### +...## +...## +....# +..... + +..... +.#..# +.#..# +##.## +##.## +##### +##### + +..... +#.... +#.... +##... +###.. +###.# +##### + +..... +.#... +###.. +###.. +###.. +####. +##### + +..... +...#. +...#. +...## +#.### +##### +##### + +##### +##### +##### +##### +##.#. +.#... +..... + +##### +##.## +##.## +##.## +#...# +#...# +..... + +##### +.#### +.#### +.#.## +.#..# +.#... +..... + +..... +..#.. +..#.. +..#.. +#.##. +####. +##### + +..... +..... +.#... +.##.. +.###. +.#### +##### + +##### +#.### +#..## +#..## +#..## +....# +..... + +##### +#.#.# +#.#.# +#...# +#...# +..... +..... + +##### +##### +#.### +#..## +#...# +#...# +..... + +##### +##### +##### +.#.## +...## +....# +..... + +..... +..... +.#..# +###.# +###.# +###.# +##### + +##### +##### +###.# +#.#.# +..#.# +..... +..... + +..... +.#... +##..# +##.## +##### +##### +##### + +##### +.#### +.#### +.#### +.#.#. +.#... +..... + +..... +#...# +##.## +##.## +##### +##### +##### + +##### +##### +###.# +.##.. +..#.. +..#.. +..... + +..... +.#... +.##.. +.##.. +.##.# +###.# +##### + +..... +....# +....# +..#.# +..#.# +#.### +##### + +..... +...#. +.#.#. +##.## +##### +##### +##### + +##### +##### +##### +##### +#.#.# +#...# +..... + +..... +.#... +##... +###.. +###.. +###.# +##### + +##### +.#.## +.#..# +.#... +..... +..... +..... + +##### +##### +##### +.#### +.#.#. +.#.#. +..... diff --git a/src/day-25.lisp b/src/day-25.lisp @@ -0,0 +1,40 @@ +(defpackage #:aoc/day-25 + (:use #:cl #:aoc/utils) + (:export + #:key-fits-p + #:day-25)) +(in-package #:aoc/day-25) + +(defun heightmap (map) + (loop for x from 0 below (input-map-width map) + collect (loop for y from 0 below (input-map-height map) + when (char= (map-cell map (cons x y)) #\#) + sum 1))) + +(defun parse-input (input) + (loop with locks = nil + with keys = nil + with max-height = 0 + for map = (make-map input) + until (null map) + for height = (input-map-height map) + when (> height max-height) + do (setf max-height height) + if (char= (map-cell map (cons 0 0)) #\.) + do (push (heightmap map) keys) + else + do (push (heightmap map) locks) + finally (return (values locks keys max-height)))) + +(defun key-fits-p (lock key max-height) + (loop for lock-v in lock + for key-v in key + always (<= (+ lock-v key-v) max-height))) + +(defun day-25 (input) + (multiple-value-bind (locks keys max-height) + (parse-input input) + (loop for lock in locks + sum (loop for key in keys + when (key-fits-p lock key max-height) + sum 1)))) diff --git a/t/day-25.lisp b/t/day-25.lisp @@ -0,0 +1,52 @@ +(defpackage #:aoc-test/day-25 + (:use #:cl #:lisp-unit2) + (:import-from #:aoc/day-25)) +(in-package #:aoc-test/day-25) + +(define-test test-day-25 + () + (assert-eq nil (aoc/day-25:key-fits-p '(0 5 3 4 3) '(5 0 2 1 3) 5)) + (assert-eq nil (aoc/day-25:key-fits-p '(0 5 3 4 3) '(4 3 4 0 2) 5)) + (assert-eq t (aoc/day-25:key-fits-p '(0 5 3 4 3) '(3 0 2 0 1) 5)) + (assert-eq nil (aoc/day-25:key-fits-p '(1 2 0 5 3) '(5 0 2 1 3) 5)) + (assert-eq t (aoc/day-25:key-fits-p '(1 2 0 5 3) '(4 3 4 0 2) 5)) + (assert-eq t (aoc/day-25:key-fits-p '(1 2 0 5 3) '(3 0 2 0 1) 5)) + (assert= 3 (aoc:run-day 25 "##### +.#### +.#### +.#### +.#.#. +.#... +..... + +##### +##.## +.#.## +...## +...#. +...#. +..... + +..... +#.... +#.... +#...# +#.#.# +#.### +##### + +..... +..... +#.#.. +###.. +###.# +###.# +##### + +..... +..... +..... +#.... +#.#.. +#.#.# +#####")))