From 72f7b2b42cf126e1274f7e69cbbcf45b140eed95 Mon Sep 17 00:00:00 2001 From: Shadowfacts Date: Tue, 12 Dec 2023 13:52:54 -0500 Subject: [PATCH] Day 12 --- input/day12.txt | 1000 +++++++++++++++++++++++++++++++++++++++++++++++ src/day12.rs | 306 +++++++++++++++ src/main.rs | 3 +- 3 files changed, 1308 insertions(+), 1 deletion(-) create mode 100644 input/day12.txt create mode 100644 src/day12.rs diff --git a/input/day12.txt b/input/day12.txt new file mode 100644 index 0000000..d52c348 --- /dev/null +++ b/input/day12.txt @@ -0,0 +1,1000 @@ +.???#??????#. 6,1 +???##???##?#??#?#..# 1,14,1 +#??????#????#?###?# 3,1,10,1 +.???????#????. 1,2,1,2 +?##?.??.???.. 3,2,2 +#.?###?#??. 1,5 +?#??#??????????.??.? 7,2,3,1 +???###?#.##??? 8,3 +.##???.?????? 2,1,2 +???.?????????? 1,5,2 +???#????#? 4,1,1 +.????.#.???. 2,1,2 +.????.?.??##?? 1,1,1,5 +??????##?#? 6,1 +?#????#?#?.?#???? 1,2,2,3 +#..??????????????. 1,1,2,7 +????????#?. 1,2,4 +##??.??.??#?#? 3,4 +????#???????##?.??.? 2,1,1,5,1,1 +.?#?????#???..#???? 4,1,1,1,1,1 +?#?????#.#???? 6,1,1,2 +????#?.????? 1,1,2,1 +.??#?.#??. 2,3 +?.?#????.???#####??? 1,5,9 +??.#?#?#??#? 1,8 +?.???.??.?? 1,1,1 +????.?.#.? 1,1,1 +??#???????#?.#??# 3,3,1,2,1 +??#???.??????.? 4,4,1 +#??#??..??????. 4,1,1,1,1 +?????.#??. 1,1,1 +.???#.??#???.? 1,1,4,1 +??##???#..???? 3,2,1 +????..???###?# 1,1,7 +.??.?.##?#..?.?? 1,4,1,2 +?????#?#???##??#???. 3,14 +?#??????#?? 4,2 +?.?#??#??? 2,5 +??#?#???????## 1,1,1,7 +??#?.###??#? 1,6 +#???????#?.#?#? 5,1,4 +#??.???#???.?## 3,1,5,2 +???#????????#??? 4,6 +.#????#??????.?? 3,4,1,1 +?.???.?#?????#? 2,5 +?.???..#?.?. 1,2,1,1 +???.#????#????#? 1,1,8 +??????????#.?.?.??? 2,7,1,1,1,1 +#??##??#???? 1,7,1 +??#?.??#??????? 3,5,3 +??###???????#.#? 10,1,1 +??#.??.??????#?.?? 2,2,3,2,1 +??#??????.??.????? 8,3 +?..#?#???#?? 1,4,1,1 +.?.?#?????#??#? 1,1,1,1,4 +????#?.#??? 4,2,1 +?.???###?.? 6,1 +??.???????..???. 4,2,2 +????.#????.#. 3,4,1 +????.????.?#?#??? 2,1,1,5 +#???????.?#?#.. 3,1,1,1,1 +.??.??????.#? 5,1 +.?????#.???.##?? 5,1,2 +####????#?????#??.# 5,10,1 +?????.???#.???.?#. 3,1,2,1,1,1 +#?#????#????#? 8,4 +?#?.????????.??# 2,6,1,1 +???????.???.???? 2,1,1,3 +#???#?#???????? 5,1,1,4 +?.#??????..???#???? 7,6 +.??????#??# 1,1,4 +????????????????? 5,1,1 +??????#????????????? 15,1 +?#?????#?# 3,3,1 +?????#.###???# 1,1,4,2 +?#?????.??? 6,1 +?.???.??#??#?#?? 1,9 +?#?.??????#?? 1,2,3 +??#?????????#???.?# 3,3,2,1,1 +?##???.?.?#????. 5,5 +?.????#?###????? 1,7,1 +????.????##???? 4,3,1 +??#.?????###??. 1,1,2,1,5 +.???...??. 1,1 +#?.?#####???#?.#?? 1,11,1 +.???????#?.??? 7,1 +.????.????# 3,2,2 +#????#???.??#? 3,4,1,1 +?#??..?#??. 3,3 +.??.????##??##???? 1,10 +#.#???#?###??.#??#.? 1,1,8,4,1 +???????#????????#?#? 9,6 +#.?.??????.?????#? 1,1,1,1,3,1 +..#?...?#???###.. 1,7 +.?.??#????#? 1,2,4 +..#.#.????????#?#? 1,1,1,1,1,2 +?##?#.?#.? 4,1 +?.#?#?#??#??.??? 1,1,4,1,1 +.?.?#?#???#??.??# 1,9,1,1 +.#?????????##?? 3,7 +.??????.?. 1,1,1 +.?#????###??#???##. 12,1,2 +.????.???.??#?#???#? 1,1,9 +?.???#???#.??? 8,2 +??.?#..???. 1,1 +????##???#??###??.?? 16,1 +??.??..#????? 2,4,1 +?.???.??????? 3,6 +??.???.?#?#?????? 1,1,1,4,4 +?#????.????.?#?#.? 3,1,1,2,3,1 +..?????#?.#?#?#.??. 1,1,1,1,3,1 +??#?#?#????????.???? 11,1,3 +?????.?????? 1,1 +..??#??##???.??#??.. 6,3 +?????.###?.?#???.?#? 3,3,3,3 +???.??#####????#?. 1,7,2 +??????#???.???.???? 8,1,1,1,1 +??????.??.?????.? 5,1,1,1 +..???????? 1,1 +?.#??..????#?#??? 1,1,1,3,4 +.?????????#. 1,1,1,1 +???#??##?#?.. 7,1 +?.?####???.??##? 5,3 +#???#?????..???? 1,3,4,4 +#?.???.??.?#??? 2,2,2,3 +?#?#????????.?#????? 9,1,6 +##??.#.?..?##?#??? 2,1,7 +??#?#.????.??..?.?# 5,1,1,1,1,2 +?.?#??###?????????? 1,7,8 +#.?#.????? 1,2,3 +?.???#?#?.?#.?. 3,2 +??????##?#??#??.?? 1,10,1,1 +?.?#?#?#??####???? 1,11,1,1 +#.????????##.#???? 1,8,1,1,1 +???#.???.??????#? 4,1,5 +?#?????###?.? 5,3,1 +..??????.?. 3,1 +#????#.?????.#?... 1,1,1,2,1,2 +??#.?????#??? 1,1,1,5 +???..????? 1,1,1 +??#?????#??... 4,3 +?.#???#??# 1,1,5 +???#???????##?#?? 1,2,2,1,5 +??????#????#??#. 1,4,2,1,1 +???#??.????? 3,2 +.##?#?#???#?# 8,3 +?.#?...??##?????#?.. 1,1,10 +????#.?.#? 3,1,1 +??#?#?.?#.#??#?? 2,2,1,6 +.#???..?#####? 1,1,6 +#???????#???#?#.. 1,7,2,1 +.?#???.???##??#???? 3,1,1,7,1 +???#.?????#? 1,1,1,1 +???.??######?????. 1,11 +#..???.???? 1,2,1 +??????#??.????#? 2,5,1,3 +#?.?.?.?????.? 2,1,2,1 +??#.???.???.? 2,2,1 +?#?????#?#?????????? 3,13 +?????????#??.?.? 1,1,3 +##?##???..??.??# 6,1,3 +??#?.???.?. 1,2 +??.#??#???##??. 1,1,1,5 +.??#?????#?..# 7,1,1 +???.??.???????? 2,1,1,1,1 +#?.?#?##?????? 1,9 +????#???#??.??????? 11,1,2 +??#?????#??#.###?# 10,5 +?#..????????? 2,3,2 +.#?.????????.??.? 1,4,2 +?###?.##?##.#?.???.? 5,2,2,1,2,1 +??#???????#??#????# 1,1,1,1,8,1 +??.??????#? 1,1,2 +???.??#.??.????.??? 1,1,2,1,4,1 +???.#.???????# 1,1,8 +??.??#.??#..? 2,3,3,1 +?.?#??.##?##? 3,5 +#.???????.?? 1,2,3,2 +###?.?#??#? 4,5 +?#?#.?#?## 3,5 +???????????? 2,2,4 +?.?????#??#???? 1,3,1,1,1 +???##?#?.?#.??# 8,1,1 +#??#?.?... 2,2 +???#??????#????.??? 4,6,1,2 +??.?#.????#. 1,1,1,1 +.??????#?.#?????. 2,5,1,1,1 +?????#??.?###?##.?#? 2,5,6,1 +#.?????.?.????????. 1,2,1,1,5 +.??#?????????#???. 3,5,4 +??#?.??###????#??#.? 1,13 +??##??.?.#?.?#?? 5,1,1,1,1 +..??..???#??#? 1,6 +?????????. 1,2,2 +?#??????#????????? 1,3,1,1,1,1 +??#.?.??????##?? 1,1,3,3 +?##????##????? 4,4,2 +???##????.?????. 5,2 +??#????#????? 6,1 +????????????????#??? 5,2,2,3,1,1 +???????#????#???? 4,2,1,1,2 +.?##?#?###?.?? 9,1 +??#??????.#?? 1,1,4,1 +????##???.? 6,1 +?##?.?#?##?? 2,6 +..???.???.##.? 3,1,2 +.??##??.?#?? 4,2 +?.???????.?#???? 3,3,3 +??????##?????# 1,6,2 +????#?#??#.????#.?#? 6,1,2,1,2 +??.#??????? 1,7 +.#????????? 5,1,1 +?.???##?#??????.? 1,10 +??#?#?.?.????????? 3,7 +??#???.?#?#????.???? 1,4,2,1,3,3 +??#????.???#? 5,4 +?????????? 1,2 +??.#.??.??? 1,1,2 +?.???..??.#. 1,2,2,1 +?#???##???#?#??# 6,1,1,2,1 +???.???.?#. 2,1 +?.???###?#?# 1,3,1,1 +??#?????....??#..??. 6,3 +.?.?????.?#???? 1,1,4 +?#?..##???#.????#? 2,2,2,2,2 +.???#?#??.????? 6,1,2 +???#?.#.?#? 3,1,1 +???.??????#???#????? 3,1,3,1,1,1 +.?????..????? 1,2,2,1 +#????#?#???# 1,1,7 +???#??#????#???##??? 7,10 +????###?#??? 4,4 +..?#?#?.??# 3,2 +?#.?#?#?????.. 2,5,1 +????????#?###?# 2,3,1,5 +??????????.#????#?# 1,1,2,1,6,1 +???.???##???# 2,6 +##?.????#????#???? 3,2,1,1,1 +?.???#??.?. 1,6,1 +?#???.?#.#?#??#? 5,2,1,4 +.#?#??.?????#???. 3,7 +?#.?#?#..? 1,4 +.???###??#?#?????#?? 7,11 +#?.?#???#??##??##?## 1,2,1,2,6 +#??#????#???.# 2,4,3,1 +.?##?????#?.#?#?? 3,1,4 +.?.??#??.?#??????# 1,3,1,2,3,1 +???.??##??#.???? 1,1,5,1 +?#?#?..?.#?# 5,1,1 +.???#?.##???. 3,4 +??#?.?##???? 2,2,1 +??#?##?.????.?#?? 7,1,1,4 +.??????#.#????#?.?# 2,4,1,1,1,1 +?.??????##?? 2,1,4 +???##???#????? 9,3 +#???#??#?.? 1,5 +...????##??.? 5,1 +.#?.?.?????##?#. 2,1,3,3,1 +.##..??#??#?##. 2,4,2 +#??#?.?#.?#???#?##?? 1,1,2,1,2,4 +???.?#??????? 1,2,1,2 +#??.???..??????#? 1,2,8 +????.?#?.?? 1,3 +?###.##??. 3,3 +??#???.????.????. 2,1,3,1,2 +.???##?.??#??? 3,2 +.?????????. 3,1,2 +#???????.?#??????# 3,1,1,3,3,1 +.???.#????#?#?? 1,1,8,1 +????????#??##? 1,5,3 +?#???#?#.#?.??#?.?? 7,2,3,1 +???#???#????#?? 3,4,1 +.?.?###???.. 4,1 +.#?##??????..? 4,5 +.????#??????? 2,1,1,2 +?.?.?????..?.. 1,5,1 +.????.?#???#?????# 3,5,3 +?.???#?#??? 1,2,1 +?.?.?????????????? 1,1,1,5,1,1 +?????????. 1,2 +#?##.??##???#?. 4,1,7 +???.????#.? 2,2 +?????.?????? 1,2,1,2 +??..?#???? 1,2,2 +?????#????.?#??????. 1,1,1,3,3,1 +?????##???? 3,5 +?????????#?? 2,3,1 +###?.?#???.?? 4,1,2,2 +????.????#?????#??#? 3,1,3,1,1,2 +??#?##??..?. 1,6 +??#?.?#?????.???. 4,4,1,2 +??????..#?##??.?#? 3,1,5,1 +???#..?????? 4,2,1 +#???#????????#??? 2,2,8,1 +?.#???#????.? 5,2 +??.???.##??? 1,4 +?.#??.??????.? 1,1,5,1 +??#??#??#??.???? 9,1 +.???#?#?#?.????? 8,2 +?##.??????? 3,1,4 +?..??#?#?????? 7,1 +??.???????##?#?? 1,3,8 +?.?##?.?#??.# 1,2,2,1 +#?.?.?##?#?. 1,1,6 +??????#????..?. 3,6 +???##.?.?.#??#?##? 3,1,1,5 +???????###??. 1,1,6 +????#???#???###??? 9,3 +..?????.?.???# 1,3,1,4 +?#?????.?#?.?#.??? 2,2,1,2,1,1 +.??????.?????#?. 1,6 +.??.#???????#?? 1,1,5,1 +##???.?#?# 3,1,3 +.???????.??#? 2,3,3 +?#####????#???? 6,4,1 +#???#..#?? 5,1,1 +?.###??#.??#???? 6,4 +?###??.?????.??? 5,3,1,1 +?#?#???#.??.????.??? 1,5,2,1,1,3 +????#??#??##??? 1,10 +??#?#?.??##??????? 2,1,8 +.??.??##?? 2,5 +?.??#???????# 1,2,2,1 +..#?.???#????? 1,9 +???#????.?.?.#.?.? 5,1,1,1,1,1 +.?.?#?????????.?.#? 1,6,1,1,2 +?.#?#...?. 3,1 +#?????.??? 6,2 +??.?????????? 1,3 +.?##??#??#??.??????? 10,2,1 +??#.???#???.? 3,2 +?.####??????#?.#??? 1,5,1,1,1,1 +?##?#?##????????. 11,1 +?#????????? 2,1,4 +???#??.????? 5,1 +???.#??????#??? 2,2,2,3 +??..???#?#.????#? 1,1,1,1,5 +????.?.???#??.# 1,1,2,1 +###.???.???# 3,2,1 +.?????.??#?? 4,3 +???#?.???..????#?.? 2,3 +????#.#?#? 1,1,4 +??#?#..??.# 4,1,1 +..#?.????? 1,2 +?#..????.? 1,4,1 +?.?#???##????#???.? 2,7 +###????????? 3,3,1 +???#.?#???#?. 3,6 +??#??.#????#? 3,2,1 +???.?#??#?? 2,2 +?.??..#???#?????. 1,1,7,1 +?.????#??? 2,3 +????.????#.? 3,3,1,1 +.?..#??????##??.?. 4,5 +???????#??.? 8,1 +#?..?.??#?.?? 1,3,1 +???????...??#???#?? 2,3,1,1,2,1 +??.??????##??.?? 1,4 +?????#??##?.##???? 9,2 +?##?#????#.#.??? 2,2,2,1,2 +????###?##??.????? 10,3 +??#...?#.# 1,1,1 +?#????#.?????#?#??? 2,1,1,8,1 +.??#??.?.?#?#.?.#??? 2,1,3,1,2 +.???#.?.#??? 4,1 +.???.???#?##?##?#..? 1,2,9,1 +?#??#####????????#?? 10,3,4 +#?#???#?.?#?? 3,1,2 +???#????##????#. 11,2 +.???.##??? 3,5 +#??#?##??????..?#? 8,1,2 +???.?##????#?#?.??# 1,1,8,1,1,1 +???#??????..??? 1,5,2,1,1 +???#?.?????#. 1,4,1 +??#?.??#?#?##???? 2,5,3,1 +??????#?????#??? 1,1,9 +???.??#????#?#? 2,1,1,4,2 +###?????.. 5,1 +?.??#...??.?? 2,1 +????????##?#?.???? 1,3,6,1 +??###?.??.??.??#??. 4,4 +?.?.?#.??.? 2,1,1 +#.???##.###?. 1,5,4 +..?###?#?#??#??.?.? 4,3,3,1 +#?.?.?#?#??.?#. 1,1,1,2,1 +.???#??#.#?? 1,3,1,1 +.????????#??????#?. 11,1 +?#?#?????# 4,1,1 +?????????.?#? 1,3,1,2 +??#?????#??#?????##? 3,1,3,4,3 +??#???.??##.???# 4,4,3 +??????????. 2,4,1 +?#???#.#..??#.? 6,1,1 +??#.?????#????.##? 1,1,1,2,1,2 +.??#????##?.#??.?# 8,3,1 +.?????#??#??.??.?#? 2,2,2,2,3 +?#??#???#????? 1,9 +.?.??#?##??? 6,1 +??????????????# 1,1,1,1,3 +?##??##??## 7,2 +#.#?#???#?.. 1,3,2 +.???#..?#??#?? 1,1,2,2 +?#?####????#. 7,1 +.??????.#??. 2,1,3 +???#?.?##??.?? 5,2,1,2 +?.?#????#??????#??? 1,1,3,2,4 +#?.?.?????##.?#??? 1,7,5 +???#??.?#?##??#? 3,8 +####??..#?.??. 4,1,1,2 +.?.?????#?#?????#? 1,1,12 +?..??????#? 1,1 +?##..????.#?#??. 2,2,1,3 +.???.?.??. 1,1 +#??#?#?#?#???.??# 10,1,1,1 +..?.????.? 3,1 +.???#?????..????? 6,3 +#?#?..##?#.???.???? 4,4,1,1,1 +.#?#?.?##???.#.?? 1,1,6,1,1 +?..???##???#???. 1,5,4 +.##.?###??.???#?. 2,5,5 +???.??????#?????.##. 1,1,7,1,1,2 +??.?#.?#???###?????? 2,8,3 +#?#???.?#.?????#.? 4,1,2,2 +???.???????# 1,2,1,1 +?.??.?#???#????#??# 1,11,1 +??#??#?#?#??????#?#? 14,4 +?#???????#? 1,6 +???.??##??####?.??? 1,9,1 +????????.??#. 2,3 +??##??#?.??? 2,2,1 +.?#??##.#? 3,2,1 +#?##?????## 1,4,3 +.????.#?#??#?. 2,1,1,2 +.??????#?##?##.?? 2,1,7,1 +?.#????.??.??...?? 3,1 +#??#?????.#?.?? 1,7,2,1 +??#????????#?# 1,5,1,3 +?.??.#???? 1,3 +???##?.???????? 2,7 +#.???#????###??#?? 1,6,4,1 +.???..??????#?????? 1,1,3,8 +?.??.???#? 1,4 +?.??.?#????# 1,1,1,3 +#????#???? 1,1,5 +???.#??#?#?????????. 1,1,2,6,1,1 +..#?.#?#??#?? 2,1,1,1 +??##???.??#??? 3,1,1,1 +?###??????#?# 5,1,3 +#??#??#?.???##..? 2,2,1,1,2 +.??#??.??..?# 3,1,2 +.???.??#???#?.??.#? 2,5,1,1,2 +?#???.??.???????#? 4,2,8 +#.#???????#?????.?? 1,1,1,5,2,1 +?##?.##???? 3,2,2 +???.#.?????# 2,1,4,1 +.??.???####??.#.???? 1,9,1,1,2 +?#???#???#???. 3,5,2 +.?.?.????????#? 1,1,6 +???#??????..??# 8,1,2 +????????.?#??#?.? 7,1,2,1 +#?#?????..?.##?#? 4,1,1,2,1 +#?????????? 4,4 +????.?#?????#? 2,7 +??#.????.? 1,2 +#?????#?#?????.?? 1,1,4,2,1 +?##?#???.?###? 2,3,4 +??##.????#??? 3,1,1,4 +??.??#?#.?.?? 2,1,1,1 +?.?????#?? 1,1 +?.??????##?????..??. 1,1,1,7,1 +?##??#?.#???#??? 6,1,5 +??????#####??#? 1,8,1 +.?###?##..????????.? 7,6,1 +??#???.???????...??. 4,1,7 +.?#.?.?#?#??##?? 1,7 +??.#?##?????????#.. 1,1,9,1 +??????#??.??. 7,1 +.?#?#?##??#????# 8,6 +??????.?.???#??????? 3,3 +??????#?..#. 3,3,1 +??#?#???.?#.?# 7,1,1 +???.?.????#??##???? 1,9 +????##?.??????# 6,2,4 +?.?.?.#?##? 1,5 +??.???#.#??####???. 2,1,7,2 +?#??#??##.???????? 2,6,1,1,1,1 +#?????..?????##? 1,1,1,1,3 +#?#?#????#?#? 1,1,3,4 +..?##???#??###??..# 13,1 +.??#??.#?#?.????..? 1,3,1,2,1,1 +?.?.??#?#.???#?.? 1,1,4,1,2 +???.#.#????? 2,1,2,3 +??????##?.??.?.##?? 1,1,4,2,1,4 +??###??.???.?? 6,1,1 +????????#.?????? 1,1,2,1,6 +??..?????. 1,4 +?????#?#??# 1,3,1 +??#???#????? 2,1,4 +???..?#???#.####?#?? 2,6,8 +?#???.????.?.#?#??? 3,1,1,1,4,1 +??####????????.#.? 6,4,1 +??#?#????.?????????? 8,7 +.????#?..?##?.?? 1,2,4 +#?#..#????.?.?.? 3,5,1,1 +???.???#?? 2,2 +.??.###?##?#??????#? 1,12,2 +??.#???.?? 1,3,1 +??##????#????????. 3,9 +???????#??#??.? 1,1,2,1,1 +????#??.?# 2,1 +?.????.#????# 1,1,1,4 +??#???????.#.?.??#?? 6,1,1,1,1,1 +??#?.###??#.???? 4,3,2,2 +?#???.????#?#?#???? 3,1,9 +?.??.##??#??#?.??? 1,2,3,5,2 +?????.????????##? 3,3,4 +??.??????. 1,2,1 +....#???.?#?. 3,1 +.??#????#.??#.?#??? 1,2,3,1,5 +???#?###??.?.#.?.?? 8,1,1,1 +??.???#??##? 2,1,1,2 +???????#?#???? 2,7 +????#??#???##??.?? 2,1,3,5,1 +???.???#####???#??? 1,7,4,1 +???????###??# 1,6 +?????#???## 6,2 +#????.???????? 3,1,2,4 +?#??#?????#.??????# 2,2,2,1,3 +.?.?#?#?#.?????????. 5,3 +??#??##??????#?.. 6,1,5 +??.????????#? 1,8 +??.????##? 2,6 +?????.?.?? 3,1 +?????????#?#. 1,2,1,3 +?.??##.#.# 3,1,1 +?##??.?..#??? 2,1,1,1 +?????.?????#??? 2,7 +??#???#...????# 4,1,1,1,1 +??????#.??#??##?? 1,1,1,6 +??.?#????????? 1,1,5 +?.???#??.# 6,1 +???#?#?.?????. 1,4,5 +.????.?#??? 1,2,4 +??.#??????? 1,1,5 +??????.?????? 2,1,4 +#?#??##??##???? 3,7,2 +?###???##?#??? 8,1,1 +?#?????#???.????#?? 2,7,5 +????#?#?.?.????? 4,1,1,1,1 +???.#.?#?#?? 1,1,1,2 +?.?#??#..?#?.?#?#? 2,2,2,4 +#????#..??? 2,3,3 +?##?????.??#??#.? 3,1,1,6,1 +????.#??#?####??? 1,1,1,7,1 +.???????#????#? 5,1,2 +??#.???#?#?.. 2,4 +????#???.????#?##? 4,7 +.????.??.#?#??.? 4,1,3,1,1 +????.#?#.?#?????#? 1,1,1,1,3,4 +#????#??.?? 2,2,1 +?#????????#??????.? 8,1,1,1,1 +.???????#???#? 1,1,4,1 +.##?#???????#. 5,1,1 +?..??.?.??? 1,1,2 +?#???.?.?????????# 5,1,1,1,1,2 +.?????#???.??? 3,2,1,1 +...??#?????...?????? 4,2 +#???????#??????##?? 1,2,5,4 +#?..##????#?####? 2,12 +.?#.??#????? 1,4 +.?????.???.?? 4,2,1 +.?.?#.???..??#??#?? 1,1,1,8 +???#??#???#??#?..#? 3,9,2 +.?#?#???.?????..??. 5,3,1 +#.????#??.?????? 1,4,1,3,1 +.????.???#? 4,2 +???##.???...???##??? 4,3,4 +?##???.??##?.. 4,3 +??.?#?.??###?##??? 1,2,8 +???#???#??. 3,2 +?????#?#????????. 2,6,2 +.????.???? 3,1 +????.??????#????#? 3,7,1,2 +#??.????.???? 1,2,1,1 +?##??.?.#?.? 4,2 +??????#??#?? 2,2,1 +????????.???#. 5,2,1,1 +.?.#???????#.????. 1,3,3 +.??.???.?.?? 1,1,1,1 +.?.????#?####????.#? 1,10,1,1 +.?????#???#. 2,1,1,1 +##.??#???????? 2,4,1,1 +???#?..???##???????. 4,7,3 +#..??????#? 1,8 +?????.???? 3,3 +?.##?.#???. 3,1,1 +#??????##??# 9,1 +.?????#??? 1,3 +??.?#??##??#???.? 1,8,1 +???###..???#??? 5,4 +?.????????.??#??.??? 1,1,6,1,3,1 +??????.?#.??#?.?? 5,2,3,1 +??????##?#.??####. 2,6,5 +?..???#?#?##?#?? 1,9,1 +??.??.??#? 1,3 +??????#????#?? 1,1,7,1 +?????##.???????##?? 2,3,1,2,4 +?.?????.?#? 1,2,1 +.#?.??#??????.#. 2,7,1 +?.?#?#?#?????.????. 9,1 +.??.???#??.# 1,6,1 +#?#?.??..??#?. 4,2,1,2 +???#?.#.?.???##???? 1,1,1,7 +..#.?#.????????? 1,1,2 +?#..#?###????. 1,8 +?#?.?????????? 3,8 +?.?#???????##.?.??. 1,1,7,2 +#??#????#???#? 11,1 +?#.#???#??? 1,1,1 +?#??..?#????? 1,1,6 +..???#?.??#??? 4,2 +????##????? 1,4,1 +??.?#???.??#?.???? 1,1,1,4,1 +??#?#????? 5,1,1 +#????#??#???#?.????? 1,9,2,1,1 +???#??#??? 7,1 +?##..?.##?? 2,3 +???.????????. 3,3,3 +.#??.????#?####??##? 1,14 +???#?#?#????#. 5,1,3 +#???????#??.???#?.?? 3,7,1,2,1 +????..???????#??# 1,1,10 +?.??????#. 3,1 +?.?..????#?### 1,8 +..?#?.???? 1,1 +??????????##??? 1,1,2,6 +.???????.#????.???#. 1,1,1,2,1,4 +#???????#??.??#?? 5,1,1,4 +?#?#?????? 4,4 +?????#?.?????.??###? 3,2,4,4 +??#?.?#???? 3,1 +.????#.#?#?.??? 1,3,3 +#.??.???????#? 1,1,3,1 +?.?.???.??##?##?? 1,1,1,6 +???#?#???.???? 1,4,2 +???.?##??#????????? 2,9,1 +.?#??#????.???? 2,2,2,1,1 +????.?#???#???.?. 2,3,2,1 +?#.???.????? 1,1,1,1 +?..?????.?.#?##?#? 3,6 +?#.?????#?????? 1,2,1,1,1 +..??#??#.? 5,1 +.?.??#?.#?#???????.? 3,9 +.????????#??#???? 5,3,2 +??#....##?? 2,4 +?????##????? 7,1 +??.???????????#?#? 1,3,1,7 +?.?#???????.##?????? 1,6,7 +?.?..?????????????? 4,5 +???#??.??????#? 5,2,4 +?.???##??#.?. 1,5,1 +????.????#??# 1,1,2,1 +.?##?#???.??.?? 7,1,1 +#???.?.??#???? 1,1,1,7 +??#?.????? 2,3 +?????????. 1,1,2 +.??????.?##?##. 2,6 +??.?#??.??#?##?# 1,2,7 +..???#????#? 2,7 +??#??##????? 2,4,1 +..?..??.???????.?? 1,3 +??.??.????..#??? 1,2,4,2,1 +??#???.????##?? 3,1,6 +.??????##???.# 8,2,1 +#????.###??#.? 1,1,3,1 +#?#????????###?#?? 3,10 +?#???##.??##.?.?..# 7,3,1,1,1 +??????#????#? 2,6,1 +??#?....#?# 2,3 +?????##?.?. 2,2 +??.??.??###.?? 2,1,5,2 +#??#??#?#.?..???? 1,7,1,1 +??????#??. 1,2,4 +#??##??.##? 1,5,2 +???#??#??????.?###?? 8,5 +.????#?##?.# 2,1,2,1 +##.#???.???#?? 2,1,1,5 +#.?##??#??#?????. 1,7,4,1 +?.#????.?#???#?#?#? 1,2,10 +???...??#??? 2,3 +?.?????????#.??? 1,1,2,1,1 +#?????.??# 1,4,2 +#?#???????.?.##?#.# 9,1,4,1 +#?#..?.???????#??#? 1,1,1,1,10 +???##??#?..#? 5,2,1 +???.??####????#? 2,12 +.##???.?##?.? 2,1,3 +?#..????#??##? 2,1,3,2 +?#.????????.??..#? 1,2,1,2,1,2 +?????##?#?. 1,1,5 +??????????#????????? 2,10,2 +??.??#.???????#??? 3,8 +#?#??.?.????#??###? 1,3,1,1,7 +?????.?#?????? 4,6 +???????#??#????? 1,12 +#?#???###.??#. 3,4,1 +..??#????# 3,1 +.?????###????????? 1,13 +#??##.???.????. 5,2 +??????.??? 1,3,1 +??????????? 2,1,4 +????????.? 6,1 +?##..#??.??? 2,3,1,1 +.#??..?#...?#. 1,2,1 +??#??.???###?#??? 4,1,7,1 +?.??????????#?? 2,7 +.?????##?#?? 1,7 +#?????#???.? 2,2,2,1 +??.?##?#?#.????# 1,3,3,1,2 +????.??#.???.##???? 4,1,1,6 +?#???????#?#??#?. 2,4,6 +?.?#??.??#? 3,1 +?..????#???# 6,1 +?????#??????????? 1,1,1,5,1 +.?.?..??#????#.#? 1,7,2 +?.????.????. 3,2 +#??#??????.?????? 2,7,5 +????#???????? 1,8 +#??..?...??#??? 3,1,1,1,1 +??#??#?#???????? 1,8,1 +?..???.#???.?#?.?? 1,2,4,1,1 +#??##??#???##?? 1,3,1,4,1 +.??.??????????#??? 2,1,4,6 +??#?#?..?##?#?#? 1,1,1,4,1 +?????????????#??# 1,1,1,1,6 +.?.???.?????.?? 1,1,1,1,2 +?????#?.?.??#?#??. 7,2,1 +????#??#?#.??.???? 7,1 +??.???????? 1,4 +?.?????????#? 8,1 +.??#???????#?? 9,2 +?#???????? 3,3,1 +????.??#.?# 1,1,2 +???.#?#?.??#???.? 3,2 +#?.#??#???#????.? 1,1,6,1,1 +..?#?#.#?? 4,2 +?.??.??#?#?#???. 2,6 +???????.???? 4,1 +.???#?#???????# 8,4 +????#??#???#.. 5,1 +?????#?#???#? 4,1,1,2 +.#??????#?#??## 2,1,1,5 +??#??.?????????? 3,2,1,1,2 +??.?.?#??##???#?# 1,1,5,2,1 +#?..###??.?#??? 2,5,3 +.??????????????#? 6,2,2,2 +??????#??? 1,2,2 +##?????????.??????. 8,1,3 +????.#??.???..??##? 2,3,2,1,2 +?.???#.??.. 4,1 +???#????#?#.?#? 6,1,1,1 +?#??????#????????? 3,1,3,2,1,1 +.????..#?? 1,1,1 +?????????#.?? 3,1 +???#??#?#???. 5,1,1,1 +???????#??#????##?? 1,1,1,4,4 +#????????????##??? 7,4,2,1 +?#??##?#??#?.# 2,5,2,1 +#??..??????#?????#? 3,2,1,2,2 +??#..?#?#.##????###? 3,3,2,4 +?.??##?.???? 1,5,2 +????.#..??????????? 1,2,1,3,5 +?#???.#??????#???# 4,1,8,1 +..##?..?????? 2,3 +????..???..?#. 1,1 +#.??#??#.???????? 1,2,1,5,1 +???.?#?#?##?#???# 1,2,1,6,1 +?#?.??##?????? 2,9 +.???????.?.???#??? 1,1,1,1,1,4 +.#???..??#?. 1,1,3 +.?##????.???#? 3,2,2 +....?#?##.? 5,1 +?###??.#.?.?##??. 3,1,4 +??.#???????#????#? 1,2,6,2,2 +??#?.?????. 4,2 +?#????????#.? 7,1,1 +?.##??####????.#. 1,8,3,1 +?.?????????.?? 1,2,5,2 +?????..?###.? 4,4,1 +???#?###??.?#?.?. 2,7,1,1 +?.??.#?????.?.???.? 1,1,6,1,1,1 +#????#?##????? 6,2,3 +??#?#.?#????#.? 4,6 +.???..??#? 1,3 +??.#?????????.???# 1,1,2,3,1,1 +.??.???????#. 2,1,1,3 +???.#..?..????# 2,1,1,3 +#????##?..# 1,6,1 +###?????#.??## 3,5,2 +?##?.?#???#????### 3,13 +?#????#??#????.#.?? 4,4,1,1,1 +?.?##???????.?#?.?#. 1,9,3,2 +???#??.???? 6,2 +#??.??.????#???#?? 2,1,2,3,1 +??#??????#??#??????? 2,5,2,1,1,1 +????#.????.?. 1,1,2,1 +???#?#???.??. 3,2,1,1 +#??#????.? 1,1,1 +??#????#????.? 2,2 +???#?#.?????? 3,1,2 +#?.#?#???#.# 1,3,2,1 +??#?.??#???? 1,6 +????????#??.?.???? 8,2 +????.???.????????? 1,1,1,1,9 +?.?#??.??? 1,3,3 +????###??##?###.? 1,12 +?.#??.?##????.? 1,1,2,1,1 +??#?#???..??#??? 6,3 +?????#?#???#?#???#?? 15,1,1 +?#????..?#???.???.?? 2,3,5,1,1,2 +???????##??#???.##?? 11,2 +?.#????##???.#.??#.? 10,1,2 +?.?.?##????##?#?#? 1,1,3,1,7 +????#?????????? 1,2,1,2,2 +???????#?##????#?? 1,6,3 +??????????#?# 1,1,1,3 +#.??##????.?.??#???? 1,1,2,1,4,1 +?###.?????????#? 4,2,2,1 +???#???.##??? 1,2,4 +###????#???#??### 8,7 +.?#.#?#?##???#. 1,10 +????????##..?#???#.? 8,5 +?###?.??##.??#.? 4,1,2,3,1 +???.??##??### 2,8 +???.??..?.?.????#? 1,1,1,1,1,3 +???#??##?..??.????? 7,2,1 +#?.?????#????????? 1,1,1,4,2,1 +?????..##?? 5,2,1 +.?#???#.#????#??.?# 6,1,5,1 +.#???..???? 4,1,1 +?.?#???#?..??#??#??? 1,1,1,2,7,1 +?#?????#???# 4,2,1,1 +.???.???#?????????? 2,2,6,1,1 +.?#???#?#? 4,4 +???????..#.?#?.??#? 2,2,1,2,1,1 +.??#?..?????? 1,5 +###?????.??##???? 3,1,5 +?????##..#??#. 7,4 +???????#???.??## 1,1,4,4 +.?#???.?????????. 3,1,1,1,3 +??????????????#.? 6,2,3,1 +?.?.????...?? 3,1 +?.???????# 1,2,3 +??.???..?#? 2,1 +???#?#?????#. 8,1 +?##??.???#.?????.? 4,3,1,3 +??????????#?. 1,2,1,2 +??..?#.?##???? 1,2,2,1 +#???##?.#??.?## 3,2,1,1,3 +??????##????.?.? 1,6,2,1,1 +?????#?#????##. 6,4 +?????#?.?#???# 1,3,6 +??.?????.. 1,1,2 +??.??????? 1,5 +??????????.?.??##?? 5,1,1,1,6 +???#???##.??#?#? 6,5 +#??????###???.??? 1,7 +??#?.????. 2,2 +??#?????.??#.????. 6,1,1 +.???#?#??????. 3,3 +#?.???????#???? 1,2,4 +?###???.?.??#??#.??. 7,1,2,2,1 +?.?#?##??????#??.. 5,5 +???#.???#???#?#??.# 3,10,1 +#?????????#.? 6,1,1 +?.###???#????#???#?? 12,3 +???#?????##??? 4,5 +#??????###??.#.? 2,1,4,1,1 +??#????#???#???? 2,8 +??#?#?????#? 3,1,2 +??.#?#???.?#? 1,4,1,1 +?#??#?##?? 1,5,1 +?????..?????? 4,4,1 +?.?#???.?##??#??? 1,4,6,1 +#?#?????###.?.# 1,1,1,3,1 +??###??????. 6,3 +??.????#?#? 1,5 +??##.??.??##.?.?? 4,1,1,2,1 +?.#.??.#???.?#?##?? 1,1,2,7 +?.???##?#?? 1,1,5 +#??.#?#?#.????#?#??? 3,5,4 +?#??????#?.??## 2,1,1,3 +#.#..????????????# 1,1,1,2,2,2 +.????###??..?#? 9,2 +??.?##???? 1,2,1 +?.???.?#.#?????##?? 3,2,4,4 +???????#?#???#????? 1,1,1,12 +?.#?????#.#?..#??.? 1,1,2,1,2,1 +?.?..????.? 1,1 +.#??#.???? 1,1,1 +???#.????##???.???? 1,1,1,4,1,3 +???????.??#? 1,4 +???##..??? 1,3,1 +.???.?.????#??#??? 2,1,4 +?#??.???..??#??.???? 1,1,1,1,2,4 +?????#????.#???? 5,2 +#??.#?????.?#??? 3,1,1,4 +??????????#??????.?? 9,2,1 +.#????#.#???. 3,2,1,2 +??#.???#?#?.? 1,5 +???####?.?.??? 2,4,1,1 +??.????..###??.. 1,4 +??????.?????. 6,1,1 +#???????.?.??.??#? 1,1,1,1,4 +????#???..??????. 5,4 +??..?????#?#?.?? 1,1,1,4,1 +?#.#??#??#??? 1,2,7 +#?#??.??#?.???? 1,2,1,1,1 +.??##???????#??? 8,1,1,1 +?.?.?????..????.? 1,2 +.??...?##?#??? 1,4 +?????????#?#?.?? 2,4,4,1 +??????.??.??#.? 1,1,1,3,1 +???????.#?#.???#?.? 1,3,1,3,1,3 +.#??.???#? 1,1,2 +.?#???..??.??##??. 3,4 +#.?#?#??.???# 1,2,2,4 +.?#??#???#??#?? 2,1,2,2 +#.#?????.?.?#.??? 1,5,1,1,1 +.#.????????#.??? 1,1,2,1,1 +?##?#?????..#??????? 6,1,5,1 +?????????#???#?#. 1,1,2,9 +.?.???.#???. 1,1,1,1 +??#?????##????#? 1,10,1 +??.????#?#?#???? 2,1,10 +.??..#??#? 1,1,1 +?????#??????? 2,3,1,1 +..?..?.???.#??.? 1,1,1,3,1 +?#??#.?.###??#?? 5,1,7 +??#???#???#?? 7,3 +????????????. 2,5,3 +.#.???.??? 1,1,1 +???.?#??????.??????? 1,7,1,1,1 +.#.???#??.?? 1,3,1 +.????????.?#?#? 1,2,5 +.?#??????.#? 6,2 +.??.?#?????? 1,2,1,2 +??#?#?##??????..???? 7,3,3 +??.?.??#.#???##? 1,1,3,7 +?.?#??.??#?#?. 1,5 +?.????????#??..##. 8,2 +????#??.??# 4,2 +.??#?????#??????? 4,5,4 +???????.???.??????#? 4,1,2,1,2 +?.??.#?#??? 1,3,2 +.#.??..#.??.???.#. 1,1,1,1,3,1 +?...????.?#?#?????.. 4,5,2 +#??..?.??#??????#?? 1,1,1,5,1,1 +.?##??#????#??#.? 4,6,1 +.#.???.#????.?.?#? 1,1,1,5,1,2 +????#???.#?? 1,1,3 +???????.??..??# 1,2,1,1,3 +?#??.??##?? 1,1,6 +.???????.??.? 1,2 +.??????#??#?#?????. 10,1 +.???#?????? 1,2,5 +??#?#??.?.???.?? 5,1 +.????#????#?.? 2,1,3 +..#??.##?#?#?????? 2,10 +??#?#???.? 2,2,1 +.?##.?????.#.??? 3,1,1,1,1 +.?###?????????..? 4,1,1,1,1 +??????.?.? 6,1 +.?##??.#??. 3,1,1 +?.????#?.??.#??# 1,1,1,1,4 +????.?#??.?#? 2,2,3 +.??###?.#??? 6,1,1 +..??#?#???????#????? 7,8 +????.?#???##?#??. 1,1,6 +???.?#????##. 2,8 +?#?#?#.????????#? 6,8 +?.????.?????#? 1,3,1 +###?#?#.???#?.??#.. 5,1,2,1,1 +??#.#?#.??????### 3,3,1,3 +.????.??#??#???#?? 1,1,6,5 +??????????????? 1,8 +.???#?????????.?? 6,2,1,1 +??????#?????#?#? 1,13 +.?#???#??#?? 1,5 +#??.?#??????????#? 2,4,7 +???.#?#???.# 1,3,1,1 +..?##?#??????. 4,2 +#????.?.#????##?? 1,1,1,2,6 +##???#??.???##?.??? 4,1,1,5,1,1 +??##???#??? 8,1 +??.#??.#?#. 2,2,3 +??###???##??#??#??. 4,10 +?.?#.????? 1,1,3 +??.????#????# 1,4,1,1 +???.?????##?#??????? 3,8,2 diff --git a/src/day12.rs b/src/day12.rs new file mode 100644 index 0000000..4fef5e0 --- /dev/null +++ b/src/day12.rs @@ -0,0 +1,306 @@ +use std::collections::HashMap; + +pub fn run() { + let input = include_str!("../input/day12.txt"); + // let input = r#"???.### 1,1,3 + // .??..??...?##. 1,1,3 + // ?#?#?#?#?#?#?#? 1,3,1,6 + // ????.#...#... 4,1,1 + // ????.######..#####. 1,6,5 + // ?###???????? 3,2,1"#; + + let mut lines = input + .trim() + .lines() + .map(|l| parse_line(l)) + .collect::>(); + + let count_sum = lines + .iter() + .map(|(cs, runs)| { + count_arrangements( + CountInputs { + cs: &cs, + assuming_first_char: None, + in_run: false, + runs: runs.clone(), + }, + &mut HashMap::new(), + ) + }) + .sum::(); + dbg!(count_sum); + + for l in lines.iter_mut() { + unfold_line(&mut l.0, &mut l.1); + } + + let count_sum2 = lines + .iter() + .map(|(cs, runs)| { + let res = count_arrangements( + CountInputs { + cs: &cs, + assuming_first_char: None, + in_run: false, + runs: runs.clone(), + }, + &mut HashMap::new(), + ); + println!("finished line"); + res + }) + .sum::(); + dbg!(count_sum2); +} + +fn parse_line(s: &str) -> (Vec, Vec) { + let (l, r) = s.trim().split_once(" ").unwrap(); + ( + l.chars().collect(), + r.split(",").map(|s| s.parse().unwrap()).collect(), + ) +} + +fn unfold_line(cs: &mut Vec, runs: &mut Vec) { + let orig_cs = cs.to_vec(); + let orig_runs = runs.to_vec(); + for _ in 0..4 { + cs.push('?'); + cs.extend(orig_cs.iter()); + runs.extend(orig_runs.iter()); + } +} + +#[derive(Debug, Clone, PartialEq, Eq, Hash)] +struct CountInputs<'a> { + cs: &'a [char], + assuming_first_char: Option, + in_run: bool, + runs: Vec, +} + +fn count_arrangements<'a: 'b, 'b>( + inputs: CountInputs<'a>, + // cs: &[char], + // assuming_first_char: Option, + // // mut accepted: Vec, + // in_run: bool, + // runs: &[u8], + cache: &mut HashMap, usize>, +) -> usize { + if let Some(result) = cache.get(&inputs) { + return *result; + } + + if inputs.runs.is_empty() { + assert!(!inputs.in_run); + for &c in inputs.cs { + if c == '#' { + // invalid, since there are remaining broken springs with no broken runs + cache.insert(inputs, 0); + return 0; + } else { + // accepted.push('.'); + } + } + // valid + // println!("{}", accepted.iter().collect::()); + cache.insert(inputs, 1); + return 1; + } + + if inputs.cs.is_empty() { + // if we're out of chars, valid iff there are no runs remaining + if inputs.runs.is_empty() { + assert!(!inputs.in_run); + cache.insert(inputs, 1); + return 1; + } else { + cache.insert(inputs, 0); + return 0; + } + } + + let first = inputs.assuming_first_char.unwrap_or(inputs.cs[0]); + + if first == '#' { + if inputs.runs[0] == 1 { + // current run should be finished + if inputs.cs.len() > 1 { + if inputs.cs[1] == '#' { + // if the next char is #, invalid b/c the current run would continue + return 0; + } else if inputs.cs[1] == '.' || inputs.cs[1] == '?' { + // let mut accepted = accepted.to_vec(); + // accepted.push('#'); + // accepted.push('.'); + // current run does indeed end + return count_arrangements( + CountInputs { + cs: &inputs.cs[2..], + assuming_first_char: None, + in_run: false, + runs: inputs.runs[1..].iter().copied().collect::>(), + }, + cache, + ); + } else { + panic!("invalid char {}", inputs.cs[1]); + } + } else { + // end of string, valid iff there are no more runs + if inputs.runs.len() == 1 { + // println!( + // "{}#, last run: {}", + // accepted.iter().collect::(), + // runs[0] + // ); + cache.insert(inputs, 1); + return 1; + } else { + cache.insert(inputs, 0); + return 0; + } + } + } else { + // accepted.push('#'); + // current run continues + let mut runs_copy = inputs.runs.to_vec(); + runs_copy[0] -= 1; + // println!( + // "{}, current run continuing, {:?}", + // accepted.iter().collect::(), + // runs_copy + // ); + return count_arrangements( + CountInputs { + cs: &inputs.cs[1..], + assuming_first_char: None, + in_run: true, + runs: runs_copy, + }, + cache, + ); + } + } else if first == '?' { + // let mut accepted_dot = accepted.clone(); + // accepted_dot.push('.'); + let res = count_arrangements( + CountInputs { + cs: inputs.cs, + assuming_first_char: Some('.'), + in_run: inputs.in_run, + runs: inputs.runs.clone(), + }, + cache, + ) + count_arrangements( + CountInputs { + cs: inputs.cs, + assuming_first_char: Some('#'), + in_run: inputs.in_run, + runs: inputs.runs.clone(), + }, + cache, + ); + cache.insert(inputs, res); + return res; + } else if first == '.' { + if inputs.in_run { + // the current run ended prematurely + cache.insert(inputs, 0); + return 0; + } else { + // accepted.push('.'); + return count_arrangements( + CountInputs { + cs: &inputs.cs[1..], + assuming_first_char: None, + in_run: false, + runs: inputs.runs, + }, + cache, + ); + } + } else { + panic!("unexpected char {}", first); + } +} + +#[cfg(test)] +mod tests { + use super::*; + + fn count(cs: &str, runs: Vec, expected: usize) { + let cs = cs.chars().collect::>(); + assert_eq!( + count_arrangements( + CountInputs { + cs: &cs, + assuming_first_char: None, + in_run: false, + runs, + }, + &mut HashMap::new(), + ), + expected + ); + } + + #[test] + fn test1() { + count("???.###", vec![1, 1, 3], 1); + } + + #[test] + fn test2() { + count(".??..??...?##.", vec![1, 1, 3], 4); + } + + #[test] + fn test3() { + count("?#?#?#?#?#?#?#?", vec![1, 3, 1, 6], 1); + } + + #[test] + fn test4() { + count("????.#...#...", vec![4, 1, 1], 1); + } + + #[test] + fn test5() { + count("????.######..#####", vec![1, 6, 5], 4); + } + + #[test] + fn test6() { + count("?###????????", vec![3, 2, 1], 10); + } + + fn unfold(cs: &str, mut runs: Vec, expected: usize) { + let mut cs = cs.chars().collect::>(); + unfold_line(&mut cs, &mut runs); + assert_eq!( + count_arrangements( + CountInputs { + cs: &cs, + assuming_first_char: None, + in_run: false, + runs, + }, + &mut HashMap::new() + ), + expected + ); + } + + #[test] + fn unfolded() { + unfold("???.###", vec![1, 1, 3], 1); + unfold(".??..??...?##.", vec![1, 1, 3], 16384); + unfold("?#?#?#?#?#?#?#?", vec![1, 3, 1, 6], 1); + unfold("????.#...#...", vec![4, 1, 1], 16); + unfold("????.######..#####.", vec![1, 6, 5], 2500); + unfold("?###????????", vec![3, 2, 1], 506250); + } +} diff --git a/src/main.rs b/src/main.rs index 9799bd4..f7b2513 100644 --- a/src/main.rs +++ b/src/main.rs @@ -12,7 +12,8 @@ mod day08; mod day09; mod day10; mod day11; +mod day12; fn main() { - day11::run(); + day12::run(); }