From 9dfaa313a858ee7a0dd71795cf408d0a511843d9 Mon Sep 17 00:00:00 2001 From: Paul-Henri Froidmont Date: Wed, 13 Dec 2023 03:42:51 +0100 Subject: [PATCH] Day 12 --- input/day12 | 1000 +++++++++++++++++++++++++++++++++++++++++++++++ src/day12.scala | 96 +++++ 2 files changed, 1096 insertions(+) create mode 100644 input/day12 create mode 100644 src/day12.scala diff --git a/input/day12 b/input/day12 new file mode 100644 index 0000000..aa1776e --- /dev/null +++ b/input/day12 @@ -0,0 +1,1000 @@ +?#.???#???????##?.? 2,1,7,3,1 +?.##?###?#?##? 1,6,1,2 +??.???.?.?.??.???. 2,2,1,1,2,1 +?????#???#??#??..?#? 15,2 +#?????????#.?# 1,2,5,1 +??..?.???# 1,4 +?##???.???? 3,2,2 +..??.????????.?? 1,3 +.?????????.#?? 1,6,2 +?#?#??????##??#..# 1,2,7,1 +??.?????###?? 3,4 +.???????#.? 4,3,1 +??????#.?#???? 2,2,4 +???.???#?..?????. 2,1,1,5 +???#???#???#?#?????. 2,9,2 +????.#.?????#?# 1,6 +???????.#?? 1,1,2 +#????#??.???. 2,1,1,1 +??#?????.???? 2,1,1,1 +.#?.?.#????#?.# 1,1,4,1 +##?????##??? 3,3,2 +??.?????#? 1,1,3 +??????.??????##.??#? 2,2,1,6,3 +?#???.?#?? 1,1,4 +#?#???.???? 4,1,2 +.#.?.??#?? 1,1,3 +.?#???#??#??#?#?. 1,10 +?##...?##???.? 2,5 +.#?????????????? 8,1,1 +???...???# 1,1,1 +??#???.?????????#?? 3,4,4 +????.?.???.#.?? 1,1,3,1,1 +?#??.?#??? 2,1,3 +?????##????#???? 11,1 +??????.???? 4,1 +?????#?..?#?.?? 2,2,3,1 +??????.#..?#????# 2,1,4,1 +??.???#..#? 1,2,2 +#?#??.#????#? 1,1,1,2 +?.#?..?#?? 2,4 +?.?????##??.#?????## 8,8 +???.???.??. 1,2 +??#??????# 7,1 +????#?####?#?# 9,1,1 +???#??#.????. 1,4,2 +??#?#?????.##??.?.?? 5,1,1,4,1,1 +.#??.??????#?????#? 1,1,5,3 +???#???.????#???. 4,1,4 +.?.??#??????#??. 3,5 +???????..?? 1,2,2 +????#.???????? 2,2 +?.????????##?? 3,2 +?.?.????????#??????# 1,2,4,4,1 +???#??.????.???#??? 4,1,1,3 +????????????.. 5,1 +??.#??????## 1,1,1,2 +..?.?#?????.?.. 3,1 +??#??.?#??.??#????? 4,3,3,2 +???#?#???##????##?? 5,7,2,1 +.????#?????#.. 5,2 +..?#..##???.? 2,3 +???????.?.? 4,1 +#????????#?????. 1,3,1,6 +?#?#??.??.?#????. 1,3,1,6 +?#???.??#??. 4,3 +?#.#.????#?#?????#? 2,1,8,4 +??.#???????.? 2,2,1 +..???????.? 2,3 +?#.?????????? 1,7 +?.??#??#???????????? 1,7,3,1,1 +???????.#????? 3,3,5 +?..????.???#. 1,1,2,1 +?.?????.?#.??..? 3,1 +.#?..?##???? 1,4 +?????...??????? 3,2 +???.?.?????? 2,1,1,3 +#???#.#?#??? 5,5 +????#???.??? 5,1,2 +????#????#?.??##?#? 1,4,2,4,2 +??#???????????. 2,1,1,1 +#?.##??###????.????? 1,7,2,1,1,1 +?#??##??.?#?#?##?? 5,7 +?#???.?#?? 4,1 +..??.??#???. 1,4,1 +??.????.?? 1,2,2 +???.??.??#???? 1,1,5 +?..??#?##???#???# 1,6,5 +???#?????????#?? 4,1,5 +?#???#?#??.? 1,1,1,1 +???.???.#?.???. 1,3,2,2 +????###?..??.?#???. 7,1,4 +.??#?.????? 4,1,3 +.#.??????? 1,3 +#????##???.? 1,5 +??.???#?????#???? 2,3,5 +??#?##?????# 7,2 +???#????#.. 4,2 +.????.????#?#???? 3,1,3,5 +??.????.???.??#??#?? 2,1,2,6 +?????#??#?#????? 1,5,3,1 +??????.#?? 3,2 +??#????.?#?. 4,3 +???#???????????#?#. 2,1,3,1,1,3 +???#.?###???##??# 1,1,12 +?#????#?##.???.?.?#? 1,6,2,2 +.?#??.?#???#???????. 4,7,1 +?###???#????##??.? 5,2,2,1 +??#?#????#?#?..?? 1,1,4,4,1 +???.#?.?????? 2,2 +??#???#??????? 7,1,3 +?.?##????#?. 3,4 +??.??#???????. 1,1,4 +?.?#???????...????? 7,2 +????.???#??.?. 1,4 +.#?.?#?#??????? 1,6 +.?????###??????????. 8,3 +#?.#?#??#?????? 2,3,2,4 +#?#?#????.??????? 6,7 +??.?#??.#?#? 1,2,1,4 +??.?#???##?###?# 1,2,6,1 +?.??...??? 2,2 +#??##?#??.?#??? 1,3,1,1,2 +????##?????.??.?.. 4,1 +.?###????..?.?# 8,2 +.????#??.#.#?? 5,1,3 +??#??.????##..? 4,6 +?#?..???#?????????.? 2,1,4,5 +..??..??#.?? 1,2 +?.#?.?.???#?##?????? 1,2,1,1,5,1 +??.?##.?..???? 1,2,1,2 +??.??????#?.??? 1,1,4,2 +???#...??#?#.# 1,5,1 +????.???##?#?.# 1,8,1 +.???#?????.? 3,1 +.##???#.?#??#??. 3,1,2,3 +??#??????#???.? 2,1,1,3,1 +???#?.???#???#??? 2,3,2,2 +???????#???????????? 2,2,10,1 +.???#??.?#??#?#. 1,1,1,6 +????##??#?.. 6,2 +????###?##?#?? 4,4,1 +???#????#???? 3,7 +?.?###?.#???#??? 3,1,3,1 +.#?.??#?.??#??? 1,1,2,2,2 +????#??##?. 1,5 +???????#?##.?.#.? 2,6,1,1 +?#?..???.?#?..??? 2,1,1,3,1 +??#???#.??.#?#???# 1,1,2,2,4,1 +.#.?#.?#???#?. 1,1,1,3 +??.##??.??#.?.? 1,4,3,1 +.?#??.????# 4,1 +???##?#????##? 2,10 +??#???????#? 3,1,2 +##.??#?#??##? 2,9 +?#?#?#?????.???.?.? 10,1 +?..#????#????#?. 1,1,1,6 +...?????#???????# 9,1,2 +.???.???.?? 3,1,1 +??#.?.????#?#??#??? 1,1,1,10 +??.??.#??#?#?.??#??. 2,7,2 +??##?#?..??.??? 7,1,1,1 +?#????.#.???#.?#.# 5,1,4,2,1 +.?####??#.???? 8,1,1 +????..#??????? 1,1,1,4 +?.#???#..????? 3,1,1,1 +???##?#??.#? 1,2,3,1 +?????.#???#?.???. 1,6,3 +.?.???????. 1,2 +#?.?????##? 2,6 +?##???????? 2,2,1 +?#.##??##?# 2,2,4 +??#?.#?.#?.?#??#.?# 1,1,1,1,5,2 +????#???????#?.?#.. 9,2,1 +?????#.??####? 1,2,7 +#???#?????? 6,1 +???#?.????# 2,2,1 +.#.#.#??#?? 1,1,6 +?#??##?#????.?..???? 8,1,2,1 +?##???????????? 4,5 +??#??.#?????##. 3,1,3 +???.?#?????????#??.. 1,1,12 +??????#?????.?# 1,7,1,1 +??.#???????? 3,1 +??.?#?#?.???#??? 1,3,6 +?#??#???.??.??# 1,1,1,1,1 +#???#????????.???. 1,1,3,5,1,1 +#??..?.#????#? 1,1,1,4 +?????.???? 3,1 +??????###?.? 1,7,1 +.#..?##??#??.???? 1,6,2 +?##???#?.## 6,2 +?##.??.??#?.???#??? 3,2,1,1,1,1 +???##.?#????#??? 5,1,1,3 +#.??#??.?#????.???#? 1,3,1,6,1,1 +??#???#.??#.#??? 7,1,1,1,1 +#??#?????.?.? 7,1,1 +.?????.?#????..#?#? 4,5,3 +?.?.#??#??.????? 4,1 +#.??#?##?...#. 1,5,1 +.??..?.##??? 1,1,4 +???#????????#??.? 3,8 +???????##?????? 2,1,4,1 +???????.??. 2,2,1 +?#.#??##???.???? 1,1,3,1,1 +?.?????????. 1,1,3 +.???#??#??.#?####?# 6,8 +?.?#??#??.?? 1,1,2,1 +.??.???#??????? 1,6,1 +??#..#???.?? 1,1,1,1 +?...#????.#? 1,1 +??.??.???. 1,1,1 +??#?##????.#?.?? 10,2,1 +????????.?#????#???? 2,3,4,2,2 +???????#?#????.##.? 2,8,2 +??#?????.?. 4,1 +??#???.?.??#?????? 1,1,2,1,5,2 +.??.????#?#?#?? 1,1,3,2 +#???.??.#??##?????.? 1,1,1,1,5,1 +##??#?????#??????#?? 5,12 +.?#????..??#?#????. 5,7 +????#.?????.?.?#? 4,1,3 +.#..?#?????.?# 1,5,2 +??????.?????# 3,1,1 +?#?????.??? 1,3,1 +#.??##???##?.???##? 1,10,2,2 +??#???..#?#? 4,1,1,2 +.?.#?.?.???. 1,1,1,1 +.#?.#.#??.?????? 1,1,2,1,2 +?#??.?#????#. 2,6 +??????##??. 1,2,1 +???????.??.????.?? 1,1,1,2,4,1 +?#??????#??###.#.?? 3,10,1,1 +..???#?????#?#?#? 3,7 +?..#????????. 1,1,4 +?#??#?#.?? 1,4,1 +???##??##?.? 2,2,3,1 +#??#####???#.??? 8,2,1 +??#?.????.? 3,1 +...????#?? 1,4 +.?#?????###?##.? 3,4,2 +????#.????##??? 1,4 +?##??????.## 2,1,2 +.?..?#.????#????? 1,1,8 +.#?#?.?.???..? 4,3 +??#??????#?#. 1,1,5 +#?????#?###????#??? 1,9,1,2,1 +???????###??.??.? 1,1,8,1,1 +.??.???#?#.#??.?#.# 1,6,1,1,1,1 +???#????????. 5,4 +.?##?????????? 7,4 +?????.??.?#?? 5,1,2,1 +#.????????## 1,1,3,3 +???#????.????##.?? 7,5 +.#?.??#??##??? 2,7 +#?..??#?#..???# 2,4,1,1 +??#..??#??#????#???? 1,1,1,4,4 +??????????????. 2,1,1,4,1 +#??#???.?#. 4,2,2 +#.??#???#??.?#??.?? 1,8,1,1 +??.???#?????#?????? 1,2,3,3,5 +????.#..???#??#?#? 1,1,1,7 +.#?????.???????.# 3,1,2,2,1 +???##??.?#??.?? 5,2,1,1 +????.?##????# 2,2,3 +??????#.?#?? 1,2,2,1 +##?.#.#??????#?? 3,1,1,7 +?????.?????#???????? 6,1 +.?.???##????. 4,2 +????#????#?????? 1,6,1,2 +??#?##??????##?#??? 1,7,7 +?..???#.??.? 2,1,1 +#?????#.??.?#.???? 1,5,1,2,1 +???##?#??..??.?#?? 3,3,2,2 +?#??.??#?.? 2,4 +?????????#??#?????? 1,1,7,2 +???#????#???#?#?. 1,7,6 +?????#?..??#????#??? 4,4,5 +#?#???????????? 3,4,1,1,1 +???#????#.#.???? 1,3,1,1,2 +??.??#???#.?? 2,3,1,1 +?????.??##???.??.?? 1,7,2 +.??#???????##??? 1,10 +?###????#????#??# 4,1,3,4 +.?????.?.??. 3,2 +?.?.?#??.?? 1,2 +#?????#???#? 7,2 +??#??????.?#???#?#?? 5,8 +????#??.????#.???#? 1,4,3,1,1,2 +???#??.???? 4,1 +?#?????#?#. 3,3 +#.?????#?.????#?# 1,6,4,1 +??#??..#????. 2,1,2,2 +#?????#??#.??????? 2,3,1,3,1 +?????###?#?.??#?? 7,1 +###???????.?? 4,2,2 +??#..??### 3,5 +?.##.#?????? 1,2,1,3 +??#?#?.#?.#???? 1,4,1,3,1 +.?????????? 1,2 +.????.#??#???##?# 1,1,1,2,5 +?????##?????????. 4,5 +???..???#?.#.?#?#?? 5,1,5 +???.???????##???.?? 1,1,2,1,5,2 +??.????#??##?????? 1,9,2,1 +#?#???#?###???#??##. 1,10,5 +????##????##?..?# 2,4,2,1 +##??..?#???????.? 3,5,1,1 +??##.?#????#??#.?# 4,10,1 +????????????? 1,1,1,1 +?.????#.?.#?.? 1,5,2 +.?.#??.#...##???.?? 1,3,1,2,2,1 +??##.??..?#?# 2,2,3 +.?.#????#??#? 2,6 +.???????#??#.???.? 1,7,1,1 +??.???????? 1,3 +??.??#?.?????##??.?? 1,3,6 +????.?????#?##??.? 3,11,1 +???..????#.##? 1,2,1,3 +.??#???.???. 3,1,1 +??.???..?##???.. 2,2,4 +???.#??##???????? 1,1,4,1,1 +.?..?????? 1,1,3 +??#???..???? 5,2,1 +?????##??#??????#? 1,9,1,1 +??.?????.??????# 1,5,1,1,1 +??????#???. 1,1,5 +.?????###..?.#?. 1,1,4,1,1 +????#?#.???##? 1,3,1,5 +?.?..????###??.. 1,5 +???.#????. 3,1 +.#?#?.#?#?.???# 1,2,3,4 +????#??#??#?#???? 2,7,2 +.?.???#?#??##???# 1,13 +#??#???#..?#??#????? 1,6,5,4 +#???????#?? 4,5 +.??#??????.??# 2,1,1,3 +??#????.?.# 2,1,1 +.#??##?#.#?..???# 7,1,3 +..?#??????##??.? 3,1,4 +#??#??#??.?#. 1,5,1,1 +.???#????.#?#? 6,4 +.??#???#?.??????? 3,1,2,3 +????????.#?#.# 1,3,3,1 +??.?#????#?????????? 1,11,1,1 +..??#?.???#?.?.?. 3,1,1,1 +?#?????##??##.# 2,8,1 +????#???#??????? 2,1,6,1 +#???.?##???#?## 1,1,4,2,2 +?????#??##?#??# 11,1 +?.?#.#????#?#?#?#? 1,1,3,2,5 +##???.????.???? 3,1,1,2 +???..##?.??..#? 2,3,1 +???#??#?.??.????? 6,1 +?.?#??.????#??#?#?? 2,7 +.?#????.??#??#???#? 6,2,2,1 +???.?#???.? 1,4,1 +?##.????####? 2,6 +###??????#?#? 5,3 +?.#??#.?..##?????? 4,6,1 +?.#.#.???#?##??????? 1,1,1,10,1 +??.?#?????# 3,2,1 +??#????#?#?? 2,3,1,1 +?#?.??#.??? 1,3,1 +????.?#???#?#????? 2,1,2,3,1,3 +????#?.??#????.#? 1,1,5,1 +????????#??#??#?#? 1,1,1,1,5,2 +???.??????#? 1,2,4 +????.??#???# 1,5 +?????????#?????????? 2,10,2,1 +??????#??.. 2,3 +?????#.?#??#?? 3,1,5,1 +?????#??#?..?? 3,4,1 +??#???#???#???.?.?#? 3,10,1,1 +#?##??????#???????. 7,1,3 +??#??????.?##??##??? 7,7 +??????##?#?????? 1,8,1 +.????#??#???????. 7,3 +?#?###???... 5,1 +.?#??????.????? 1,2 +?.?#?????#.???#?? 1,5,1,3,1 +????#?????#??#??. 5,2,2,1,1 +.?.?#?#???#??. 1,5,1 +???.????#??##?? 1,8 +#???.????#???????? 2,8 +??.##?#?#?? 1,6,1 +?????????#..?#?#?..# 9,4,1 +??????..?.???#.#?? 2,4,1 +?.#.?#????. 1,1,2 +?##???#?????##?.???# 3,5,4,1,1 +#??#?#.?????#??#?##? 1,1,1,1,7 +.?.????#???#??????? 1,1,1,2,6,1 +??????????###?? 2,7 +#??????#?###?????? 1,10,2,1 +#??.?.??#?#? 2,1,5 +.#..?????#?.?? 1,1,4,2 +#?...#?.#???#? 2,1,1,3 +###?#??##???????#?? 14,1 +??#?.?#????#??#????? 2,11,1 +???...??.#?#?. 2,1,4 +#??.#??#????#?? 1,4,6 +???.#.??#?#???.?##. 1,1,1,6,3 +???????..?????#??? 1,1,1,1,6,2 +???##????.????#..?. 5,2 +.???#?.?????#. 4,2,1 +.??????????#.#? 1,1,5,1 +????.?.??#?##???? 2,6 +#?.?#?.????#.?????# 1,2,1,1,1,4 +?#.?#??????#? 1,9 +??#?#???#?#?????.?#? 7,1,1,1,1 +...?##?#.????. 4,1 +?????????.#? 3,2 +?.#?#?????#?? 5,1,1 +?###.???#?. 3,2 +?.???#.????#?? 2,6 +???.??..???#??. 1,2,5 +?#..?#?????##???. 2,9,1 +#?.??###?#?#??.????. 2,8,1,2 +???#?.????.??????? 4,4,6 +???#?????#?#?.# 2,1,5,1 +.?????#???#??? 1,2,4 +???##??????? 6,2 +???????#.????#??? 6,1,2 +????????#???.?#??## 1,1,1,1,1,6 +?#?.?#??#? 2,2,2 +#..?.?#.???????#???? 1,1,1,1,1,5 +???.?.???? 2,1 +#???..???#??.??#.?? 1,1,2,3,1,1 +???#..##?#???#? 3,4,1 +??.#????????????? 7,3,1 +?..?.?????? 1,1 +?#????..#.#????? 2,1,1,1,2 +.?.???????????? 1,1,1,4,1 +?.????????#? 2,3 +#?????#..???#? 1,3,1,1 +???.?????##. 3,2 +?.??????#??.???#??? 4,1 +.?????#??#???#?#?. 8,4 +???..?##??.# 1,1,3,1 +???.??#??#?## 1,7 +????.#??#????. 1,5 +#?..????.#??.?? 2,3,3 +???????##?????????# 3,1,9,2 +#??##?#??#.?#? 2,2,4,2 +?.?#?#?????. 1,1,3,1 +?#???#??????? 6,2,1 +?????..?.#?. 1,1,1,2 +?????.?#??#??. 1,5 +??#??#.#?? 2,1,1 +..?..#.#??##?#..#? 1,1,7,2 +??????##?#?.??#??? 1,1,2,1,5 +?#??#?#??.??.??? 2,2,2,1,1 +??...??#?#?#????. 1,8 +???#???#?# 1,2,4 +?#??..??.?#.? 2,2 +#??#??#??? 1,6 +?????...???##?????? 1,2,5,2 +?#..#?????#???#..? 1,11 +??????.????.## 2,1,2,2 +??#????#??##??????. 1,9,1,2 +#??###???..???? 6,1,2 +????????????#??.???? 9,2,1,1 +??#???????? 4,1,1 +?#????#.??#????? 4,1,1,1,2 +?#..?#?????????#?? 2,3,1,1,1,2 +.???????#??.? 2,6,1 +???#?????#?????#??#? 1,8,1,4 +?#?.???.??? 1,3,1 +.??????...??.??#?.?? 5,1 +??.?#????#???##???.? 2,1,11 +???#?.???#.#.? 4,4,1 +#?###?????#.???? 1,4,1,1,1 +.???.?????.???? 1,1,2,1,1 +???#??#????.??? 4,3,1 +????.?????#?? 1,1,5 +??##??.?..?????? 1,3,1,1,1 +????????..#?. 7,2 +.????##??..? 1,3,1,1 +.##?#??.#?#?#??? 5,1,1,2,1 +.????##?.??????? 2,3 +?#?#??.?.. 4,1 +?????????#?.??? 1,6,1,1 +????#?#.???. 7,3 +?????#??#?##?????.#? 12,2,1 +???#??#?.?#????#?? 7,7 +.#.?.????????#. 1,2,1,1,1 +.??.????## 1,5 +????#??.?#????.. 2,1,4,1 +.???#??????#???????? 1,1,11 +.?.???.???#?#. 1,1,2,1 +??#????#??#????.. 6,5 +#?##?.?#???#? 4,6 +????#???????????? 1,2,1,1,4 +??????#??.???????? 1,1,3,3,1 +?????.###??#?? 1,1,8 +??##?.?????.? 4,2 +?#.??.???? 2,1,2 +??#????.??#????. 4,1,3,1 +.?????#?##??. 1,7 +?###.??#?????. 3,4 +??#????##?##???.?? 4,6 +????#?#????#???#??? 5,7 +?#??#????? 2,1,4 +#?#??.??#???.? 5,2,1 +?#?#?????? 3,1,1 +?#?#??.????#? 5,6 +????.???#.???# 1,1,1,4 +?#????.????.??? 4,3,2 +.???.?.????#??##?.? 1,9,1 +???.???#???.????#?? 1,1,7,2,1,1 +?#??????.?#? 2,1,1,1 +.???#.???#?? 3,4 +???#??#??? 2,1 +???#?#?#?. 3,1,1 +##???????? 4,1 +?.?#???.##? 1,3,2 +.???.?.?#????? 1,1,1,3 +??#?..??????? 2,1,1,1 +.#.??#?..? 1,3 +?.???#????. 1,3 +????????#?#??? 5,1,1,1 +??#??????.?#???..? 4,1,1,1,1,1 +??????.???##? 1,2,1,4 +???????#???????? 1,12 +..??..?#????###?.? 1,10 +?????#?#??#?.??#?#? 1,1,7,1,1,1 +.?#????.??#?? 6,1 +?#???..??????#?. 1,2,1,6 +??.?#??#?##????#?#. 1,2,11 +??#??.???#?#??#?#. 4,1,5,1,1 +.#.?????#????? 1,1,7 +????#.????#?#?#?# 1,1,9 +#?.???#???.?#.?#? 2,4,1,2,1 +.???...???. 3,1,1 +..?.???##?..??#???. 2,3 +##?#?????????.??# 5,1,4,1,1 +?#????.?.??#### 2,1,1,1,5 +?#????#?#. 1,2,1 +?##?#??????#???????# 8,1,1,1,1 +?.??????#####?? 2,7 +#????#?????#????.??# 10,5,2 +???#?....#? 3,1 +.?#???.???###????? 2,7,3 +.??????????????## 8,2,4 +?????????.#?#??. 4,4 +?????????.?###??? 1,2,3,5,1 +??#??##.?????. 6,2 +..?.?##.??? 1,2,1 +?.?.????.#? 1,3,2 +?#????????????.??? 2,4,3,2 +.??..??.?.?#??????? 2,1,8 +#????.?.#?????# 5,1,4 +?#????.?#??#.?.? 2,5,1 +??##???#???.??#.? 1,6,1,1,1 +.???????##???#?.. 1,10 +?????.?..???..? 3,1,1,1,1 +??.????.???.?#. 1,3,3,2 +???????.#? 1,1,1 +?.??#??????#??? 5,4,2 +.???#?????#.? 1,3,1,2 +?#??#??.?????#?#??#? 5,1,1,1,1,3 +#.?#?????#??#??? 1,9,1,1 +???..????#?#???#. 1,1,2,7 +.??#?#?#??#?.?###?? 2,3,3,3 +??????#?.????# 3,2,2 +#?##?#??#?##? 1,10 +?#??#.????#?##? 4,7 +??????#???#?..?# 7,1,1 +?????.?.?#?? 1,1,1,1 +.???#?????#.?#?#?.? 5,2,1,1 +??.?#.????#? 1,2,1,1 +????#?#??????? 2,6,1,1 +?.????????#? 1,3,1,2 +????????.#?#?? 5,3 +??????#??.? 3,1 +...?#?????#??.?# 3,5,2 +?##?#????.??##?.? 6,1,4 +#?.?.??##?#? 1,1,5 +????#?#???#?????#. 1,5,1,2,1 +##?#?#??.??.????? 8,1,1,1,1 +??#?#?????????#???? 11,1,1 +??#.#???#???#????? 2,3,1,3,2 +?.??#?.??.???. 1,3,1,1 +?#????#?????? 1,5,3 +?#.?.??#?.?#???# 1,1,6 +.??????.?#???????? 1,1,2,1,4 +?#??.??.??.? 1,1,1,1 +?#?##?#?????##?..## 9,1,3,2 +????.?#.???????.# 1,2,1,4,1 +.????.???#?##? 1,1,4 +?#?.?????#?..##? 1,2,2,3 +?#?#?.?#????#. 3,2,2,1 +#.??#?#???? 1,3,1 +???..##??.? 1,2,1 +???##????.?????????# 9,1,3,2 +####???.???#???#? 6,1,4,1 +.?#???????#. 2,1,1,1 +.??????????? 1,1,2,1 +#?##?#??##?? 6,3 +..?.???.?. 1,3,1 +?..?.?#??????.???.? 1,1,3,1,3,1 +.???.#???#??.? 1,7,1 +?##?.??##?.????? 4,4,2 +?.#####???#????? 7,4 +????#??.?##?? 3,2,1 +??#.????.?#???##?#? 1,1,1,3,3,1 +.????..??#?#?##?#??? 1,13 +?.???.????#?????? 1,1,6,2 +..??.?????????????.. 1,2 +?.????#.?#?? 2,1,1,1 +???..#??#?.? 1,1,2,1 +??????.??#. 1,3,2 +??#??#..#?. 3,1,1 +.?..???#??#. 1,4,2 +?.#.????.? 1,1,1 +?#?????.?.??.???#??? 4,1,4 +?????#?#.??.? 4,3,1 +#?#??????##??#?#???. 4,2,5,1,1 +????#?????#??## 2,3,3,2 +?.???????.????? 1,2,1,1,4 +.???.?.??#.#?? 1,1,2,2 +?###?##?#?????..?? 10,1 +???????#?????.#.??.# 6,1,1,1,1,1 +??.????#??????. 4,1 +?#???#.??#?. 3,1,2 +?##?#..?#?..??.. 5,3,1 +.####?#???.?.?#?... 8,3 +????#?#????#??#????? 1,11,1,1,1 +????.??????#???? 2,2,2,4 +?.#???#?#??. 1,4 +??#???????#??...??? 4,1,3,1,2 +??.???#???#???#??.? 1,3,5 +????#?..?? 3,1 +.????#??.?.?? 3,1,1 +??#?##????. 1,4 +?#?..?????????#?. 1,10 +#??##??..#.#? 7,1,2 +???###?????.???## 1,8,1,2 +#??#??.?????????..? 1,1,9,1 +????#?????#???.?? 12,2 +?.????.?##????.?? 1,3,3,1,1 +???##..????.? 1,2,4,1 +#?#??.???.??#?#?? 1,3,1,5 +??#?#??????????? 1,8,1,2 +#?????#??. 3,3 +.????##??.????? 1,4,1,2 +????#??????..??.# 9,1,1,1 +.??????.#.#? 1,1,1,1 +?.??.#??.??.??#.?.? 2,3,1,3,1,1 +????##???##???#?#? 1,9,3 +.???.??.?# 1,1,1 +???#?????#??. 3,1,2 +??????#.??????###.? 6,4,3 +?#?.???#???.?#..?? 1,1,4,2,2 +??.?????.???###.??? 2,2,1,5,2 +?###????#?? 3,3 +?????##?.?#?##???. 7,6 +???#???##????? 3,4,1 +..?????.?##????.??.. 4,7 +.?...???#? 1,3 +??##??#????.#??????? 3,1,1,6 +?..?.#?????#? 1,1,2,1 +???.??#???? 1,5 +.?#??#??????????? 1,3,1,1,1 +????#?#?.?#? 7,1 +?.???#??????.. 5,1 +?#???.????.?#??? 1,1,1,1,5 +?##????.?. 2,1,1 +?#.?.##??? 1,3 +?#??????.?..?.???. 1,2 +#?????????#??#???? 5,1,8 +???#.????.??? 1,1,2,1 +????#??.##? 1,1,2 +???????#??#? 1,8 +?????.?????. 2,1,1,1 +????.?#?###?.?#???. 2,7,2,1 +???.##????????????. 2,3,7 +#???#????? 3,1,1 +???##???##???# 1,3,3,1 +#???????#.?.?.?? 9,1,2 +?#?????##??????? 3,10 +???...?????###?? 1,7 +???.??#?##?#? 1,1,2,1 +#.?#???#?????#. 1,7,1,1 +#??????????? 3,3,1 +.???.?.#?????# 1,7 +?###???#??#?.?#????? 12,1,1,1 +.??????#????.??? 6,1 +?#?.##?##??.? 2,7 +???..??...??. 1,1,2 +??#??#?#???#???????. 7,4,3 +??.??#????. 2,7 +.?#?.????#??#.?? 2,7,1 +?.#.??#??#???.?? 1,1,8,1 +????#??#?#.??.?.#### 10,1,1,4 +.?#??????.?.???? 8,2 +??#?.??.?? 2,2 +??????.??????##?? 4,4,5 +?#??#?.?#? 3,1,3 +???###????..????..? 7,4 +??.???????#?.? 2,5,1,1 +?#.?#?????? 1,3,1 +?#??.??..##?.???#.? 4,1,2,1,1,1 +??????#????#?#??.??. 1,3,8,2 +??????#?#???? 6,3 +?????##????#?##? 2,3,1,5 +??#??#??####??.??##? 12,4 +..???##??#?#??.?. 10,1 +?.?????##???? 7,1 +.????#??#?##????.#? 2,11,2 +?????...?.##?##? 3,1,6 +?????#????.? 1,7,1 +?#???#?#?? 3,1,2 +??#????????.?#?? 1,4,2,1 +?????#?#??? 1,6 +?...?#??..???????.? 1,4 +??.???##?#??##?.??? 1,1,10,1,1 +???#?.?.??#?#?# 1,1,1,7 +?#?..???##?? 3,1,4 +??.??.?#????##?.??#. 1,1,9,2 +??????????? 2,1,2 +..???????#? 1,2,1 +##??##?.?. 2,2 +??###??.????#? 3,1,1,3 +?..???#?.? 1,5,1 +.#??????.#?. 1,1,2,1 +.????#??????????.? 1,5,1,1,2 +????#????...??????#? 3,1,3,3,3 +.??????.??. 3,1,1 +????#?#????#??#??? 1,1,1,2,2,1 +???..#????.? 1,1,1,1 +?##??##?#.?#?.??. 4,4,2,2 +..??????##???? 3,4 +????.?.??#??? 3,1,2,1 +???????.?. 1,1,1 +..#?.?##?#????##?? 2,11,1 +??????????#???. 3,6 +.?????.??.?#??# 1,1,1,2,4 +?.???????. 1,1,1 +???#??????#?## 4,1,1,2 +.?...?????.???? 1,4,2 +?##??#?????..?.? 9,1 +??.??#????#?.#??#?? 2,6,1,2 +.?..#??#??#.?#?##?.# 1,1,4,4,1 +??.?#??.#? 1,2,2 +.#??..???#. 1,3 +???##.#?.?? 4,2,1 +?.#??????.?## 2,1,3 +##????.?##?#?????? 2,1,1,6,1,1 +#..???#???#??#???#?. 1,6,1,1,1,1 +?.??.?#?#?.# 1,2,1,1 +..##?????.## 5,2 +??##..???#?##????? 1,2,8,3 +.??#?##?#?#?#??. 10,1 +#??##?#??.??.#? 8,2,1 +????...??#?#?#??.??? 2,8,3 +??..#.??#???.?#??? 1,1,4,1,1,1 +???.?????.???.?# 3,1,1,1,1 +.??###.?#????. 3,3 +##?#??.??..?##?. 4,1,1,4 +##????.??#??????.??? 6,3,1,2,1 +?#?#?#?#?????? 1,1,1,5 +.????##????. 2,6 +#???##???????.?????? 10,1,1,1 +?#??.##?#?? 3,2,2 +?#?????.#??## 1,2,2,2 +.?????????#??#?.?? 1,1,9,1 +???????##?#? 1,1,4,2 +??#?.??????.??#??#? 4,1,1,1,1,5 +?#????.???? 3,1,1 +??.?#??##? 1,2,3 +.????????.? 1,1 +???.???#?##?#?#??## 1,2,9,2 +?????#?##.?## 3,4,3 +#????????? 1,2,2 +?#..?#?.?#..??##???? 2,1,2,1,3,1 +..??????????#?#????? 2,4,5,1,2 +??#?#?...???????? 3,2 +??#.##??##?????? 1,1,2,2,4 +?#?.??.???#?# 2,1,1,1 +.##.???#???#.?.? 2,1,2,1,1 +#???#???#????#??#. 1,1,1,4,5 +?#?.????.? 1,1,1 +#?????..?. 1,1,1 +??.?#???.??#? 2,1,2,3 +..??.?#???##?#??#?#? 1,14 +?.?#??#????##????##? 6,3,5 +????..?.?.???###??. 1,1,1,1,5,1 +?.??#?.??.?##?##### 1,8 +?.?#?????.??? 5,1 +???.##?????????? 2,2,2,1,2 +?.##????##???????#.. 2,11 +#???????#??#???? 1,1,1,6,1 +#????#??????# 1,1,5 +??.#??#???..##??#?#? 1,6,7 +#??##?????????###?.. 6,7 +.???????..#?.#??.? 2,2,1,2,3 +????????#?#???#??? 11,1,1 +??..??.????? 2,1,1,3 +?.??#??#??? 1,1,2 +??.??##?#.?#??#?.??? 1,6,5,1,1 +.#?#?#??#?#?????? 10,1,1 +????????????#. 6,1,2 +??.??##???.??? 5,1 +.??????#???###?.? 1,1,1,4,1 +#.??#???#????????. 1,4,5,1 +##?##?????#???#??#?? 15,1,1 +.????#?#?#??? 2,1,5 +??###??.?? 4,1 +??#?#??.?? 4,1 +??.????.#.??#??? 2,1,4 +?????..???#?.?? 1,1,1,3,1 +?.#???????????#???# 5,1,3,3 +.???????????.?? 2,6 +??#?????#.?#????? 8,4 +??#...#???? 1,3 +?.??.#??.####? 2,3,4 +#?????#?????#??#?. 1,1,1,1,3,1 +????#????### 2,8 +?????..??. 2,2 +?.??#..???#?##?? 3,7 +?##????##??#. 2,1,4,1 +.#?????????##?.?#..# 1,3,1,4,1,1 +?#?#??#????.#.#??. 1,1,3,1,1,1 +??#???.??????#?.. 2,1,3,3 +#?##???#????#. 1,11 +??..?..????#???# 1,1,1,3,2 +??#?.?#?#? 3,4 +??#???#??#?# 3,3,1,1 +#.?..?##?#????#??##? 1,1,3,4,1,2 +???????#?.?????#?? 6,7 +?#??#??.?????#. 5,6 +?.??..???#?..??.??? 3,1 +?#??#???#? 1,1,2 +?.??##??????????? 10,3 +##?..#???#?.?? 3,3,2,1 +??#???..?#???? 5,6 +?#?.??#???.??#?? 3,3,1,1 +.#???????.#????##?. 3,3,7 +?.??##??..?? 3,2 +?#??.???.???.?#? 4,1,1,2 +?##?.#??#?? 2,1,2 +.???#?.???????##.?? 2,3 +?#??#??.?.????..?? 1,4,1,1,1,1 +?.????????. 1,6,1 +?????##?#????.#. 8,1,1 +?..????????????????? 1,11,1,1 +..?#?????#...? 1,3 +?.?#???#.?? 2,2,1 +##??.???.?? 3,1,1 +???##??.?.#? 5,1 +??.?..#??.?.? 1,3 +.???.?##????????? 3,11 +#..?#???#??.???? 1,8,2 +.??????.?.?.????#?#? 5,1,2,5 +.?????#???#???..??? 5,3,1,2 +?????#????.? 8,1 +.??#.??????##?.. 1,9 +#???#?#..??#?#???# 1,1,1,1,7,1 +#.?#??##???#. 1,1,2,1 +.??????.?#???? 4,5 +???##?.??????.#.??.? 3,6,1,1 +????.#??????? 1,4,1 +??##?.???? 3,1 +.??##?????#?#???#? 1,4,6,1 +??#?####?##?.??#?#? 12,3 +#.?.??##?#.????? 1,1,4,1,1 +???????..# 1,1 +?????#??????#. 2,5,4 +??#???#???.??#? 7,1,1,1 +??????.?###. 2,4 +?#.??#??#????. 1,8 +???#???##??#?? 1,9,1 +??###?????????? 11,2 +??...??.#?#??#??. 2,1,1,1,3 +???.????#??.?. 3,1,2,1 +??###??#????. 1,3,2,2 +??#???????##?? 4,1,5 +?#????????#.??? 1,7,1,1 +???#???#?????# 1,1,7 +?????.??.?????? 2,1,2,1 +??????#?#??#?.?? 1,1,3,1,1 +?##?#??#?.#? 2,1,1,1 +?.???.??.??????? 1,1,2,2 +????????..???#? 1,1,1,1,2 +??????.##?.?###????? 5,3,3,2 +#???????## 1,1,5 +???.??#??#??#.# 2,1,1,5,1 +???#????.#?#? 4,2,3 +??.#??##????? 2,7,1 +???#?.?.?????? 5,1,2,1 +???.????.? 1,1,1 +???????##???????. 1,8,1 +??.?#???.#??#?? 1,1,2,2,1 +?.???????.??#??#?.?? 7,6 +?????..?#???. 2,3 +???##??#??.?? 9,1 +??#?##??#??.???#?? 11,5 +????????#??#??# 4,9 +.??.?.???? 1,1,1 +??????##.???? 3,3,2,1 +????????#???#??#???? 1,11 +#.????#?????#?#???? 1,1,1,4,5,1 +??..????????.??.???? 2,1 +#.?#?#?..?.###?#?? 1,2,2,1,5,1 +?????.#.??# 4,1,1 +?.?.?????????????#? 1,9,1 +???..###?.? 2,3 +???#???#.####???? 3,1,6 +?#???#??????##?..? 1,7,3 +????#.????#??.??.?? 4,1,3,1,1 +???#??????? 2,2 +#.??.???#??#???#? 1,1,4,2,3 +#???#.???????##??? 1,1,2,1,5 +.????#?????#????? 1,4,5 +??#..#??#? 1,1,1 +..?#?????. 3,1 +??.???##?? 1,2,3 +????.????? 1,1,1 +?##???.#?#???.#.#? 2,1,1,3,1,1 +??.#?????##?#..??.?? 1,2,1,5,2,1 +.??????#??#????#.? 1,4,1,4 +??#?#?#?##????.?? 1,10,1,1 +.????????# 2,1,1 +??#???.????.##?? 3,1,2,4 +???.##?.???.???#?.?? 2,2,2,1,2,2 +?##?????#?????#?? 2,4,1,4 +??.?#??#???????.?? 2,2,1 +#??#??????.????#? 1,7,3 +?.#???#.#? 1,5,1 +.?#?????#??.? 4,3,1 +.##??.?????.?? 4,1,2,1 +???#??#?.?? 1,3,2 +?##???#????. 2,1,1,2 +????.###?? 2,3 +#.??#?????????????? 1,5,6,1,1 +????#????#?.# 2,7,1 +????.??#.? 3,1 +??????..?##.?????? 2,1,3,1,1,1 +?#??.?##?#??? 1,1,7 +#?.??.#..??? 2,1,1,1 +??????#??.??#??# 1,2,3,1 +??##??##??#?.. 1,2,3,3 +??????????? 1,6,1 +??????.##???#??? 2,8 +#????????#?? 1,1,1,2 +???????.??? 2,2,1 +?.????..??.?.?? 1,3,2,1 +#??.#?#???? 1,3,1 +???###.?..#???.#??. 6,1,1,1,3 +.#??????#?#????? 2,2,3,4 +?????..#.#? 3,1,1 +.?????#.???#?? 6,3 +.#??##.???#?#?#???? 1,2,1,6,1 +.??#????#?#.?????.? 9,1,1,1 +?????????#??. 3,3 +?#..?#???#? 2,1,3 +.#.??#?###.??? 1,6,2 +?.??.?#?.? 1,2,3 +??#.????????.???#? 1,1,1,2,4 +???????#??#?#??.? 2,1,4,1,1 +?????#???..#?? 1,2,1,2 +.???#?#???????? 3,1,2,4 +???##??.??#?. 5,3 +?#.??#??.? 2,3,1 +.#.?#?#????.??????? 1,6,1,3,1,1 +?????#???????##??# 1,3,7,1 +.???????#??.? 1,2,2,1 +?#??####??? 8,1 +??????.??##???##?#?? 2,1,5,4 +?.???????..??.?##??? 1,4,1,1,6 +??#?#???????????..#? 3,5,1,1,2,1 +??#???#.???.?? 2,1,1,2 +?##?##.?????##??# 2,2,7,1 +????.???#?#?.?#? 1,2,2,4,2 +?#.?#?.?#? 2,1,3 +???????#?#??? 1,8,1 +??????#??#??. 4,3,1,1 +???#??##?#??.?.???#? 2,5,2,1,1,1 +.??#??.??###??.?? 3,6 +?????#.?#??? 3,1,3 +???.??.??#???? 1,1,3,1 +.?.?.###???#?????# 1,1,7,1,2 +.?##?.??.#??###.?. 4,2,6,1 +##.??#???#####?#??? 2,3,10 +??????????? 1,1,3 +?.???##???..?. 1,5,1,1 +??#?#?#?#?#???# 10,2 +???#?#??#?##??#???? 16,1 +.?..?.??.?#??.# 1,1,2,4,1 +?#.?#????#.??#? 1,1,2,1,3 +?.#???#???#?#??? 6,4 +?..???.#?#??.??.?.? 1,2,5,1,1 +?#.????##??###???? 2,5,7 +.##????###??#..#???? 10,1,3 +?#??.???.?# 4,2,1 +????##?????.??#?.?.? 1,7,3,1 +?##??.???#????????#? 2,1,3,8 +????#??..???.?????. 2,3,1,3 +?#.#???#???.??.???? 2,2,1,1,2,1 +...?????.?? 1,2,1 diff --git a/src/day12.scala b/src/day12.scala new file mode 100644 index 0000000..59581cc --- /dev/null +++ b/src/day12.scala @@ -0,0 +1,96 @@ +package aoc +package day12 + +import scala.annotation.tailrec +import scala.collection.mutable + +import util.chaining.* + +val dayNumber = "12" + +@main def part1: Unit = + println(part1(loadInput(dayNumber))) + +@main def part2: Unit = + println(part2(loadInput(dayNumber))) + +def part1(input: String): String = + def generateArrangements(cond: String): List[String] = + @tailrec def aux(acc: List[String], remaining: String): List[String] = + remaining.headOption match + case None => acc + case Some('?') => + aux( + (acc.map(_ + '#') ++ acc.map(_ + '.')), + remaining.tail + ) + case Some('#') => + aux(acc.map(_ + '#'), remaining.tail) + case Some('.') => + aux(acc.map(_ + '.'), remaining.tail) + case _ => ??? // Can't happen + aux(List(""), cond) + + def isValid(arr: String, groups: Array[Int]): Boolean = + arr + .split('.') + .filter(_.nonEmpty) + .map(_.length) + .corresponds(groups)(_ == _) + + input + .split('\n') + .map { case s"$cond $groups" => + generateArrangements(cond) -> groups.split(',').map(_.toInt) + } + .map((arrs, groups) => arrs.count(isValid(_, groups))) + .sum + .toString + +def part2(input: String): String = + def countArrangements( + cond: String, + groups: List[Int] + ): Long = + val cache = mutable.Map.empty[(List[Char], List[Int], Int), Long] + + def countCached(cond: List[Char], groups: List[Int], curGroup: Int): Long = + cache.getOrElseUpdate( + (cond, groups, curGroup), + count(cond, groups, curGroup) + ) + + def count(cond: List[Char], groups: List[Int], curGroup: Int): Long = + if cond.isEmpty then + if curGroup == 0 && groups.isEmpty || groups == List(curGroup) then 1 + else 0 + else + cond.head match + case '?' => + countCached('#' +: cond.tail, groups, curGroup) + + countCached('.' +: cond.tail, groups, curGroup) + case '#' => + if groups.headOption.contains(curGroup) then 0 + else countCached(cond.tail, groups, curGroup + 1) + case '.' => + if groups.headOption.contains(curGroup) then + countCached(cond.tail, groups.tail, 0) + else if curGroup == 0 then countCached(cond.tail, groups, 0) + else 0 + case _ => ??? // Can't happen + + countCached(cond.toList, groups, 0) + + input + .split('\n') + .map { case s"$cond $groups" => + cond -> groups.split(',').map(_.toInt).toList + } + .map((cond, groups) => + countArrangements( + List.fill(5)(cond).mkString("?"), + List.fill(5)(groups).flatten + ) + ) + .sum + .toString