advent-of-code-2023

My solutions to AoC 2023
git clone git://git.entf.net/advent-of-code-2023
Log | Files | Refs

commit 463993444e964640d417d840a2eb592680047fa4
parent a94658845d70a2abb88f966d8378681a780ae91d
Author: Lukas Henkel <lh@entf.net>
Date:   Tue, 12 Dec 2023 07:11:33 +0100

Day 12 task 1

Diffstat:
Ainput/12.txt | 1000+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Asrc/day-12.lisp | 52++++++++++++++++++++++++++++++++++++++++++++++++++++
At/day-12.lisp | 8++++++++
3 files changed, 1060 insertions(+), 0 deletions(-)

diff --git a/input/12.txt b/input/12.txt @@ -0,0 +1,1000 @@ +.??.?#??##???. 1,6 +?#???.#??#?????.? 3,1,3,1,1 +??#????#??#???.?? 4,7,1 +??#?.?#?#???#?#?? 1,11 +?????????? 1,4,1 +?#?#????..?????? 6,4 +?#?#?.#?#???????..? 5,1,1,3,2,1 +?.#??#??.??????.? 6,1,1,1 +##???###?.##?? 2,4,2 +???.#??#????.??? 3,7,2 +????#??..?# 1,3,1 +.?..#????????#????? 1,5,6 +?#..??##??.??? 1,5,2 +?#???#???# 1,1,2 +#???#??..?????.??.?. 5,1,1,1,2,1 +??#??.?#??????. 2,2,1,1,1 +??????.???..??#?? 1,2,1,4 +.?#??#???#??#?????. 12,3 +??#???#?.?##?.?? 6,3 +?#?#?.??#???? 3,1,1,1 +??#???.#??.#. 3,2,1 +??#...??.. 3,2 +#?#.??????#.??????? 3,2,1,1,7 +?#?#.?????#???? 3,5 +?#??.???.?.?.???? 4,1,1,3 +????????.##?#.???? 2,1,4,2 +?#??#.??????????#? 4,3,1,3 +.#?#?.???..? 3,1,1,1 +?..##.???#????. 2,2,2 +.#??#?#??#?.? 9,1 +???.??..?#??#?? 1,1,2,1,1 +.??#??#..#????? 2,1,1,2 +.???#??..??????####? 4,2,7 +????#?.??. 1,1,2 +?#??#?#?..???#?.?.?# 1,5,1,1,1,2 +??????#???.?.??.?#?? 10,1,2,1,1 +???.????..? 2,1,2 +??.#???????? 1,1,4 +??.??#???.?????#? 1,1,1,1,6 +?..????##.##?#?????? 6,6,2 +##???#?.??#.???? 7,2,3 +????#??#??#? 1,6,2 +.???.??..#..?#??? 1,1,1,1 +?.???.?.???????? 1,1,1,3,4 +?.?????#?#.?????#??# 7,1,5 +?????##?#?? 2,6 +???.#?#????#. 1,5,2 +????...?#?? 1,2 +.????.?????#. 2,3 +?.?????##??###?##??# 1,1,11,2 +#??..?#?.???#??. 2,1,3 +#?.???????#???#. 2,1,1,1,3 +?#???..#?? 5,3 +????#???#.?#???#?.#? 2,2,1,1,4,2 +.????#??##???#?#. 8,4 +???????????#?.??#. 2,1,4,1,1 +?.#?#??.??####??? 5,8 +?#?#?#???.#.?#. 8,1,1 +?.??.????#?.??.? 1,5,2 +#??.?#...? 1,1,1 +??#?#???#??#.????.?# 8,2,4,1 +.?#?####??? 7,2 +???#??#?.??? 4,3 +..????##????????.? 8,2,1 +???#?#?##?.???.? 7,2 +?#???#?#.?.??#.?. 6,1,1,3,1 +???.?#?.?? 1,1,1 +???????#..# 4,2,1 +?.?#.?????? 1,1,2 +.????????#???##?#? 4,1,4,4 +???#?#?????#?#?? 1,13 +#????#????.#?#???#? 2,5,8 +.????#.#??. 4,2 +??#????#??? 8,1 +?.##.??#??? 2,4 +#????#?#?#?.?????#? 1,1,1,4,1,3 +????#????.?????##??? 2,5,1,1,2,1 +..???#??..?#? 6,2 +?#?.?.##???????? 3,1,2,4,1 +.?.???##?????# 1,5,1,1 +?.#????.??? 2,1,1 +?#?#?#.???..???.??? 5,1,3,3 +.?.???#??#?.???#? 1,6,4 +?#???.?#?#.????#? 5,4,1,2 +.?#????????...#??? 2,2,4,4 +?????.???#? 1,4 +????#?.????.?#??.??? 5,1,2,1,3 +????????.? 2,2 +..??#???#?#.?#? 9,1 +????????#????#????? 5,3,1,1 +#?????#??????. 1,1,3,1 +?..#?.#???? 2,4 +..#?????????#?#???? 1,13 +?.?#.???#?? 1,2 +#?.#??????????#? 1,2,1,2,3 +.???????.?#.?? 1,3,2,1 +.????.?#?????##?? 3,3 +????###?##??.??#???? 1,8,5 +#?.?####????.? 2,6,1,1 +??.##???#?????? 1,6,2 +??.??#???#?#? 1,3,1,4 +.??.???.?#?#??? 1,2,5 +??.#.?#???.##??? 2,1,1,1,5 +???.???.??.?????#? 1,1,1,1,3,2 +?#?.?#?##???#???#??? 1,11,2 +??#????.?. 1,1 +.?#??##??#???.?? 10,1,2 +?#?#?.?#.? 1,1,2 +????#???????#. 3,1,1,1 +.??#?..??.???.??? 3,1,2,1,1 +.?#??.???#? 2,1,1 +?.?#.??##?????????? 1,1,8,1,1 +?.?????.??#?? 4,1,1 +?.??.#???? 1,4 +???#???..???.? 2,1 +.??????#?#??.?.? 2,5,1,1 +#??#??..?.?.???.#?? 6,1,1,3 +.???.?#?#??.??#???? 3,1 +.??#?..???? 4,2 +?.##???#???#??#.?? 2,8,1 +????#.#.???.???# 1,1,1,2,4 +#???????????.???#.? 6,1,3,1,1 +?#?????.??##??. 1,1,1,1,2 +?..????..?#? 1,1,1,3 +.??..????.?#?? 2,1,1,3 +????????????. 1,1,7 +???.?.??????#.?? 1,1,1,3,1 +?##...?..##??. 2,3 +.???##?????? 1,5,1 +.??#?.??????#???#?? 4,7 +.?#???.?.?? 4,1 +.???###???#??..???? 8,1 +???.?????#??##?.. 3,5 +??##??#??????? 5,2 +.?.???.#..? 1,1 +??##.??#??#???. 4,6 +?#????#..##?#? 1,3,4 +.?.?.??..? 1,1,1 +??????????#??#. 1,1,1,1,2 +??##???.???.????. 1,5,3,1,1 +???????.?????#?##??? 7,9 +##..#???.?#???#?? 2,1,1,4,2 +????#??#??????? 8,1,2 +.##?##???????.???# 7,1,2,1,1 +#.?..????#?#. 1,1,1,5 +???#??#????.??? 2,1,1,1,1 +#.??#.???#?##?#????? 1,1,1,3,4,2 +???###?#?.???.??? 6,2,1,3 +???#?#???????? 8,1 +??????.#???.?..??.? 3,1,3,1,1,1 +???#?##??#?.??.#.?? 1,8,2,1,1 +??????##???.#??#?? 8,2,3 +??.??#??.??.# 2,1 +??#.???#??????#? 3,3,4,2 +#?..???????#??#???? 1,5,6,1 +.??####??.???. 5,2 +.??#???????#? 1,1,4 +.?????.#?#???#?# 1,1,3,1,3 +.??#??#???..#.?.?# 1,1,4,1,1,1 +??.??????????.? 2,2,3,1 +???#.?.???##?## 4,8 +.?###??????#??#??? 5,7,1 +??.???.??#????#??? 2,2,1,1,5 +#???????.?#.#???### 3,1,2,1,3 +.????#???..?.#?? 4,1 +???????????.?#.?? 3,2,4,1,2 +.??#.#?.?.??##?.? 3,2,1,4 +??#??.?##???#? 2,3,2 +?????###?.? 2,5,1 +#?#.?##????#???? 1,1,3,1,5 +???#??#????????## 9,2 +?#??##??##???##??.?? 2,11,1,1 +???.?#.???? 1,1,1 +#???#????????.#? 1,4,1,2,1 +?#??.??##? 2,4 +.###??#??#??#?# 3,10 +#.????#?#??????#?? 1,2,4,2,2 +??..????.? 1,1,1 +#??##?..??????? 5,1,1,1 +##????.?.##???. 3,1,5 +???##.????#? 5,1,3 +?.????.##.? 1,2,2 +?#????##??????##???? 1,2,3,8,1 +???#?????.?..? 3,1 +?#?#??.#??#?.? 5,4 +??.?###??????? 1,4,1,1 +..##????#???#???? 4,6,3 +?????#??????.???# 7,3,1,1 +??#???????. 3,1,1 +??????##??????. 1,1,2,1,1 +?????.??????. 1,1,2,1 +?.?.??.?#?????#?##.# 1,1,1,8,2,1 +?.#???????#?? 2,1,3,1 +.#????..??#?..?# 4,1,1 +.??.??#??? 1,1,1 +##??###??.??? 8,1 +????#???????.????? 6,1,1 +#?#??#??..????? 1,2,1,1,5 +.?#????.?.??#? 6,1,1,2 +????..?##.?.?.????#? 4,3,1,1,1,3 +.#???????##??.???#?# 5,6,4 +##??????#?..#??? 2,1,5,1,1 +#????????#?#.#?.? 1,1,1,4,1 +#??#???#.?????#???? 8,1,1,5 +#?.?#??#?.? 1,2,2 +?.#?#??.?????..? 4,3 +?#?#???.?? 4,1,1 +???????#????#???.? 1,2,2,2,4,1 +????#??..?.??#?#?. 5,3 +..??#?#????????#???. 5,1,3,1,1 +?.#???.???. 1,2 +??????????.?.??? 6,1,1,1,1 +?#??????.? 3,2,1 +.?.##???## 1,7 +?.?????#??##??##???? 1,16 +??#????##?#??? 1,1,7,1 +.?????????? 5,1 +??????????.? 2,1,1,1 +##?.?????. 3,1 +?#?..?.???? 2,1,1 +#..???#??#???# 1,2,8 +??##?????#????? 3,9 +???#?.?##. 3,3 +??.??#?#??##?#.# 9,1,1 +#.??#?#??. 1,3 +.??#????????????? 3,1,2,3 +??#??#???.?.?? 7,1 +??#..##????#??#????? 2,10,2 +#?###????##?..??? 11,2 +.???#.??#.?##.?? 1,1,1,3,1 +?#??????#? 5,1,1 +?.?##??#??????? 5,4 +.?????.?#??.. 2,2 +.??.?#####?????##? 7,4 +??????.#?.. 1,1,2 +??#??????..?? 3,1,2 +??????????# 4,2 +?.?######???. 1,7,1 +????#?????????# 10,2 +.???#?#?#? 1,2,4 +?##????.???#?#?? 5,5 +.??#??.?#?#?.##? 1,4,2 +#.????????#????. 1,6,2,1 +?###????.?#?#??#??.? 6,9,1 +?..??..??###. 1,2,5 +?????#?????????.??. 1,1,3,6,2 +?.?#??.??? 1,1,2 +.??.?????????. 1,5,1,1 +????#??.?????## 3,6 +##?#??.?????. 4,1,1,2 +??#????#??.????#?. 8,1,2 +.???????#.?.?#??#??? 1,2,2,1,7 +?#.#???.?#?????# 1,1,1,1,5 +??#?##?.??# 6,3 +??????.##??#??###? 1,1,1,5,4 +???#???????##??. 2,1,1,2,1 +?????#..????#??##? 6,1,3,3 +????#??#??#??????##? 11,3 +.##??##?????.#?#?? 11,1,1,1 +?.?#?.?????.?? 3,4 +###?.????#?? 3,1,3 +????..?##?.??????#?? 3,2,9 +?#?.???#??#. 2,1,4 +??##?#?.#.???#??? 6,1,1,1,1 +#??????.???.#?#??. 4,2,1,1,3 +.?#???????.##? 7,2 +???#???.?.?#?#?. 4,1,5 +?.?????#.??#???# 6,3,1 +.??#??#??.?#??? 6,1,1 +??#????????. 5,1 +????????????? 1,4,1 +?#??#?####?.??.?#... 10,1,2 +#????#??????#???.?? 1,1,4 +?.???.???### 1,1,1,4 +?####??.?.??????. 7,4 +#???.#?#?#?#.?#?? 2,7,2 +???..?.??#???. 1,1,6 +???????.????####??.? 4,1,10,1 +??.?#?????????..?.# 2,11,1 +???.???#??.. 1,1,3 +?.?#?#??#????#?? 1,2,2,3 +???#????.?#??. 3,1,1,1 +.????????? 1,1,1 +?.?.????##?###??.?? 1,11,1 +?#????.#?#??? 1,1,1,2 +#.?.?..#?#?#????? 1,1,3,4 +?#?.??..?##?##????? 3,10 +?????????#????.#???? 1,7,1,2,1 +?#????????.#?# 1,4,2,3 +.????????#?. 6,2 +?.?#.??##.#??.?#?? 1,2,1,2,1,2 +.?????#??.?#?? 2,3,2 +#?.##?..#.???????? 2,2,1,5 +?????.?#????? 1,1,1,3 +???????#?##??#??? 1,10 +???##?..#? 1,3,2 +???#???.???.?? 2,1,1 +#?.#..?.?? 1,1,1 +????#???#?. 2,6 +##.?.????#??.?#?## 2,1,1,1,1,5 +??...?#??##.#???? 2,5,1 +??????..?#???? 3,1,1,1 +?#?.?##???#?.???? 1,8,1 +???##?#???????.#? 5,6,1 +?????..?#????# 1,1,2,2 +?###..??#? 3,4 +..?#??#????# 5,3 +???.???#????. 1,1,6 +??#?.??#?.???. 1,3 +?..????...?.????? 4,1 +#.??#??#?.#??#??#?# 1,6,1,7 +?.????..?.?? 1,3,1,2 +.??#???#??????#?.?# 1,1,10,1 +.#.?.??#?.?.#?? 1,1,2,1 +?.?.??.#???#? 1,1,1,3 +?.???.???.?? 1,3,2,2 +.????.??????. 1,1,1,2 +?.?#??????.??#? 1,5,1,1,1 +?????????#. 1,2,1 +.?.?#??##???? 1,6,1,1 +?#??#??.#? 1,1,1 +??.???????#??#.? 2,1,1,5 +#?.#??.?.##..##?.?. 1,3,2,3,1 +????????#?.##?#? 2,1,2,5 +?#?????.#?#.??#? 3,1,1,1,1 +????#?#?????#? 2,3,4 +?.???????#. 1,3,1 +???????##?#???.????. 14,3 +??????#?.#?#?? 6,4 +?##?#.??##?.# 5,4,1 +#??.???###?????? 3,1,3,1,1 +?#?#??.???#?#??? 5,2,4 +.???#?.#?####. 1,1,6 +.???.?#?#??.# 2,1,2,1 +#.#??#????? 1,6,1 +?.??.???.. 2,1 +?.??.#?##.?????#???. 1,4,8 +.#?#?#?#???..?#??# 9,4 +.#.?#?#??.# 1,6,1 +#?#.???#?????? 3,1,7 +??#?###??#?#??#??? 1,6,1,1,2,1 +??.?##???#?#?.? 1,10 +.#?##???#???##???..# 1,11,1,1 +??.#?.????#???# 1,1,7,1 +#????????#? 1,6,1 +????.#?.??#???#.?# 1,1,1,4,1,1 +.???#?#??.?.???# 7,4 +???##??????..## 8,2,2 +?#?#?.?.?##?## 5,5 +?.?..???.. 1,2 +.?.????..# 1,3,1 +#??????#??.?#?###??? 1,1,1,1,1,8 +.??#??.?.???? 4,1 +??????##?.. 2,3 +?#.????.#?# 1,1,3 +.?????..?????#. 2,1,2 +????#?#?##.????? 10,1 +?????.????#?? 3,1,1,1 +.??????.??.??..? 6,1 +?????????#??#???# 1,2,3,5 +#??####??..??#?.. 9,1,2 +?####??##?.????? 9,1 +?##??#??.???#. 6,4 +#.#?????????.#????? 1,1,1,1,1,5 +??#???????###??#??? 5,8 +#??##?????#????#? 1,7,1,1,1 +????????#?.????.???. 1,1,3,1,3,3 +??.??????? 1,2,1 +.?####???.???#?.? 4,1,3 +.???##??#?????.???? 13,1 +???.??#??#?????????? 1,1,3,7 +?????..??.?? 1,1,1,2 +?#???#??#??#???.??? 7,6,1 +???#???#?#??????. 6,1,2,1,1 +???????.?????? 1,3,2,1 +..#???#???#????#? 1,10 +??##??##???.???# 6,1,1 +#?#???###?##?.?????? 1,1,1,7,1,1 +??#?.?#?.???? 1,2,2 +.?..???#.? 1,4 +#??????#.?#?.##???## 3,1,2,7 +...#??#??#?##??.. 10,1 +.#??.??????????? 3,2,1,1 +?#??#?#?#????###??. 2,15 +?#????#??.?????? 2,4,6 +??.??.????##. 1,1,1,4 +.??#???.?.?????? 4,1 +?#??.??##??#??.? 2,8 +????#?#??#???##????. 1,15 +.???????#..?#?? 2,4,2 +?.?#?#?.#.?.??? 1,2,1,1,1 +???????#?##?#??? 1,6,2,1,1 +#???#####?.???#??. 10,4 +??????#.?????.? 2,3,4 +?.?#?#?????.? 4,1 +?.#?#?..????????#. 1,4,1,3,1 +.?????????#??##?? 3,1,7,1 +#.?.?.???##.??? 1,1,1,2,1 +?#.??##??.?..#? 2,3,1,2 +?#.?.????????#? 1,2,6 +???#?.??##?#???#??. 1,2,1,10 +???????.?#????? 6,3,2 +????#?.????.??.? 1,2 +#???.??#.??? 1,1,3,2 +???.??#??#????? 1,2,3,1 +?#?#????#?.?? 2,1,4,1 +.#???????#??#? 3,1,5 +?#.???.#.????#? 1,2,1,5 +.???#???##.??????.# 6,2,1,1,1,1 +.??????????? 1,1,4,1 +..??????????#?#?#?#? 6,10 +???.#????#.# 1,3,1,1 +#???????##?#..?? 1,1,5,1,1 +??#???#?#?.??...??# 10,1,2 +?#???#??..?????#???. 7,3,2 +???????????#??. 1,2,1,1,1 +#????#???##??.?.?#.? 1,11,2 +?????.??.???.?# 5,1,3,1 +?.#?#?#?#?#?#??? 1,1,1,3,5 +??.????.???? 2,3 +???????#??#? 1,3,2,1 +???.??#???#? 1,4,2 +??.??#?#.#????? 1,1,1,2,3 +???#????.?????.?.??? 5,1 +???#?.???##???####. 2,10 +.??#..?.???? 2,2 +?#.???#??##??? 1,7 +?????????##?? 3,1,3 +.?#?#?.?.#? 4,1,2 +.?.?#??.????#?? 1,2,1,3 +?#?#?????.??#?.??? 7,3,1 +.#???????#????.#..?? 3,4,3,1,1 +?.?#.????.#??#???# 1,1,1,1,6 +??##??#???#?#..# 4,7,1 +????#????. 5,2 +??#?#?.?.?..??? 2,1,1,1,1 +##????#?##??? 2,1,1,5 +??#..?#?##??? 2,8 +?.??#??????#?? 6,2 +??.?.???.??? 1,1,1,1 +?.?????#??? 1,4 +??#???????#??????? 1,7,1,1,1,1 +????..??.?????.#?? 2,1,1,1,1,3 +?#?#??.???????? 2,2,6,1 +??.??#?????##?? 2,2 +???.???????????.?? 1,2 +??##??????#?#??.# 2,1,2,3,1 +??????#??#? 3,1,1 +??.?????##????##??? 2,14 +?#?.?..??? 1,3 +?.??????#? 2,1,1 +??.??##.?? 2,2,1 +.??.??.??? 1,1 +.?#????#??. 2,3 +???????#???.#? 3,2,1 +??#???..?? 6,1 +...?#???###????? 2,4 +#?.?.???????? 1,1,1,2 +?????#????#??.?? 7,2 +.?????#??.???????? 4,3 +?###??.?.?.?##??#?? 3,1,1,7 +??#?#?##??...??? 9,1 +?????#?#?????.?##? 12,3 +???????????..#??. 8,3 +?#??#?##???#??? 7,1 +??????###??## 1,10 +?#??????#????#####.? 2,2,1,8,1 +.?###???..??#???.? 4,1,3 +?.???????? 1,6 +???#??#.??#?##??.? 4,2,7 +??.#??#??##??#?##. 2,2,11 +??.??#?#... 1,4 +.?.#?#?.?????#? 1,4,5 +.?????.???#?#?#??#? 4,9 +??.#?????#?#????? 1,12,1 +???#???#????.#???? 1,7,1,1,1,1 +??.?????##?.?..#?#.# 1,1,3,1,3,1 +.?#??##?????###?# 1,7,3,1 +#???????????#????#?? 1,2,1,1,1,7 +####??##???#??. 9,4 +???#???#?.??#? 4,3,1,2 +???..#???? 1,1,1 +?#????#?.????.??#? 3,1,1,2,1 +.?#????##? 4,4 +??.???.??? 1,2,1 +.??##??.????#??? 3,1,8 +????????#? 1,4 +.#????#???????.?.? 6,1,2,1 +??.??????##??#?#?#? 1,1,8,3 +??????###? 1,3 +???#..#??#.??.?#? 4,1,2,1,1 +?.##??#????..##?? 7,2 +#??#????#?? 5,2 +.#??.?#?#???? 2,3 +?.??#??##?????.??#? 3,2,2,3 +?.#???##????.? 10,1 +.##???.#??? 5,2 +??#?????.?#.???.?# 2,2,1,1,3,1 +?#?????.#??#???#???? 1,10 +?##?#..???#??#??#??? 3,1,1,6,1,1 +?.?????#?????????.. 2,3 +????#??#????#???. 1,12 +.#?????#????????###? 1,11,3 +#?#??.??###?? 3,1,3 +.#?????.??##???#??? 3,10 +.#?.??#??? 2,1,1 +.???##?..?. 5,1 +?.??#??.???? 2,1,2 +?.??.#?.????#?????# 1,1,2,1,9 +.??????#?#????.?#?. 8,1,3 +?##???????.#. 3,3,1 +#???????#.???? 9,3 +?#???.##??#??? 4,7 +????.?#??.?.#?#??? 2,4,5 +.?????#?#??#?????# 7,1,1,1 +#??..???#??#? 3,4 +???.??##?????##??#?# 3,7 +?#?#.??.?#.?#.? 1,1,1,1,1 +#.??????????? 1,4,3 +...???????##??#??#.. 1,12 +.???###????#??##???# 1,15,1 +???.?.?#?##..#? 3,5,2 +..??????.??#??. 2,2,4 +##???#?#?????? 8,3 +???.???#??? 1,4 +???.??.?#?????.#???? 2,1,3,2,1,1 +???#?#??#.? 1,6,1 +??###?????#?##.???# 10,2,1,1 +???##???..#??? 4,2 +?##??#.?#?##? 5,5 +??????.?#.?.?.? 1,1,2,1,1 +???.?#?#?.?.? 1,1,2,1 +???.??#?.?? 1,2,1 +?#????.?#.??? 5,1,1 +?.???.??#? 2,2 +??.??#??????#????##? 1,16 +????.????.??.?.#?#?? 1,4,1,1,1,1 +.??#??????? 1,3 +???.?????.. 1,1,3 +#??#?..???#?..?? 4,1,2,1 +??????#.????? 7,1,2 +?###???..?#?? 6,2 +?????????#??#.?? 1,1,4 +.????#????. 4,2 +.?#.?..??#.?##??# 2,1,2,2,1 +#?#?????#??#?.?#.#? 6,1,2,1,1 +????.#???#???? 2,1,2,1 +???#????????..#?? 8,2 +??##?#???.?#?..???. 6,3,2 +????.??#??#.?#??? 4,6,3 +???##??##?? 5,3 +???????.#..#???# 3,1,1,1,3 +?????????? 2,1,1 +#??#????#?#?????#? 11,1,3 +#??#??#?.???##??? 1,2,2,7 +#?.???#?##?##?? 2,1,9 +..??..??..?? 1,2 +.????.?#?#?.?. 4,5 +#???#??#???.???#??? 2,4,1,1,1,1 +.??#..??????#???#?. 3,1,9 +#???????#.????? 2,1,1,2,1 +??????##????#??.??. 8,1 +???.??#?...?#?#? 3,4 +?.??.#??#? 1,1,4 +?.??#?#??.??? 1,4,2 +?##??#??.????.??? 6,1,4,1 +??.?????#??? 1,3,1,1 +?.?????????#?#??? 5,8 +?.?????.#?##?. 1,1,1,4 +.?????##?#??.? 11,1 +.?.??#?????????# 1,1,1,5 +#?#????..?#??#??? 6,5,2 +?#??#??#?#?.???#??? 10,2,1 +.??????#.? 4,1,1 +????.?#.????? 2,1,4 +???????.?##? 2,4 +?#????#???? 4,4 +?.?#.???.?## 2,1,3 +?.????#...???..??. 4,1,1 +?#???#????#. 8,1 +?#.??????.?####?. 2,2,2,5 +??#?????#.?? 5,3,1 +?#????#??????#..?# 7,4,1,1 +#?????.???#?##?? 1,1,1,2,4 +##?#????.???. 8,1 +?.???????##??? 3,6 +???????##??#???. 1,7,1,1 +#?????#?.??##??????# 1,5,7,3 +.???????.# 2,1,1 +??????.?#?? 3,2,3 +??????#????. 7,1 +??#?.??.??? 3,2 +..??????#?#???#.? 9,1 +##?#??..#.? 5,1,1 +?#??#.????.???? 4,1,1,1,1 +?????#.#.?.??? 2,1,1,2 +???###?..??. 4,1 +??####?#?????#? 7,1,1 +??###?#???.#???????? 9,1,2,2 +??.??.?..####?#??? 1,6 +.???#?????????????# 3,2,1,1,1 +??#.????.????????? 2,3,5,1 +.?..?#?#??????#??. 1,10,1 +#?.???#..???. 1,4 +?#????????#?.. 5,5 +???#.#??#?##???##. 3,7,4 +.??###?#?.?????..?? 6,4 +???.???##???.??# 3,1,5,1,1 +..????.???? 2,1 +?#..?##??.#??#? 1,4,2,2 +????..??#?#?? 1,1,2,3 +#???.???????? 2,4 +..??????#??.???.??? 7,2,1 +?.#???????.. 3,2 +??????##????? 9,2 +??.#.??.?#???#?# 1,1,3,3 +????.#.???? 3,1,1 +#??.?##??#??#.?? 1,1,9,1 +?.????..??.???? 1,3,1,1,2 +??.???##??.#????? 1,5,4,1 +???.??.?????.?.???# 3,1,2,1,1,4 +?#.#???..??#??#? 2,1,1,4,2 +?.??.?..?????.???. 1,1,1,5,1 +.?#???.??.????????? 4,1,1,3,1,1 +???.?#.???. 2,1,3 +???.?#??????# 1,3,1,2 +????????.?????. 5,4 +??#.??.??? 1,1,3 +??#?..?#???#?.? 3,4,2 +????#??##???????? 7,1 +#??????##?.## 1,1,3,2 +???#.?????# 3,4,1 +#?#?.??????# 1,2,3,1 +?.??#..#..?? 2,1 +?????????.?????..? 7,1,1,1 +?????.???.??#??.??# 2,1,1,1,3,2 +?.?.??#?.#?# 1,1,1,3 +????????#.? 6,1 +#.????##???????? 1,5,3,1 +..???#.?.#?#??#??# 4,1,4,1,2 +.?.#?.??.??? 1,2,1,2 +??#??.?#???.. 2,3 +???#??#????#? 7,2 +??##?.??#? 3,4 +?.????#????.#?#? 1,2,3 +.???.???#?#????? 2,5,1 +.##.??.#.##? 2,1,1,2 +??????#??????##?.? 1,4,3,4,1 +???????#???.?#?# 6,4 +??..?????????.#??#. 1,8,1,2 +????????.? 1,2,1 +??##??##???#?.??#??? 3,6,6 +.??#?#???????? 3,2 +.??????.??##???..? 5,4 +????????..? 2,4,1 +.#?????#?#??????? 1,9,2 +?#####??#???.#?? 7,1,1,1 +#???.?#.#.?#?#?###?? 1,2,1,1,8 +.?#?????.??????? 6,4 +????.?.??##.????#?. 2,1,3,1,2 +???????????????#. 5,1,4 +.?..?.?##????? 1,1,4,2 +..???????? 2,2 +??.??#?#.? 1,5 +?#???.#####??? 3,5 +??..#?#?#???#??? 1,3,8 +.????????.???#? 2,1,1,1,2 +?????.#???????#.#. 1,2,1,2,1,1 +????#???#??#.?? 6,5 +??.?#??#??#?.??#?#?? 5,2,4 +???###??#?#????. 8,5 +.??????##.????#??.# 1,5,1,3,1,1 +.?????..?????? 1,1 +??##?.?.?? 3,1,1 +???#??###??????##??? 1,6,8 +.????#.???????.?#?#? 1,1,1,6,1,1 +???#..?#.?.?? 4,2,1 +?.?.#.?#?## 1,1,5 +?#???.?#?? 4,2,1 +?#?#?#???#?.??#.??# 5,2,1,1,1 +.???#?.?##?? 1,5 +?#???.?#.? 4,1 +.##??#?#...?? 7,1 +?##?.?.?.?#?..??. 2,3 +??#?#.??#?????? 4,2,2 +?#?###?.????.? 7,1,2 +#?.#?#?.?#?.#? 1,4,1,1 +...#?#???.???? 4,1 +.#?????#.?##??? 1,1,3,3,1 +.??#????###?????? 3,8,1 +?.???#??????????#??? 4,9 +.##?????#?? 5,1 +??.????#?????.?.. 1,10,1 +.??#?#?????..#.?.??? 2,3,1,1,1,2 +??????#???? 2,3,2 +??#??????#?????# 6,1,1,4 +???????.?#.??#?# 2,2,2,1,1 +?#.????#?? 2,6 +??#????????.. 5,1,2 +?????#????#??#?.?#?. 8,5,3 +??##????#?..? 5,3 +.?????.????#? 3,4 +...?.?????????#???. 1,8 +#?????#??.. 7,1 +.??#????????? 4,1,1,1 +?#.??????.???? 2,1,2,1 +#???#?#?#?????????? 9,1,1,1,1 +??.?.??..??#.?# 2,1,1,3,2 +?#?#??#???#.????.?? 10,1,2,1 +.???#.?????.? 3,3 +???#??##??.????#??#? 8,1,1,1,1 +????..??????#?? 1,2,2 +?#.?.?#..#??#?.? 2,1,1,5 +????###.#..? 1,4,1 +.????????? 1,1,1 +?.?...????? 1,2 +??#??.??##?? 3,6 +?.????#??#?.#?? 1,9,2 +?###??????#.???. 11,1,1 +?????#.?????? 3,1,1,1 +?.##..?????.?#..?? 2,1,2 +??#??#?????..? 4,1,1 +?##?#?#??.??#. 5,3,3 +.??.#????#???#???? 2,1,7,2 +?.#???????????????? 1,1,9,3 +.???#????##.? 1,2,2,1 +?#?.?.???#??#?..?.?? 1,1,6,1,2 +??#?????????#??? 4,1 +??????.??###?????.#. 3,1,1,3,4,1 +?????#.#.?.?#? 5,1,1 +????####..?#..#?# 7,2,1,1 +#???..??????...#?? 2,1,6,1,1 +?????#??.? 5,1 +.??#????#? 4,1 +???.#???.??#? 4,2 +.#????#??#?????? 3,3,1,2 +?????.??????.???? 1,1,3,1,2 +?#.##?#?.#####??# 1,4,8 +??.#????...?### 1,1,1,4 +#??#?#??#?.? 6,2,1 +????#???#?? 5,1 +#???#?#????##.?.? 13,1 +?###????#???. 4,6 +????????##???????. 1,4,2 +#?.????#.???? 1,1,2,2 +.????????#? 1,2,3 +?????##?#.??##?. 8,4 +?#??#?#????? 1,1,1,1 +????#??#?#? 1,5 +#??????#?#??????#??# 4,8,3,1 +?.?###??.????????? 3,7 +??#???#?????.?###?? 1,1,2,1,4,1 +?.??..?.??.????##.?? 2,1,1,6,1 +??#??????? 1,5 +???##??##???.#??#?# 8,1,6 +.?.??#?##?#?? 6,1 +????????##????#?# 1,1,9,1 +????.#?##?.?? 3,5,1 +??#??.????..?. 4,3,1 +#??#??????#??? 1,1,1,3 +###?#.?..#? 5,1,1 +?????#.??????#?#? 1,2,1,5 +#.???#??#. 1,3,1 +.??#?##????? 6,1 +?????#????..?? 7,1 +???#??#?#??#??.??? 1,2,3,2,3 +??????..#????#??.? 2,1,1,2,4,1 +?#.##?##??????.? 1,5,1,3,1 +??#??##????.????# 8,1,1 +???????#.#??#? 1,3,2,1 +?##?.?#???#???????? 2,2,3,2,1 +.#??..??.????#? 3,2,1,1 +???????.??????#.###. 3,3,1,5,3 +??#.#??#????. 2,4,3 +#.#??#????#??##????? 1,1,2,1,6,3 +##?#?.#?#.#.??? 5,1,1,1,1 +??????????##??#.?# 5,2,2,2,2 +??#.??#?????#?#?? 2,7,4 +???.???????.??#? 1,3,2,3 +?#.#??...?#.# 1,1,2,1 +???#?????#?#???#..## 3,9,2 +#.???????#. 1,7 +.??#????.?.????.?? 2,2,1,1,1,1 +?????..??. 1,1,1 +??#.???????#.? 2,5,1 +?????????? 3,1,3 +#.?.??##??.? 1,1,4,1 +??.????????#????? 1,2,3,1,3 +.#####????????? 6,1,2 +##????##?.?#.??? 9,1,2 +??#??????? 2,1,1 +????#?????????.?#. 14,1 +?##???##?.##??. 7,4 +#.?#?##??#?####???# 1,14,1 +.?##?.?????# 4,1,2 +.?#.#?.???# 1,1,2 +.?..???????#?.?# 1,1,6,2 +??##?#?????##??.???? 6,2,3,2 +??#??????.??#?? 7,2 +#.?.?..#?.??#?#?#. 1,1,1,1,5,1 +?.?#???????? 2,4 +????#??..???#?#?. 1,4,1,1,1 +???.?????# 2,6 +???#???##..?????..?? 2,3,3,1 +??##?##?#???###? 5,7 +.??#??##??#?. 2,5 +.#???#?#?????# 1,11 +?#?#?.?????.????#?? 2,1,2,1,7 +??#?????????# 3,1,1,1 +.??.????#? 2,2,1 +????????#????? 1,7 +?????.##???#?#? 1,3,3 +????#..??#??? 1,1,2 +?#?.?.#???# 2,2,1 +#..??.??????#. 1,2,1,4 +.##?.??#.?#.?? 2,3,1,1 +..?#???#???###.????? 12,1 +????.????#? 2,1 +???#.?.??? 1,1,1 +.??.????.# 1,1,1 +????.???.?.???##??? 3,1,6 +??#????.??.? 4,1 +#.?..###?? 1,1,5 +?????????..#.? 1,3,1,1 +???.###?#??.?. 1,6,1 +????????????#?##???? 3,1,9 +??.??.???? 1,2 +??#?.?????.???????? 4,5,2,4 +????#?#.?#####??. 5,7 +?.#?????#??? 1,3,1 +#????#??.?? 1,1,1 +.??????.????# 3,1,2 +??#?#?????#?.???#### 10,6 +?.?????#?..? 1,4 +???#??.#??#??? 2,5 +##?#?.#?##??##?????? 4,8,3 +???#???.??????## 3,1,6 +.???#??.??. 1,3 +.???#?.??.?#??? 1,2,2,1 +??#?.??#.?#.??##??? 3,2,1,5 +?###??#???###?#???.? 8,8,1 +###?.?.???..??.? 3,1,3,1,1 +?#?.?.##????#???? 1,1,4,2,1 +???????.?? 1,4,2 +.?#???###??? 1,4,1 +#.????.???#.# 1,1,4,1 +??#?#????.?#?.? 1,5,1,2,1 +.?#?#?#?##? 4,1,3 +????????????#?#????? 1,1,8,1,1 +#.????????? 1,2,2 +?##??.???? 3,1,1 +????..???.?.###?# 2,2,5 +#?#????##.#?? 5,2,2 +???.#????##?????..#? 1,1,6,2,1 +.#??.??.?? 1,1,1 +#????#??##??? 1,2,4 +?#????.??????.? 5,4 +??.?#???#?..?# 1,5,1 +?#???????????#???? 4,1,5,1 +???????#?.? 5,1 +?#??#?????.#??.#?? 5,1,1,1,3 +???.??????.?? 3,1,2 +?.???.#??? 2,3 +?.#.?????? 1,2,1 +#??#.??.#???. 1,2,3 +#???.#.?.?#?. 1,1,1,2 +?##??????.?#.?? 2,4,2,1 +.?#??#.?#??????? 4,4,3 +#????.???.??#???#.? 2,1,2,4,2,1 +?????.?????# 1,1,5 +#???#.#?.?????????? 2,2,2,9 +?#????????.?#.#? 7,1,1,1 +##?.????#?.?#??. 3,4,3 +???##??#????#?????? 11,5 +.??.??#??##.?? 1,7,1 +#??##???#.?.? 5,2,1,1 +???.??#????##??.?# 2,1,1,6,1 +??##?#????? 3,3 +#.?#??.????#??# 1,3,1,1,4 +..##?#??.?#? 5,2 +??.??#????. 1,4 +???#?.????? 4,2 +#?..????.?#??#?#?#? 1,3,9 +????##???#.?#?? 7,1,3 +?????#???????.?? 1,5 +??.??.????##??#???? 2,10 +??#?###?.?# 3,3,2 +???????#???.??.. 7,1 +??????????#.#?? 4,1,1,1,2 +?#?#?#??#??.??##??#. 9,5,1 +?.##?????.? 2,4,1 +#.???.???#??#?#?#??? 1,1,12 +?.?.?#???#?#?#.?#. 1,1,1,4,1,1 +???#?#???##????#??? 6,4,4 +?.????##..??.## 1,1,3,2,2 +.????#.?.??? 5,1 +?????..?.??#.?#? 1,2,1,2,1 +?.??#?????.?#? 1,5,1,2 +.????##?????#?? 1,4,2,3 +??.??.???.?#?? 1,3,3 +?.#????.???#??.#???? 1,1,1,6,1,1 +..#?????????##???## 1,4,4,3 +###??.##??#?????. 4,2,6 +?..?#????.??.?? 1,2 +.?#?.#????????.??? 3,1,3,1,1 +?#?????#?##?.###?#?? 3,7,5 +##??##??????#??..??? 13,1,1,1 +..#??.?#????#??? 1,2,6 +?????#?#?????##?.##? 1,7,1,3,3 +?##?#?#?##? 6,2 +.??#??..???? 4,2 +.#?##????.???. 1,3,1,1 +??##??.?#.? 4,2,1 +???.???#?# 3,2,1 +.????..?##???#??#. 2,10 +?##?????#??.## 5,2,2 +??????.??? 3,2 +??#???..?.??? 1,1,1,2 +#???????#?#?????# 1,1,11 +?##??????#?.??? 4,1,1,1,1 +?..??#???#????.?### 9,4 +?????????????#??.?? 1,1,1,4,2,1 +??#.#.??????.????? 2,1,1,1,4 +?.....?????? 1,1 +#???.??##? 3,2 +???.???.?#? 1,3,1 +??.???.??..? 1,1,2,1 +#??#???#?#??##??? 4,4,2,1 +.????????. 1,3 +.#?????.???#? 2,1,2 +?.?.???#..?. 1,2,1,1 +?###????#.??????? 7,1,1,1,2 +?##?#????###??.?. 6,3 +???#?.?#??. 3,1 +??#???#?.?.? 6,1,1 +?.??????????? 6,1 +...???##???.?. 5,2,1 +???.???.?.???## 1,1,1,1,3 +???.?##??#? 1,2,1 +###???.?#??#?? 6,5 +...?#???.??????#? 3,2 +??????#?????????? 8,2 +.?????#??#.??.#? 1,5,1,1,1 +###???#??#??????? 4,4,1 +.????###?# 1,3,1 +??#????#?#?.??? 1,3,1,1,2 +.#???#?##??#?#?# 1,12 +##.???#??.??..# 2,1,1,1,1 +???#.##???? 1,3,1 +???###???.?.##??.?# 1,7,1,2,1,1 +?.#.?#?#?..?..? 1,1,4,1 +???.??.?#?? 1,3 +??????#???#. 1,3,1,1 +?????#.#????#??? 5,4,1,1 +.?.????#???. 2,3 +???.??.?## 3,3 +?????#?.????#?#? 5,6 +???#?.???#?? 2,6 +...?????#.? 1,3 +#???#????#? 1,2,1 +??##????????###??. 6,1,4 +??#????#??? 1,3 +??#???#??????#?#? 7,7 +??####.?.?? 6,1,1 +.?.?.#?#??.?????? 4,2 +#???..#???.?? 4,3,1 +??..?#??#???##? 1,6,3 +??????#?#? 1,1,4 +?.???#?.???????? 1,3,2,1,1 +????????##????? 1,5,1 +????#?#?#???#.?.#? 11,1,1 +?????#??##??????# 1,3,3,3 +?.???.?#.????#?#??# 1,1,1,1,8 +.#?#??????#?????. 5,3,2 +.??###?????#??. 3,2,3 +?????#?##??#??? 1,1,1,2,4 +??#?.#..????#?.?#? 3,1,6,2 +?##??.????? 2,3 +?????#?###??#? 2,8 +.??#?#??.????.? 6,2,1 +????#?.?#???##??? 1,2,6,2 +??????..?#..? 2,1 +?.?????#???????? 1,4,2,1 +#.??????.?????#? 1,2,2,6 +#?.?.??#?.????? 2,1,1,2,3 +?.????#???#??????.#? 12,1 +?#????#??#.???#.##? 7,1,1,1,2 +?#???#????????.?? 5,2,4,1 +???????????# 3,1,1,3 +.???????.? 2,1,1 +?#????#???????? 2,1,3,1 +.##.?#??.#.?# 2,1,1,1 +??#???#???.????. 5,1,1,1 +..????..?????? 1,3 +#??#??#????.?.# 5,1,2,1,1 +??#.?#????.. 2,3,1 +?#.??????? 2,1,1 +????.?#???#?? 1,2,6 +????#?#?..?#? 4,1 +??#?#????#?#????. 8,7 diff --git a/src/day-12.lisp b/src/day-12.lisp @@ -0,0 +1,52 @@ +(defpackage #:aoc/day-12 + (:use #:cl #:aoc/utils) + (:export + #:possible-arrangements + #:day-12)) +(in-package #:aoc/day-12) + +(defun parse-line (line) + (let* ((space-pos (position #\Space line)) + (springs (subseq line 0 space-pos)) + (groups (read-number-list line :start (1+ space-pos)))) + (values springs groups))) + +(defun possible-arrangements (springs groups) + (let ((count 0) + (length (length springs))) + (labels ((next (springs pos groups &optional (current-group-length 0)) + (when (>= pos length) + (when (if groups + (and (= (length groups) 1) + (= (car groups) current-group-length)) + (= current-group-length 0)) + (incf count)) + (return-from next)) + (let ((current (aref springs pos)) + (next-pos (1+ pos)) + (not-in-group (= current-group-length 0)) + (group-filled? (and groups + (= (car groups) current-group-length)))) + (when group-filled? + (pop groups)) + (cond + ((char= current #\.) + (when (or not-in-group group-filled?) + (next springs next-pos groups 0))) + ((char= current #\#) + (unless group-filled? + (next springs next-pos groups (1+ current-group-length)))) + ((char= current #\?) + (when (or not-in-group group-filled?) + (next springs next-pos groups 0)) + (unless group-filled? + (next springs next-pos groups (1+ current-group-length)))))))) + (next springs 0 groups)) + count)) + +(defun day-12 (input) + (loop for line = (read-line input nil) + while line + sum (multiple-value-bind (springs groups) + (parse-line line) + (possible-arrangements springs groups)))) diff --git a/t/day-12.lisp b/t/day-12.lisp @@ -0,0 +1,8 @@ +(defpackage #:aoc-test/day-12 + (:use #:cl #:lisp-unit2 #:aoc/day-12)) +(in-package #:aoc-test/day-12) + +(define-test test-day-12 + () + (assert= 1 (possible-arrangements "???.###" (list 1 1 3))) + (assert= 10 (possible-arrangements "?###????????" (list 3 2 1))))