commit 463993444e964640d417d840a2eb592680047fa4
parent a94658845d70a2abb88f966d8378681a780ae91d
Author: Lukas Henkel <lh@entf.net>
Date: Tue, 12 Dec 2023 07:11:33 +0100
Day 12 task 1
Diffstat:
A | input/12.txt | | | 1000 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
A | src/day-12.lisp | | | 52 | ++++++++++++++++++++++++++++++++++++++++++++++++++++ |
A | t/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))))