diff --git a/advent-of-code-2023.csproj b/advent-of-code-2023.csproj index 48a4fb0..b8b307c 100644 --- a/advent-of-code-2023.csproj +++ b/advent-of-code-2023.csproj @@ -54,6 +54,8 @@ + + diff --git a/inputs/12.txt b/inputs/12.txt new file mode 100644 index 0000000..df0de98 --- /dev/null +++ b/inputs/12.txt @@ -0,0 +1,1000 @@ +??#??????#..????? 9,2,1 +???##??#?.?#? 5,1,2 +????.????. 1,1 +.?#?????###???. 1,6,1 +????.?#????#?? 2,1,1,3 +??.??.?????#??##.??. 1,1,10,2 +??.?###?#??????? 2,7,2,1 +?????..#??? 4,1,1 +#?????.?#???.#.???# 1,2,4,1,1,1 +??#??#???????.?#??? 1,1,7,1,2,1 +?..??#????#?.? 3,1,2 +..#?????.#.??#.? 1,3,1,1,1 +?#.?.?.??#??#?#??? 2,1,1,10 +???#???.##?#?????#.? 1,1,1,6,1,1 +?.??#?#?#?#?? 1,8 +?#??????????? 2,4 +??????????? 4,1,1 +????.??#?. 4,3 +??###??????? 6,1,1 +?.?.?#???#?. 1,5 +??.?#?..???.???###? 3,1,7 +?????#.????? 3,2 +#???????.??????#?? 1,4,1,2 +?#??????????#??. 1,11 +?.????..?..???##? 4,1,6 +??????#???#?#?.# 9,1 +?#?#??#?##?##?.#??. 10,3,3 +??##?#?##????? 8,2 +???#??#?.?.???? 5,2 +?.??.?..??????.????# 1,2,1,6,3,1 +?..#????#???#??.?.?# 1,1,9,1 +.?#?.?????. 2,1 +???##.???#???#???? 1,2,5,3,1 +??????????#?.?.??.?? 9,1,1,2 +.#.???????.???#. 1,1,5,1 +??.??????##?.? 1,2,4 +?????.??.#?.#.# 1,2,1,1,1 +#?????.???????#.??? 1,2,1,1,2,2 +?#?????..#????#? 6,1,4 +.??????.???#??? 5,1,1 +??????.?#??# 5,2,1 +??.?#?.?#?.#??? 2,2,1 +???#?.#???.?. 4,3,1 +???.?#??##..##??.? 1,6,3 +???##?#?#.#???.?#?. 1,7,3,3 +#.?????#??????? 1,1,1,6,1 +?#.?.???## 2,1,2 +?.???#????? 1,2,1 +?.?#??.?#?#??.#.?#?? 1,1,6,1,1,1 +??.????.??#? 1,1,1,2 +??.#?#??.???#??#?? 1,1,1,1,7,1 +.?.??.#??? 1,1,2 +????????##?#??#?..? 6,1 +?.???#?#.?.?#. 1,5,1,1 +?.??#???.??. 4,1 +???.???.?#.?#??#?.?? 2,1,2,2,3,1 +.#????#.??#? 6,4 +#?????.???##?? 4,1,1,4 +..????#??????????# 10,3 +#????##?#..? 9,1 +?#.?.?#?.? 2,1,1 +?#?.##???????.????? 3,4,2,3,1 +?..?#??##????????# 1,7,1,1 +??.?#.??????????. 1,2,2,6 +?????..?#?????????#? 1,1,8,1,2 +??#???????. 1,4 +?????????##.?????? 1,8,1,4 +#?#.?.??###??#????? 1,1,1,9 +??#????#.??????.??## 1,6,2,2,4 +...#?.?###? 1,4 +#.?#..???#??. 1,1,1,3 +.????.???? 1,3 +.#??..???????.?? 1,1,5,1 +.???????????? 3,1,4 +?..#????????.?.#?? 1,3,1,1,1,1 +???##??.???.#? 2,2,3,1 +??#?#?????????. 7,1,1,1 +???###?#??.???? 9,2 +??#?.??????.??##???? 3,1,2,4,1 +????.???.? 2,1,1 +?..?...#??????#?.?? 1,2 +????#???#?????? 4,1,6 +??####??????.#??#?? 8,2,1,1 +#???????.??.??. 5,1,1,2 +????#?#??? 1,5 +.????????? 1,2 +???????#?. 1,2 +?###..##?. 3,2 +.??#??.??????.??#.#? 2,1,4,1,1,1 +?.??###?#.? 5,1 +???##???#?#?.#?. 11,2 +.??#???..?#?????#? 3,5,2 +???#?#.???#?? 1,1,4 +?.??.??.?? 1,1,1 +???.???#???#?????#? 1,12 +?#??????#?.?#? 3,1,3,2 +?#??.?##???.?.?. 3,5,1 +????.?????# 1,4,1 +.???#???#??#.?.??? 2,5 +##??????.?????? 5,1,1,1,1 +.?##?###??#?? 7,2 +#.????#?????????#??# 1,2,11,2 +?.??.?#???????? 1,1,10 +???#????#?? 2,1,1 +????..??#? 1,2 +.??..????##.? 2,5 +?????.#??? 1,2,1 +?..#.??????? 1,1,4 +??#??#???###?# 5,3,1 +???.?#..#? 1,1,1 +??#?????#??#????##?? 1,2,1,3,1,6 +??????????###??.?. 2,3,3,1,1 +??#???.??? 3,1,1 +????????.? 1,3,1 +?#??.??????.? 2,6 +???.#????..#??#? 2,1,3,5 +????.?#??#? 2,2,2 +??.????#????#????#. 1,1,5,1,1,1 +??#.????##?#??# 1,8 +?#???##?#???.#????. 8,2,1 +#?#????#?#?.#?. 1,8,2 +#??#??##?#???. 1,10 +.?????.??? 5,2 +?#???????.?. 2,1,1,1 +?.##???..??#??###?? 5,1,8 +?.??????#???.?#? 1,7,1 +??.#??????.?.#???#? 1,4,1,1,3 +.?#?????#????# 2,10 +##??????#..? 2,2,3,1 +#?????.??????#?? 6,2,2 +?.#?????#?# 5,1,1 +????.???#????????? 4,12 +???##??.??????? 5,3,1 +#?????#.?.??.#?# 1,1,1,1,3 +??##??#?#? 4,1,1 +???????????.?? 1,3,1,2 +.?????#.??#. 2,2,1 +#.#?.??##????#????? 1,1,1,7,1,1 +?.??#.??????? 1,1,1,2 +#?.?#??#?????.?.? 1,5,1,1 +?.?.??#??? 1,4 +???#??#?.?.????#.#. 7,1,2,2,1 +..???#????????#? 5,1,1,2 +##????..#???? 3,2,4 +?.?.#?#?????.#??#?? 6,1,4 +???.?##???.????.?? 2,4,1,1,1,1 +??#????.?#?. 4,2 +?#???????#?#???#? 3,1,7,2 +????..#???? 2,5 +?#.?????????? 2,1,3,1 +?????.??##?#.#????? 1,1,6,1,2,1 +#??#??..#? 1,1,1 +?????#????#??#???.? 2,8,1,1,1 +.????##?.#????#?. 4,6 +.?.???.#?###.? 1,5 +?.??##??????.#??# 8,4 +?#????#??#. 2,5 +??#??#.#???#???# 1,2,2,1,1 +.#?..???.#??#?????#. 2,1,1,2,5,1 +?.???##??#?##.? 1,7,2,1 +?#??#?#.??.?.? 3,3,1 +??#???#???#????. 11,1 +.###?????????? 4,1,3 +??#??#????..###?.?? 6,2,3,1 +#???.##?.?? 4,2,1 +??.##??#??.????# 6,4 +????#?????. 1,7 +???.???????#???#? 2,1,10 +?????###??.?##?? 1,5,3 +???#.##?#???#?#??? 2,1,8,1,1 +?..?##?.?????#? 1,3,5 +????????????###???? 1,1,2,1,8 +#??.?#?#?.?????#?. 3,1,1,1,1,1 +?.?????.?#??##??# 2,1,3,5 +???##?#??????#.??? 10,1,1 +??.?###?#? 1,6 +???###??????? 6,4 +??????#.?.#??? 1,2,2 +.?.?.??#?????#???#?? 1,1,8,2 +?#..??????#.????. 2,1,2,1,2 +.??#?.????##??#.?.# 1,2,7,1,1 +??###????.???#???? 5,2,2,2,1 +?#???#?#..?? 2,1,1,2 +?.#?#??.???? 3,3 +.???#?.??????###???? 3,9 +????.##?????..#??.? 1,1,3,1,1,3 +????????.??????#? 1,3,6 +????.#.?#?#?????#??. 2,1,11 +#???????#? 1,1,1 +?????##?##? 3,6 +?#???.??##?#?????.# 1,2,7,1,1,1 +.?.#??.??.???##???#? 3,1,9 +#????????#???.??? 2,1,1,5,1 +????#??.?.?#??###?# 2,1,1,1,9 +?#.??..??###???? 1,1,1,5,1 +?.??????.?#.?.?#???. 6,2,1,2 +????#??????? 1,6,1 +#?.??.??#?.??#??? 1,2,1,1,5 +.?##?????#?##??.? 5,6 +?????..####????.? 4,8 +?#?????###???????. 9,5 +?????????#???..? 1,3 +??#?.???.?.?.?? 2,1,1 +???.??????#??#??#. 1,2,1,1,2,1 +.#???###??#???.?#??? 11,3 +?.???.??##?. 2,3 +???#???????##??#? 4,1,5 +.???#?.?????## 1,1,2,3 +?..????##????.??#.?. 7,2 +?#?#.??#???.????#.? 4,6,1,1 +.#??????##??##.?###? 2,2,4,2,3 +?????#???##???.##?. 1,4,3,1,3 +#..???##???##?.??#. 1,5,4,1 +.????#?#..????#??. 6,2 +??#??.???#?####. 2,1,8 +.???.??#?? 1,4 +?#?..????#??????? 2,9,1 +????#??#??#???.?. 6,4,1,1 +???????#.?..?? 5,1,1 +??##?????##.??.????? 11,1,1 +.#?##?????. 5,1 +#.??????#??????? 1,10,1 +??#??????.##???. 1,1,1,1,4 +?????#??#?. 1,1,2 +?.?#?#??.?.#???? 4,3 +#?#.?#.????? 1,1,1,1 +??????????#? 5,1 +??????#?.?##?#?????? 3,7 +.????????.?...? 1,2,1,1,1 +??##???##??#.???? 1,2,4,1,3 +???#?.#????? 1,1,1,2 +.??????.????.??#? 4,3,4 +??????.??????? 1,1,2,2 +????..#??#??? 1,2,1,1 +??#??????#?????.???. 10,2 +?..#???..??..?.? 4,1 +??#?#??#??.#.??#? 7,1,1 +..?#???.?.?????? 5,3 +?.????#???.?#?? 1,2,4,2 +.?#????#??.?? 5,3,1 +.#.????##??????????# 1,17 +???????.???.# 2,2,2,1 +??##?????.??. 7,1 +?.?.????.??? 1,1,1,1 +?.????????.# 1,4,1 +?????#??..#?#.? 1,1,3,3 +?#?.#?##??#?? 1,5,2 +?.??##??#??#???? 5,4 +?.?##?..???###??? 3,6 +??#.??#.??.. 2,1,1 +#?##?????????#???? 1,2,1,6,2 +?.?????.?????#??.#.? 1,1,1,8,1,1 +??.?#?.#?##????#.? 3,5,3 +..??.????????..? 1,2 +.???..????.???..? 3,2,2,1 +?.?.??.???. 1,1,1 +????#?#??????.??.??. 8,1 +??#????????? 4,1,3 +??#??????..#?#?? 2,1,2,3,1 +?#??#.???# 1,1,1 +??#?????#?? 2,4 +????#.?#???? 5,1,2 +??.???#?????.??#??#? 1,3,1,6 +?#.?#.????.#? 1,2,2,1 +#?#??#????.?.??????? 8,1,1,2 +??##???#.??. 4,2,1 +?##??#???.? 6,1,1 +?.#?#.?#??????? 3,5 +?????#???#..?. 1,8,1 +??#..#????.. 2,1,1 +?#????.?#?. 2,2,3 +?.#????#????###?? 8,3 +????...?.?? 2,1 +##.????#?????.?##?? 2,5,4 +.?#????.???? 6,1 +??.?????..???..??? 2,3,3,2 +???????#???#???????? 1,1,8,1,1,1 +.?.???.?#??.?.?? 1,1,3,1,1 +????#.????###.?? 1,1,1,7,1 +?.?##?#???.#???.? 5,4 +????#?...??.##?????? 2,2,1,5,1 +??.???###? 2,6 +??.??.?.?##???. 1,2,6 +???????#???#?.??#??? 10,5 +?.???????#?#??. 1,8,3 +..?#?##?.???? 4,2 +.?##?#?????. 5,1 +?#????#?.??. 1,2,1 +??#?#.???????. 3,3 +???.????#??.# 2,7,1 +????#?.#????????? 5,1,1,1,1 +????##???????? 5,1,1,1 +???#?????..?#? 2,5,3 +?..??##.?????#.?? 4,1,1 +.?#????.???#####?? 4,2,7 +???.?###.???.? 4,2 +?#?????.?#???? 6,4 +???#?.?..????? 5,1,1,2 +??.#??????####??? 1,1,2,1,7 +?.???????#? 2,3 +..#????????#? 8,1 +?#?##?##?##????. 12,1 +?#?.??.?.?# 2,1,1 +.?.?#???#?.????. 1,6,1 +?#???.??.???????? 5,1,1,2 +???????#?#??.?..?? 1,6,1,1,1 +???????#???.. 3,1,1 +..??#?????????? 1,2,6 +??????##?????#???## 8,1,2 +??????.#?####?#?#??# 1,1,1,6,2,1 +#?#????..#?.? 1,5,1,1 +?##???..?#? 2,1,1 +.????#.????.??#?#. 1,2,2,3,1 +?###??????#. 5,1,1 +.?##??#?????...???? 9,4 +?.???#?##?#??? 1,10 +???.?.?#???#???? 2,1,3,2,2 +?????##?##?#? 2,2,2,2 +????#???## 2,2 +??##..#.??.? 4,1,1,1 +??..#?#????? 4,1 +.??#??????#?????#?? 3,3,3,4 +#?#??#?#??#??. 6,1,4 +???##????.?#. 5,1,2 +??????##?????# 7,1,2 +#??##?#?#????#?????? 12,1,1,1 +?.?.???.???. 1,1,3,2 +???#.??#####??##?? 1,1,12 +??#?##.?#.?? 4,2 +?????????.???.??#?. 1,6,1,4 +?.#??.?#.???.?. 1,1,2,1,1 +?.#????#??.??? 6,2 +#?..?#?#???###??#?? 2,14 +????????##?????.?#. 3,5,1,2 +.#??#?..?????#????? 2,2,8,2 +#?????#?????.?.?# 1,1,4,1,2 +???#???????? 1,2,6 +???????.?..? 1,1,1,1 +..?#.?#???.#????#?. 1,3,1,1,1,2 +.??#?????##????##.?? 11,3 +.##?.##???##?#?#??? 3,11 +?##???#.????#??.#? 7,1,1,3,1 +???.??#??#?????????? 1,1,1,10,1 +?#.#??????#????#???# 2,4,3,7 +.#????#?##??#????#? 2,8,3 +????????#???.???#??? 1,5,1,2,1,1 +.#??????#? 2,4 +#?#?????????# 3,5,1 +..??#??.#?? 1,1,2 +??.?#????.??? 3,3 +???#?#?##?#?????? 11,1 +#?????#?##???#?.?.?? 4,8,1 +?#??.?#??. 2,4 +???????..?#?.??? 3,2 +?.##?#?.????##?. 5,4 +???.#???????????##? 1,7,2,3 +.??#?.??#??? 1,1,4 +??.??.?#??? 1,4 +..?????#.?.. 1,1 +??????.???#?#?##??# 1,1,1,1,6,2 +??##?#..#??##?#???.? 5,7,1 +???#?#????#?.#. 1,5,1,1 +.????????? 1,1,1 +?#??????????????? 6,1,1,1,1 +?.?##???..#. 1,2,1,1 +#?#????.#.?????##??. 3,1,1,7 +?????.?#?#??#??????? 1,1,1,6,5 +??..?.??.#????# 2,1,2,4,1 +?##??#??????????.? 9,2,1,1 +#?.#..?#?### 1,1,6 +???#???.???#??#.?? 1,1,1,3,1,1 +?#?????.?#????#???? 3,9 +.??????.??.? 4,2 +?#?#?.?#??#?#???? 4,2,2,1,1 +???.#??#?##??? 1,1,6 +??.?..??.?..#????. 1,1,2,1,2,1 +???#?????. 2,1,2 +.???#??#??? 3,4 +#????#?#???? 1,2,3,2 +??#??.#?... 2,2 +??.?.??#??#?. 2,1,5 +???#??????????? 8,1 +#????#?????# 2,7 +??????.#.##?? 4,1,2,1 +?.?.?#?###??#? 1,1,6,2 +??.?.?#???#???? 1,1,8,1 +?###?..??????.#?.??# 4,5,1,1,1 +??##?#???????##??# 6,8 +???.?????.????. 1,3,1 +????#?????????#??? 9,3 +??#???#??????#???? 10,3 +.??.##?#??#???#??.. 9,2 +..#?#?###???.? 7,1 +?????#??#???#??.?.? 2,6,2,1,1 +??????.???#????.? 1,8 +.?????.#.##? 2,1,2 +?.??#?#??????? 1,4,1,1 +??#???#.?.?#??#? 2,2,2,3 +.?#?..????# 2,1,2 +.??##??#?#??? 4,2,1,1 +?#???#?#?#..? 2,3,1 +.?????###????. 1,5,1 +??.???#???#?# 1,8 +?#?.#?#?#??.?#?. 2,6,2 +?.????#??#???.?? 1,7,1 +?.??...???? 1,2,1 +.#?.?#.?.???? 1,1,1 +.#?##??????? 5,3 +..#?#??.#????#?? 3,7 +?.?#??##?#?????##?? 1,1,7,2 +??????#..?#????? 6,2,2 +??#.??.?..?.???? 2,1,1,1,2 +???..???????? 3,7 +???????.#.??????. 1,1,1,1,6 +?#?.??.?#?#?#??????. 2,1,6,1,1 +.?#??????. 1,1,1 +.?##??#.????? 6,1 +?.?#?.?#.?? 3,1,1 +?????.????? 1,1,2 +??.???????#?? 1,5 +???????#?.???.????? 3,2,1,2,5 +??????????##?????? 2,2,6,1,1 +??#????.?????#?##?# 2,1,9,1 +??????#?#.?.?. 8,1 +?..#?.??##.?.?? 1,2,2,1,1 +??..#??##.?#????#? 1,1,2,1,4 +????#?#..?.#?????? 7,1,1,5 +.#??????????.???.? 6,1,1,2,1 +#?..???.?? 1,3,1 +..?????.??.??# 2,2,2,3 +.??????.???#??.?? 1,3 +..?#.?.????.#?????? 1,1,2,7 +??#?#?.???????.? 3,1,1,3 +????#??????????## 11,1,2 +##??????.???????. 5,1,1 +#????#????#?##? 1,10 +???##???##?#?????#?? 15,1 +????.??????#?#?? 2,7 +???#??..?#??##?? 3,8 +.##?.#.???? 2,1,2 +.?#?????????#?##?#?? 2,1,8,1,1 +???###..?#?..??###?? 5,3,1,5 +?#?.??#?#?. 1,3,1 +??????#?????#??.?.# 1,6,5,1,1 +??????#???.# 3,4,1 +??#?.??.?##.?#? 3,2,2 +????????..??.?.. 1,1 +#???#??.????# 7,1,2 +??????.?#??. 1,1,1,2 +?.#???#???????.? 1,6,1 +#.#.##????.#? 1,1,6,1 +?.?#?????.?#?#? 4,5 +??.?#????? 1,1,1 +.?##?????#.????.??? 7,1,1 +####.#???#.?.???#?#? 4,1,2,6 +???.##??#???##????? 1,1,14 +??????#??#??#?#???? 7,1,2,2 +.#.????##???????? 1,9,3 +#??#?.???##?? 2,2,2 +#??#?.??.? 5,2 +?#?##?#####????#.?# 12,1,1,1 +.?#?#??#??#?????.. 10,2 +?????.???#????? 3,7 +?.????#.??.??.???##? 1,2,1,1,1,4 +?????#??..?????##? 6,7 +?#??#?.???????##? 1,1,1,1,3 +?##?????.#.?#? 8,1,1 +.?#????.??? 4,2 +#????#???#????.?#?? 1,1,8,3 +?.??????#????#???# 1,1,1,7,2 +???????#?#?#?? 2,7 +??#?????.#? 3,2,1 +?#?.??.?..#????.??## 1,1,1,5,1,2 +?????..????????. 2,1,4 +.???#?#??#??#?.???? 13,1,1 +.#?..???????? 1,1,1,2 +??????#??????? 3,9 +??#?.??.?.????#???? 4,1,2,2 +??##??.????#? 3,1,1 +.???##?.?????###. 4,6 +?#.??#???#? 1,5,1 +????.???.????#. 2,1,5 +??.?.?#?????#?. 2,3,2 +?.???##??##.????? 9,1 +..?.??????????#?.??? 1,1,9,1,1 +#?.##??##??#???.? 1,7,1,1,1 +#???.#?.????????.# 3,2,3,1,1 +?#???#?.#?????## 1,2,2,1,2 +.#?##?##??#?# 1,10 +?#?##.????.#?????? 1,2,2,1,2,4 +#..??###????.#? 1,5,2 +.???#??????##???#?? 8,4,1 +?.????#???????????. 1,9,2 +?#??#????##?.??????? 11,1,2 +??#?#.???? 5,1 +#?????.???# 4,1,2 +???#??#???????????? 2,2,1,7,2 +????.???#?????? 1,1,1,1,3 +?????????.???#????? 9,1,3,1 +??????.??.??.???.??. 4,1,1,2,2,1 +???.?#???????#??? 2,4,2,2 +###???#???#??.??##?. 7,5,5 +.?????####???????? 6,1 +????.????? 1,1,1 +?????###??#???? 2,5,5 +.??.???#??.?.???. 2,5,1,3 +#.??#????.???### 1,3,3,1,3 +????????#.? 1,3 +????##??#.?????. 1,3,1,1,1 +..#????#..?#?????? 3,1,5 +??#??#?#???#?.? 2,2,2,3,1 +###??#?????.?. 4,5 +????.?#???.?? 3,2,1 +#??????..??#??????? 4,2,2,1,2 +???#?#?..#??.??? 4,3 +???#????..?? 8,1 +#?.?#?????? 2,2,3 +??#.????.????## 1,1,1,1,4 +???#.?.#?..? 1,1,1,1 +#??#????#??##?#? 6,2,5 +.????.#???. 1,2 +?????.?????.??##??.? 3,1,1,2,4,1 +.?#??#??.?. 2,4 +????????#???..? 2,6 +?#???##???#?.?..??# 8,2,2 +.??#?..#????.?? 1,5 +.??????#???.?#?#. 1,4,3 +????.?????#? 1,1,1,2 +.#.?.?.??? 1,1,1 +#??????.#? 3,2 +?????.#?##?.???#. 2,1,5,2,1 +???#?.?.???##??.?. 1,4 +?##???????? 4,5 +?#?#??#???#??.#?#?? 3,8,4 +##?????#??????? 2,5,1,1 +????.?#??..????##?? 1,1,1,1,6 +????.#???.????#??#? 1,3,1,3,2 +?..???#??###???? 1,1,8 +??#?#??#???? 3,4,2 +#????.??.#?? 5,1,1,1 +?.????##???#?????.? 1,11 +??????..?.?#?.??. 1,2,1,3,1 +?????.?#?? 1,1,1 +.?.????????# 1,2,5 +.?.?.#?#.????. 1,1,1,3 +.???.??#?????#?? 3,10 +???#?#????.?? 5,2,1 +??#.???.?? 2,1,1 +??###??????.?#?? 11,3 +??.?????????#?. 2,2 +.??#?#??##???????.# 12,1,1 +.##??????????.. 3,1,1,2 +?????##.?#??.#?.??# 1,1,2,1,1,3 +.??..???#??#??.# 2,1,1,2,1 +??#.?#.#?.?##?#?#??# 2,1,1,6,1 +?.??.??#??? 1,1 +#?##??.?##?#?#?#?? 5,10 +.??#?.#??#. 1,2,1 +?#??????#?.?? 1,5,1 +##???..???#?..?????? 2,2,4,3 +??.#????.#?? 1,1,2,1 +?.?#.???.???? 1,1,2,1 +.???##?..?..?#?.??? 3,1 +?????????.##????.??. 7,4 +##???#?.??.???. 3,1,2,1 +????????#..#?.?##?.? 9,2,3 +?.??.?..?#. 1,1,1 +???????.?##. 5,1,3 +#?#.#.???????????##? 3,1,6,6 +?.??#??????? 4,3 +??#?##???.##? 8,2 +???.???.#????.#?.? 2,3,3,1,2 +???????##???? 2,2,4,1 +????##?#???? 1,7,1 +##??..???? 2,1,1 +?#??..??.? 3,1 +?.??#??#..????.??? 3,2,1,1,3 +#?#..#?????#??.? 3,1,5 +?????.???????#??. 1,3,2 +?.?#????.?? 4,1 +?#???#????????#? 11,1 +#????#.#??#????#?#?. 1,3,6,3 +?????##?.##??.? 2,3 +??.??#??..??? 4,2 +?#?#???#??#??##????? 1,8,4,1 +?????.?.?. 2,1,1 +?.?#..???##??.?. 1,1,5,1 +??##???#???#?#.?.?. 1,8,1,1,1,1 +?#???#??????.???#??. 10,2,2 +#?.???#??#?.?????? 1,7,4 +???????##?#??? 1,1,8 +??.?????##?? 1,1,5 +??#??##??##?????##?? 2,2,9,1 +?.?#??#?##?.???????? 8,7 +???#?#?#?#??????.?? 2,1,11 +.????????..?? 1,1,2,1 +?#??#?.??.?#? 4,1,1 +???.?????#.?#??.. 6,3 +#..?#???????. 1,8 +?.???##?##?##??#?..? 14,1 +?.???..??.??##?? 2,2,2 +????#.#?.? 1,1,2 +??????#??????#??? 1,4,1,4 +?????.?.??. 4,2 +?##??..#?.? 3,2 +#?.??#.?##??#??#? 1,1,1,8 +??#??##?##?#?#?..? 2,10,1 +??????##??????.???? 1,10,1,1 +?????...?# 3,1 +?#?.?#?#?.?# 3,1,1,2 +.#?.?#.?#? 1,1,2 +??#????????#???.???? 13,1 +.????????###????#. 2,1,8 +???.?##??.??????# 1,5,1,2 +????????.?? 1,5,1 +??.?#?##???#?#.. 5,3 +.#????????#?#? 3,4,4 +???????.??#??? 4,4 +##..????##?.?.?. 2,2,4,1 +?.???????#?#.????#? 10,4 +.?????#??.????#??. 5,1 +?#.##??#?????. 1,7 +?????????.????? 6,1,2 +.?..????#? 1,4 +?.##???????#?? 1,3,5 +??#?????#??#?#?????. 2,11 +.?.???????## 1,6 +#???..?.?.?? 3,1,1,1 +##?????..??? 2,1,2 +#?.??.???????#.???? 1,1,1,2,2,4 +?#?#?????.?.?? 4,1,1,1 +?????#?#?.???.?.? 8,1,1,1 +??###?#??????.?.#?. 10,1 +?#????.?????.?? 1,1,4,1 +?#?#???##?#??#??#.# 1,1,7,4,1 +#.?????#????? 1,1,6 +?..#??.???. 1,2 +????#?#??.???. 1,5,1 +.???.?????#?##?..? 1,8 +#??#?#???????.#???#? 6,4,1,1,1,1 +.?.##?.?..??????? 3,5 +??.#???.#?#?.???#??? 1,4,3,1,1,2 +.##?.??.?## 2,1,2 +?##.??#.?#???#? 3,2,1,3 +.??????#?????? 8,2 +#..?????#????#.?#?#. 1,6,1,1,2,1 +.????.??.?#?? 2,2,3 +?#?#???????####.?#? 3,1,4,3 +?#.????#.?.??? 1,1,2,2 +???????.?#??#????? 1,1,9 +.#?##.????? 1,2,3 +???#??#?.??.?. 8,1 +..??#??.???#???.? 4,4 +???#??##???##??????? 13,1 +?????#.?????#???#? 1,1,1,1,4,1 +????##????.??.?##. 6,3 +#???.#?.?#? 1,1,2 +##???????#?#.???? 10,1,1,1 +??#??##??#??.??.?.? 10,1 +?#??#?#????#????? 1,9,1 +#???????.##?.?#???? 2,1,3,2,2 +?###??#?#?.#..??? 10,1,1,1 +??##??.?????.??. 3,1,1,1,1 +??#.?#???.?? 1,5 +?##?#????##??#? 10,1 +???#??????##?#???? 2,10 +???#?.??#??? 1,1,4 +???#?#????##?#?.?? 13,1 +?#??????????.??. 2,4,2 +?#.?##?#?? 1,4 +????????..? 1,1 +.??##?#???? 5,2 +?##???#????###? 3,5,4 +??..?.???????##?? 1,1,8 +??#?##?????##??. 8,3 +.##?..#?????##...? 3,8 +????????#??.???# 10,1,1 +.??????#?????. 1,1,5 +?????#???#. 1,3,1 +#.?#.??#.???##.. 1,1,2,4 +??#.?.??#? 3,1,1 +?.?.##??#??#.?.# 1,8,1,1 +??????##?#?#? 1,5,1,1 +??????#?????..????? 3,3,2,5 +?##?????#.? 5,1,1 +??????.??#.##???? 2,3,3,1 +####???????#??#?# 6,1,5,1 +.??#??#.?#.????##??# 1,1,1,2,1,6 +#?#?#?#????????.?? 9,4,1 +???###?##??.???. 1,8,1 +???##???#??#.??? 2,6,2,1 +???.??#????? 1,6 +..?????#?. 1,1,1 +#?#??.#????#? 5,6 +.????#?????#?? 5,1,1 +??.??.??#.??????.# 1,1,3,1,1,1 +???????..#?#??#. 5,6 +??.???###??##?????# 1,1,12,1 +???.??????#?##?. 2,10 +#????????.?..#.#.? 2,5,1,1,1,1 +.?#???##.???#????##. 7,1,1,2 +???????#???.##???# 2,1,1,6 +?#???#???.?.?? 2,4,1,1 +?.?.?.???.???.???? 1,1,2,1,2,1 +?#??????.?#????#???. 4,1,1,1,1,1 +??#?.##???? 1,1,5 +?????#???# 3,1,1 +.????.????#.. 3,1,2 +???????#?.??##.???.? 5,2,1 +?????????#?. 8,2 +????#?#?.?.??##????? 1,5,1,1,4,1 +?#.?#????####??#.? 2,12,1 +?.?##..????#? 3,5 +???#???#??? 1,6 +??###???#????#.????? 1,7,1,1,2,1 +??.????.?? 1,1,1 +????.?##?#?## 2,7 +.??????#???. 2,5 +???##????#?#..## 1,2,4,2 +.????.?##?? 1,1,4 +#.??#?#.????.?.. 1,5,3,1 +#.??.?#?.?#??. 1,1,1,3 +???#??????#.?#?? 6,1,1,2 +??.?.?#?.?? 1,3 +?#???????#.? 4,1,1 +?..????##????????.? 1,5,1,1,3,1 +#..?#.?#??#??#??##?? 1,2,2,9 +#??#?##??..??. 1,5,1,2 +?#?????#????#??#..?? 2,12,1 +??#.???#??????? 3,2,3,1,1 +.?????.#????#???? 3,9 +???.????#??????.?# 1,2,1,4,1 +??.???.?#?# 1,3,4 +#????????#??#..?#.? 4,8,2 +????#?#?#??????????? 9,6 +#???????#???#???.?.? 1,1,1,9,1,1 +?????#?#?#??????. 1,9,2 +?#????..?#????# 1,1,1,7 +#?????????### 5,1,3 +.#?????????? 1,3,1,1 +?.?##???????#??#..?# 7,1,4,1 +?#???????##??##?? 3,11 +.????.#??.?#?#?#?.#? 2,1,1,1,7,1 +???????#?.. 2,2 +??#?#.?###??##??#?? 1,1,1,8,1,1 +??##.?????????#?? 1,2,10 +.?????.?#?. 1,1,2 +#?????#??#???#..# 1,1,6,3,1 +?#????#???.?.#?. 1,1,4,1,2 +??#???##??.????#? 8,5 +.????.?????#??. 4,1,4 +????.??###?. 3,6 +????.#???.? 1,4,1 +??#???#????###?.. 3,8 +.?#???????###??.## 13,2 +????.#.????#??? 1,1,1,1,2 +#??#?????.? 4,1,1 +#?#.???????.? 3,3,1,1 +.????????.??. 3,2,1 +??.?.??.??##?????? 1,1,1,9 +?..?#??#?#??#.?? 1,7,1 +??.???##??#?.?? 2,5 +.????#.??????? 3,1,2,3 +??..??????#? 1,1,2,2 +??#??.????# 1,3 +??.???????? 1,6 +??.?.?????????.???. 1,6,3 +#???###???.#??? 1,6,2 +?.#???#??????# 2,4,1 +??##.???#??.????##. 2,5,6 +##.?.????????# 2,1,3,1 +#?##.??.#???? 4,4 +????#????..?#?? 5,3 +.??##?#???.?.???? 9,1,1 +???#?#?#?.?.?.. 8,1,1 +#????##???#???#???.# 4,2,7,1 +.?.???#.?##?????# 1,1,2,3 +#?????????#???..#. 5,8,1 +???#??????#?..??? 5,3,2 +???#?????? 4,1,1 +?.???#????####????#? 1,3,6,1 +????#?.#???.??#??? 1,1,2,1,5 +##????#?..???? 7,2 +?#??.?.??#?..???#? 4,1,1,2,5 +.##????????..?? 6,1,1,1 +????????.#????. 1,1,1,1,2 +??????????#??.?????? 3,4,2,1,1,1 +?#?.??????.? 1,2,2 +.?.?#????#???? 2,1 +?.?#????.?? 1,6,1 +.?##???.?????. 2,2,4 +#.????##?? 1,7 +??#???##?#?? 2,6 +.?.?#????. 3,2 +?#??#?#.?.?##???? 6,1,4,1 +?????.?.???#??????? 1,1,1,5,3 +.#???????.#? 5,1 +????..??#???#?. 3,8 +?#??#???.?#?##.?? 7,4 +?#????#..#????????? 2,1,1,4,1,1 +...?#??#?.#?? 3,2,2 +###???#?.???? 4,2,3 +???#??????..?##? 4,4,4 +????.????#? 2,1 +????##?#???.???? 7,1,1 +?????????.?..??. 3,2,1,2 +#?..#????? 1,1,2 +##???#????#?.???.. 7,2,1,1 +??#????????#?..?##?? 11,3 +.?#?..#??##???.. 3,8 +##?#????#.?#?.#???## 2,2,3,2,2,2 +???#???????????.? 1,3,5,1,1 +#.????????#? 1,1,1,3 +??.?.??.?.?.??????? 1,2 +???.#???????#??## 1,3,8 +..?#??.??##?????. 2,5 +????.?????????? 1,1,2,2 +#????.??#? 5,2 +?.#??#????#?????.?# 5,5,1 +?.?#??#??? 4,1 +????????.????.? 8,2 +????.?#?????. 1,1,3,2 +???#??.?#??# 5,5 +????#.?#?.##??????. 1,1,3,5,2 +.?#??.?#?#?????. 4,4,2 +??..?#?#????.#? 6,1 +.?.#.?#????#???#?##? 1,1,15 +#.?????##.? 1,5,1 +.##?????.????????? 5,2,4 +???.???.##???#.?#?? 1,1,1,6,4 +???#??#?????# 1,2,4,1 +#???.##??##????? 4,9 +???...#?...???# 1,2,3 +##?#?#????.# 6,1,1 +.??#??..????.?# 2,1,1,1,1 +##??#???????#.??# 5,1,1,1,2 +.#???#?????##.??#?. 1,3,1,1,2,3 +??????#???? 2,3 +?.???#??#? 1,2,2 +?#??.##?????#? 2,2,1,2 +??#.??#?.??.#?#??? 3,3,1,1,1,1 +?.?##?.?.???#?#.? 1,3,1,4 +??.???#?###?#.? 1,1,6,1,1 +.?.#?????#?.?????? 1,3,3,2,1 +?#?#?####..#.? 8,1 +???##?#????.??#??#?? 9,1,3,3 +??#????#?.??#?. 1,7,4 +???#..?.?? 1,1,1 +?????#????.??###? 6,1,6 +.#?????#?????.??# 1,5,1,1,2 +???#????..???#### 3,7 +???????##..? 1,4 +.??.??.???... 1,2,3 +.??.#?#?????#? 1,9 +???#???.?????? 1,4,2,1 +??.?#.?.??.?#???#?? 2,1,1,8 +##.##?????????#.?? 2,2,7 +???###??##?..??.??? 5,3,1,2 +#..????#?#???? 1,1,4,2 +???????????#? 2,2 +??.?##?#????????#??# 1,8,2,1 +????#?#???????????? 7,1,1,2,1 +.#??.?#??.# 1,2,1 +?#???????? 2,1,2 +?????#??#???.??? 1,4,1,2 +?.?????.?.????##? 3,7 +???..#???#???#??. 1,2,7 +???.#??#?#???#.?? 1,1,8,2 +###?##?.???#??# 7,5 +.???.?.??#? 1,1,2 +??#??.???# 2,4 +??###?????. 6,1 +???#?#????.?.?#.?.# 4,5,2,1,1 +.??????.?#...?#??. 2,1,3 +.??#.??#?? 1,2 +??#??.?#??#? 1,1,1,4 +.?#?#?..#?.??? 5,1,2 +#??#?##?#?..?#??? 1,7,1 +#???????## 2,3,2 +???.????##??#?#?.#?? 1,11,1 +#.?..????#?#??..?#? 1,1,9,1 +.?.?????#??? 1,4,1,1 +.???.???..#?##??? 3,1,5 +??..????.???.?# 1,4,1,2 +???????#?? 1,1,3 +.????????#??#.??. 1,9,1 +?.?.#????.#????????. 3,7 +????#??#??????.??.#? 8,3,2,1 +?????.#???..???#??? 2,1,4,4,1 +??#????..?.? 5,1 +???#?#?#????.?##???? 11,7 +?????????????#??? 4,10 +?.??#...?#???.?.. 1,3 +.????...???#...? 1,2 +??#?.#.?????##? 3,1,1,1,2 +????#.??#?.#. 1,1,3,1 +#.??????#??##??#???? 1,17 +###????.#?? 5,2 +??????????#.?.?...?. 10,1,1 +#.#.#.???##??#??.# 1,1,1,9,1 +.??.??.#?. 1,1,1 +?#???.???##??#?#? 1,1,1,8 +.??##?#??????#???## 9,3,3 +.???????#? 5,3 +.????###??#?.???? 9,2 +#?##??????????? 7,3,1 +???..#?#???#???.? 1,9 +??#.???#.# 2,1,1 +#.?#??.#?.?? 1,3,1,2 +.#??????#???????. 2,4,1,2 +..??????.??? 1,2 +?##???.??.??#???. 2,2,1,3,1 +.?.?##???#.?? 3,2,1 +..???????? 3,1 +??.??#????????#?#? 1,1,1,1,5 +#?.?#.###??##??????? 2,1,9,1 +.#?????.??. 2,1,1 +.??.??#????## 2,4,2 +?#?#?#?#?###?..?? 12,1 +??#??.??#???? 3,2 +#??#??????.?????? 1,1,4,1,1 +#??#???#??.????#??? 4,2,5,1 +???????.?#?? 5,1 +?.#??#??#????#???.? 8,6,1 +.?##?#?.?.?? 5,1 +??###??????##??. 5,4 +?#?#.???.??# 1,1,2,2 +.???????.?#?... 3,3 +??.?#?????.?.??##?#? 1,1,3,1,7 +?#.???????.???#? 2,1,1,1,2 +.??#?????. 4,1 +????.?#???.??????.. 2,3,1,5 +.??????.#? 1,2 +.??.???#?.? 2,3,1 +#?##?.?.???.## 5,1,1,2 +.##????.?? 4,1 +#??.?#???.?##?... 1,1,4,3 +?...##??.? 1,2,1 +?###..#??? 3,1,1 +?#?##?#??##??? 1,8,1 +.??###??.?#?.???###? 4,3,5 +?.??????#?##???? 1,1,9,1 +?????#??.?????? 7,2 +.???#????#???#? 6,2,3 +????.????.?#?..??? 3,4,3,2 +????.#?.???#?? 1,1,2,6 +?.#???#?#?.?#?? 1,5,2,1,1 +?#?.#.???????.?? 1,1,1,3,1 +?#?????????????? 3,1,2,1,3 +???.#??#?#???# 7,1 +??#????#???.##??#. 8,1,5 +???#?????#??.? 2,5 +.#????.???? 5,1 +??????#?????###?? 5,3 +?..??#???.????? 1,1,1,2,1 +#??.?...?.??. 2,1,2 +?#???#?????.#??? 2,1,1,2,1 +?#?????????.??????? 2,3,1,3,2 +.?#???????? 2,2,1 +?#??.?.?.?.? 3,1 +?##?..????#?? 4,1,4 +???#?..???????# 1,2,7 +??#??##?.??????.?? 2,2,1,1,1,1 +.#?#...#?????? 3,1 +.??..??##? 1,4 +?????##??.??##?.. 6,5 +#?..?#???.?? 1,3,1 +?##??.?.#?#????? 3,1,3,1,2 +.?#?????..#?#..?? 7,3,1 +????????##?##.?#.#?? 1,1,1,7,1,2 +???..????.?.???##?? 2,2,1,1,2,1 +??????.??????.# 3,1,2,1 +#.??#????.??#?? 1,3,1,1,1 +??#####??#?????#?# 10,3 +##???###?#????? 12,1 +????????????? 2,5 +??#??.????.?##? 2,4,2 +?.?#???.#?#.???#.. 1,4,3,2 +????#????#? 2,2,2 +???.#?.?#????? 1,1,2,6 +?.#???#?????#?????. 5,5 +??????#??#??? 1,7 +??.??????#???#?????# 1,1,7,3,1 +#?..?????? 1,3 +??#???..???.# 3,2,2,1 +?###?????? 6,1 +???##.#??#?? 1,3,1,3 +???##??..?#?#??? 3,4 +??????##??.?????#? 9,1,5 +?#???#?.?#???? 5,5 +??.?.???.?? 1,2 +??##??#?????# 2,7 +???????.???????##?#. 1,1,1,1,7 +#?#????#???.##.? 8,1,2,1 +???#.??###??..#?#?? 1,1,4,1,1,3 +.?.??###???#?.?????? 7,1 +?#?#?#???????.?#? 5,2,3,2 +???##???.??????#? 1,3,1,1,5 +???????#?#??.? 1,2,5 +????#?.??? 2,1,1 \ No newline at end of file diff --git a/inputs/12a.txt b/inputs/12a.txt new file mode 100644 index 0000000..c5bec3a --- /dev/null +++ b/inputs/12a.txt @@ -0,0 +1,6 @@ +???.### 1,1,3 +.??..??...?##. 1,1,3 +?#?#?#?#?#?#?#? 1,3,1,6 +????.#...#... 4,1,1 +????.######..#####. 1,6,5 +?###???????? 3,2,1 \ No newline at end of file diff --git a/src/12.cs b/src/12.cs new file mode 100644 index 0000000..98ff3fa --- /dev/null +++ b/src/12.cs @@ -0,0 +1,222 @@ +using aoc2023.Util; + +namespace aoc2023; + +internal class Day12 : Day +{ + private readonly List<(string puzzle, List slots)> springList = []; + + internal override void Parse() + { + var lines = Parsing.ReadAllLines($"{GetDay()}"); + foreach (var line in lines) + { + var split = line.Split(' '); + var nums = split[1].Split(',').Select(int.Parse); + springList.Add((split[0], nums.ToList())); + } + } + + HashSet GeneratePossibilities(string input) + { + Queue possibilities = new(); + possibilities.Enqueue(input); + while (true) + { + var p = possibilities.Peek(); + if (!p.Contains('?')) + { + break; + } + + possibilities.Dequeue(); + for (int j = 0; j < p.Length; j++) + { + if (p[j] == '#' || p[j] == '.') + { + continue; + } + + possibilities.Enqueue(p.ReplaceAt(j, '#')); + possibilities.Enqueue(p.ReplaceAt(j, '.')); + break; + } + } + + return possibilities.ToHashSet(); + } + + bool IsValidString(string p, List springs) + { + int group = 0; + int count = 0; + int i; + for (i = 0; i <= p.Length; i++) + { + if (i == p.Length) + { + if (group >= 0 && group < springs.Count && springs[group] == count) + { + group++; + count = 0; + } + + break; + } + if (p[i] == '#') + { + count++; + if (group >= 0 && group < springs.Count) + { + if (count > springs[group]) + { + break; + } + } + continue; + } + + if (p[i] == '.') + { + if (group >= 0 && group < springs.Count) + { + if (springs[group] == count) + { + group++; + count = 0; + } + else if (count > 0) + { + break; + } + } + } + } + + var isValid = i == p.Length && group == springs.Count && count == 0; + return isValid; + } + + long GetValidStrings(HashSet possibilities, List springs) + { + long total = 0; + foreach (var p in possibilities) + { + if (IsValidString(p, springs)) + { + total++; + } + } + + return total; + } + + long Solve(List<(string puzzle, List slots)> list) + { + long numMatching = 0; + foreach (var line in list) + { + HashSet possibilities = GeneratePossibilities(line.puzzle); + long thisValid = GetValidStrings(possibilities, line.slots); + numMatching += thisValid; + } + + return numMatching; + } + // all of the above was my original implementation that worked for part 1, but was far, far too slow for part 2 + + // this is a solution very heavily cribbed from a post on the subreddit as i was just not understanding how to + // optimize my existing solution appropriately. + long GetPermutations(string row, List pattern) + { + Dictionary<(int group, long amount), long> permutations = []; + permutations.Add((0, 0), 1); + + foreach (var ch in row) + { + List<(int groupID, long groupAmount, long permutations)> next = []; + foreach (var kvp in permutations) + { + int groupID = kvp.Key.group; + long groupAmount = kvp.Key.amount; + if (ch != '#') + { + if (groupAmount == 0) + { + next.Add((groupID, groupAmount, kvp.Value)); + } + else if (groupAmount == pattern[groupID]) + { + next.Add((groupID + 1, 0, kvp.Value)); + } + } + + if (ch != '.') + { + if (groupID < pattern.Count && groupAmount < pattern[groupID]) + { + next.Add((groupID, groupAmount + 1, kvp.Value)); + } + } + } + + permutations.Clear(); + foreach (var tuple in next) + { + var key = (tuple.groupID, tuple.groupAmount); + if (!permutations.TryAdd(key, tuple.permutations)) + { + permutations[key] += tuple.permutations; + } + } + } + + long total = 0; + foreach (var kvp in permutations) + { + if (isValid(kvp.Key.group, kvp.Key.amount)) + { + total += kvp.Value; + } + } + + return total; + + bool isValid(int groupID, long groupAmount) + { + return groupID == pattern.Count || (groupID == pattern.Count - 1 && groupAmount == pattern[groupID]); + } + } + + internal override string Part1() + { + long total = Solve(springList); + + return $"<+white>{total}"; + } + + internal override string Part2() + { + List<(string puzzle, List slots)> unfolded = new(springList.Count); + foreach (var folded in springList) + { + string puzzle2 = string.Empty; + List springs = new(folded.slots.Count * 5); + for (int i = 0; i < 5; i++) + { + if (puzzle2.Length > 0) + { + puzzle2 += "?"; + } + puzzle2 += folded.puzzle; + springs.AddRange(folded.slots); + } + + unfolded.Add((puzzle2, springs)); + } + + long total = unfolded.Sum(item => GetPermutations(item.puzzle, item.slots)); + + return $"<+white>{total}"; + } +} diff --git a/src/Util/Extensions.cs b/src/Util/Extensions.cs index cec054b..52664d6 100644 --- a/src/Util/Extensions.cs +++ b/src/Util/Extensions.cs @@ -24,4 +24,22 @@ public static class Extensions return -1; } + + public static string ReplaceFirst(this string str, char ch, char replace) + { + for (int i = 0; i < str.Length; i++) + { + if (str[i] == ch) + { + return str.ReplaceAt(i, replace); + } + } + + return str; + } + + public static string ReplaceAt(this string str, int index, char replace) + { + return str[..index] + replace + str[(index + 1)..]; + } }