From fa2e7fedd9d95969570d185029f399118314f71b Mon Sep 17 00:00:00 2001 From: xuu Date: Wed, 13 Dec 2023 08:32:53 -0700 Subject: [PATCH] chore: add day12 part 1 --- day12/example.txt | 6 + day12/input.txt | 1000 ++++++++++++++++++++++++++++++++++++++++++++ day12/main.go | 122 ++++++ day12/main_test.go | 70 ++++ 4 files changed, 1198 insertions(+) create mode 100644 day12/example.txt create mode 100644 day12/input.txt create mode 100644 day12/main.go create mode 100644 day12/main_test.go diff --git a/day12/example.txt b/day12/example.txt new file mode 100644 index 0000000..c5bec3a --- /dev/null +++ b/day12/example.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/day12/input.txt b/day12/input.txt new file mode 100644 index 0000000..1e233a6 --- /dev/null +++ b/day12/input.txt @@ -0,0 +1,1000 @@ +?#.??????#??#?#?#?#? 1,1,15 +.???#??.????#?? 6,5 +???????#?#?#?#??#?? 1,1,6,1,1,2 +##?..???#?????# 2,1,7 +.?????????? 2,2 +??????##????#?.?.??. 1,7,4,1,2 +?.???..???.?..?## 2,1,1,3 +??...??.??? 2,2 +????????#?#????#.?? 1,1,7,1,1 +.#..??##?.#.?? 1,4,1,1 +???#????????.???#??. 1,1,5,6 +.?.??.?#?#?.???#?? 4,2 +.??#??#?.??.# 2,2,1,1 +#.??..?.????.??? 1,2,1,2,1 +?.?.?#??.???##??#. 1,1,1,2,2,1 +?????.??.??? 1,1,1,1 +..?????.????? 2,1 +#?##??.??#??#?..?? 6,3,2,1 +.???????#?####??#.# 1,13,1 +?.#??.????#?.? 3,4 +.??.#??#.????????? 1,1,1,4,1,1 +???#???????#??#.??? 1,12 +???????#??? 1,3 +???????.??##???.. 1,6 +??????.?#.? 3,1,2 +?#.#?????????? 1,1,3,1 +?????????? 1,3 +?????#?????#? 4,4 +????????.?# 1,2,1 +?..?????.?.. 1,2,1,1 +.?#??#..???##????.#. 5,6,2,1 +?..?#?#????#?# 1,7,1,1 +????#?#?..???? 1,6,2 +.#???.?????. 2,3 +???#.?.#??.?##?????# 2,3,2,3 +.??????#???. 1,2,2 +???##???????##?. 6,1,1,3 +??????????..##.? 5,2 +#.#?#??#????.?#? 1,3,6,2 +??#?????#??? 1,2,2 +#?#.???#..#?? 3,1,2,3 +.#?????????#??????. 5,8 +.?#??.#????????? 2,1,2,1,1 +..?????.#?##?.#.#?? 2,1,5,1,2 +?#????#???#?#?? 1,1,6,1 +.?????#?????? 1,3,5 +.#.?.??#?#?#??#?#?#. 1,12 +#???.#?????.????#?# 1,1,1,1,2,5 +?.???????.#?????#??? 1,1,3,7,1 +?????????? 1,1,2 +..????#??#?????.?.? 1,10 +???#?###?#??????##.? 8,6 +..???????#??#????. 11,1 +.?#?.?????. 2,4 +?.###??##?..?????? 7,4 +#??????#????##????#? 1,3,1,5,1 +???#.?.???????#??#? 1,2,1,1,6 +??#???#?#?##??? 4,7,1 +?##?.??.??? 2,1,2 +??.??.??###? 1,1,1,3 +?#..#???.#??????? 1,4,7 +??#?.??##.? 1,3 +.??#??..???.?? 5,3 +??????.?#??#???#?? 2,1,2,5,1 +.????#?.??? 2,1 +.#??##??#????#.?.? 9,1,1,1,1 +??.???????.??.?#?#. 2,1,5,2,1,1 +??????????#??#?#? 1,14 +??#???##?. 1,4 +?..#????.##?#?. 4,4 +??#??#???.?????? 8,1 +?.#.#??.??#.## 1,3,1,2 +???##?#?.##??. 5,2,1 +?.???..?..??????#? 1,1,1,1,1,4 +?#????????????? 12,1 +??????##??.#????? 6,1,3 +????#???#?.?? 1,2,4,1 +????????????#??? 1,1,8 +?????##?.?#? 1,3,2 +??????.#..?????#. 4,1,2,2 +?#?#????????? 2,2,4,1 +..#?.????? 1,1 +??#??#...?. 5,1 +?????.???? 3,3 +?????##.????. 1,3,1 +..?.?????????? 1,8 +?#?#?#??.#??#.? 1,1,1,1,4 +?#?????????## 2,1,7 +#?##?##??.?.?#.?#.? 8,1,1,1 +?????#???.##??.?.. 4,1,2,1 +?#?#??#.?????????.# 4,1,2,3,1,1 +??#?#?#???.????#???. 1,1,1,1,1,7 +?????#??????????? 10,2,1 +???????.?? 4,1,1 +?..????.?????###? 1,3,8 +???#????#??#??#.? 6,1,5,1 +#.????..#? 1,2,1 +.#?.#?#.??.?###?. 2,3,1,4 +????##???????.?# 1,5,1,2 +.##??##???????.? 7,2,1 +???#?#.??????? 3,4 +.?##.?.????.? 3,3 +#.???#.?????#???.#. 1,4,4,1,2,1 +.?.?.##?##??#?? 1,1,6,1,1 +????#.?#?#?.?.. 2,4,1 +???????#?.?? 9,1 +????.#.#.??.????.#? 1,1,1,1,4,1 +?.?#??????????#??# 1,4,10 +.?.?????????#??? 1,10 +.?#??#????#?..?## 5,3,2 +#?#?.?#??? 1,2,3 +???????#??.?????. 1,7,1,1,1 +?.??#?.???????##??. 1,4,2,1,4 +?#??#?#???#??# 1,3,3,1 +.?.??#.???.????.???? 3,2,4 +??#????.?. 2,1,1 +?..??#?.#???.?.?# 1,2,3,1,1 +##??#????????## 3,1,4,2 +??????#?.????.#??#? 2,2,4,4 +#???????##????## 1,1,11 +#???#?#??#.#??.?#?. 1,5,1,2,3 +?##..??.????????? 2,2,3,3 +..??#??#???.?? 2,3 +#???.??#?.???.?##?? 1,2,2,1,4 +??##?#????.??? 1,5,2,1 +??###?????.??? 8,2 +????????.?#???? 1,1,1,1,2 +??#?????#?#?.#???.#? 4,1,5,2,1,1 +.????.?????# 1,1,1,1 +..???.?.???.? 3,2 +??#??.????. 4,2 +???#?????#????? 1,1,3,1 +.#??#??.?#?###? 4,5 +??#??#??..??.????? 2,1,2,3 +???#??????##??### 2,1,1,7 +????.??#??????.???? 2,1,9,1,1 +.#?.###????? 2,4,2 +.####?.?.?# 4,2 +.?##??????##.?. 7,3,1 +????.?##??# 1,5 +###??#?#????????.. 8,6 +?.???#????.?.?#????? 6,1 +????..?????? 2,1,1,1 +.????##.????. 6,1 +?#??????????? 3,1,1,1 +??.???#????#?##?. 1,13 +?.?#??#?##???.???..? 9,1,1,1 +??#?#?#.?#???? 7,4 +??###???????. 6,2,1 +??##?#.???.?##?? 3,1,2,3,1 +????????.#?##?????.? 1,2,1,4,4,1 +??.??????????.?????? 9,1 +.#?.?#???#?????.# 1,8,1 +??.?????#????# 1,2,1,2 +??#.??#..#?? 1,1,2,3 +#?..??##??#?? 2,8 +????#???#????# 10,1 +????????#?#??? 1,6 +???????.??.#????## 1,4,1,1,1,2 +???#?????.??#.??.?? 1,3,2,3,2,1 +?.?.#???#??#?????? 2,7 +..#?.?.??#? 1,3 +???#?#??..???.?? 5,1,1,1 +.????#?.??##??#?# 4,7 +???#???#?##?????? 2,6,5 +.?##?#?##??#?#?.???# 2,1,8,1,2 +???????.?#???? 3,4 +#.?#??????.??? 1,4,1,1 +?????#???.. 1,5 +.#???#???????#?#?? 1,1,6,2 +#???####.#??.??? 1,5,3,1 +??#??..#?.?? 3,2 +?#.????#??#.#? 1,1,6,2 +..?##?.?#??.#?? 3,4,2 +?..?????.? 1,2,1 +..??#??#??#????.#? 11,2 +????????.????##??? 1,2,1,6,1 +???????#??#.?.?#??? 10,3 +.#.???#.?. 1,2 +??????#???#..?? 2,3,1,1 +?????###?.??????.?# 9,1,1,1,2 +??##????.?????????? 8,1,1,3,1 +??##??.#?.#??# 3,1,1,1 +?#???.?##?????..? 3,5,1,1 +#??????????.#???#??? 5,1,3,2,2,1 +??.#..????????? 1,6 +?.?#??#??..?? 3,1,1 +??????.?..???. 3,1 +??#???#??.??? 8,3 +??????.#??????? 3,5 +??#..?#?.???#?.. 3,2,4 +????..???#? 3,3 +?.#????????.??.#??# 4,1,2,1,2,1 +??.?##???##???? 1,3,6 +#?#.??#?.?### 1,1,3,4 +?.#?.??#?????? 1,2,6 +??.#.?.?????????#? 1,1,7,1 +?.???##???#.?? 5,2,1 +????????#?#..# 7,1,1,1 +?#?.??.?????.??# 2,2,3,1,1 +.??#?####??????? 10,1 +.????.##??????#??#. 4,12 +.?.??#?##???#? 6,2 +????##????? 1,3,3 +?#?.????#??#???????# 2,11,4 +??..???.??. 1,2,1 +????????#??.?????.?? 2,4,2,1 +??????#??..#?? 1,1,5,1 +???.#???#? 1,4 +???.???????????? 1,1,1,3,1 +??#???..?#?#?? 2,1,6 +?.??#?.??.?.???.?? 1,4,1,1,1,1 +.?.??.?##??#. 1,2,4,1 +????.#???????##??# 1,1,1,8,2 +?.?#????.?.#??#?#?#? 1,1,1,1,1,9 +??##??##??#???? 3,2,1,1 +#?.?.?#??#??#.? 1,1,6,1,1 +?????.?????? 1,2,2,2 +.???#??????#??#?. 5,7 +.????##?#?#????.??? 8,1 +?.??#?#???.#????. 1,6,1,1 +.?.????.?.?.#???#?? 1,1,1,1,1,6 +??##??##.????????.. 7,3,1 +..#?.###?#??????#?#? 1,8,3 +???##..???? 2,2 +?.???#???????##?##? 1,6,6 +?...?..?#?.? 1,1,1,1 +???#??#?.?#?. 1,2,1,2 +??????????.???????.. 3,4 +?????.?????.?#?#?# 3,1,4,6 +?#???.?????..# 3,2,2,1 +#?.#???#???.?#? 2,1,2,1,1 +?.#????#?#??? 1,3,1,1 +.?#???.??? 4,2 +??????##?????.#?? 2,6,2,1,1 +#??#?#??????. 1,2,5,1 +?#??##???.??#????.? 2,3,1,1,1,1 +#.?????#?#..#? 1,1,5,1 +.??.#.?#???? 1,5 +?##??#?????. 7,1,1 +??.???.??# 2,2 +?.????.#??##??#???#? 1,1,1,2,5,4 +???????#???? 4,1,2 +?#.?.????????? 2,1,4,1 +#????##?#??????.?.?? 1,2,10,1,1 +##?.#???#??????? 2,1,1,8 +???.?????????# 2,1,1,5 +???#.??#??.?.??. 1,2,4,1,2 +??#?#?##???.# 1,8,1 +???..#?????????#? 1,1,1,6 +??##??..??????#?.? 1,2,1,2,5,1 +???#??###?#.?? 2,5,1 +?#?#????.????##? 5,2,6 +?##??.???.??##?###?? 2,3,1,6,1 +#####????????.? 5,6 +.?.??#?.#?.?? 4,2 +?#????.??#?. 5,2 +????#??.####?. 5,5 +???????##?#???#?.#?. 2,11,1 +??###?#??????.??.## 4,1,2,1,2,2 +?####????#.??#.? 7,1,1,1 +????#?.#?? 4,2 +??.??..??#????? 2,2,6,1 +#??????#?#?..??? 1,1,7,1 +#?????????????#??# 1,1,1,1,6,1 +?#??.?????.???.# 3,4,1,1 +??#????????.?#????? 1,4,3,7 +??????.??.#????????? 2,1,1,1,5 +?..??##.?# 4,1 +??#???.#?? 4,1 +?.??????????????? 1,2,6,4 +.???.#????.?# 1,2,2 +.##?#?????# 4,1,2 +.??#?##.?#?#?##.. 6,6 +???.?#?###??? 1,8 +??#?#?#??.?.??#?? 7,4 +????##????#?????#? 14,2 +.#.#?#??.?..???? 1,5,1,1,1 +#?#?????#?.???#???? 10,5 +?????#?..?.??. 5,1 +?#?#????#? 5,3 +??##.???.???# 2,1,3 +?#?.?????? 2,1,3 +.????#???? 3,1 +?????.???..? 3,1,1 +???????#?????? 7,3 +?????????# 3,1 +????.??#???.?? 2,4 +??????????#?? 1,8 +???#??????##??#?..?. 14,1 +????.????????.???. 1,1,1,1,1,3 +?#????#???? 2,4,1 +##?????#?. 3,2 +??#???..?#.???? 2,2,1 +??#???????##.?? 2,2,4,1 +?#???#?#.?# 8,1 +.??????.?? 1,1,1 +?#??##?????????? 6,2,2,1 +#????..##???? 1,1,2,1 +????##???#?.???..? 10,1,1 +??????#????# 4,6 +??.??#.??.? 1,1 +.?.?.?##??.#???? 1,4,3,1 +????#?...??##??#?#?? 4,8 +?#?????#????.??????? 12,1,1,2 +?###??????#? 6,4 +#.?#?#?#??#?#? 1,1,9 +?.???##??#??#??????? 11,3 +?#????#????????...# 3,3,3,3,1 +.#?..#?.#???? 2,1,2,1 +??..?#.??????? 1,2,3,1 +?#..??#??#??? 2,8 +??#???.???##?. 1,3,1,4 +????#?#?#?#?.??.# 3,8,1,1 +??????#??? 2,1 +#??????#??#.#??# 5,5,1,1 +?.???.?##??? 2,3 +?????????.?? 1,1,1,1 +????????#????.#??? 1,1,6,3 +?##.???.?##? 3,1,2 +?????????????????#? 1,1,1,1,1,5 +???#.?#.??##???? 2,1,4 +.????.?..? 1,1,1 +??????.##?#?? 1,1,4 +?#???.???? 2,1,2 +#????#??#?#..?? 11,1 +?..????###?????#? 1,1,4,1,2 +?.#???#???#??. 1,9 +.???#????..???.? 3,2 +???.??#???.???? 1,1,6,1,1 +???##???#? 2,2,3 +???????#????.??#?? 1,4,2,2,1 +#.#??#??????#? 1,4,1,4 +.??#?????###?.??# 4,5,1,1 +.??????#?. 1,3,2 +#?#?????#?.????#?? 4,3,3 +????.?#?.?? 2,1,3 +?.??????????????.?# 1,1,4,1,1,2 +?.#.#?????#? 1,3,1,1 +??.#??.?#???#????#.? 1,2,3,6 +??...?##?????. 1,4,2 +.??.???.?? 1,1,1 +.#??#.??.#?.?#?. 1,2,1,1,2 +#?.????#?. 1,5 +???##??????#??#. 8,3,1 +.?.????#?##?## 1,1,7 +???#??#?????? 2,1,1,1 +???#??##???.?? 2,6,1 +####??#??.?#??? 9,1,1 +???.#??.?.?##?????.# 1,1,1,1,8,1 +##.??????#?? 2,7 +.??..????????#???? 1,8,1 +#????#?#?#?? 4,1,3 +?##??????????#??? 4,3,7 +??????????#?##????? 1,7,6 +??????#?.??. 1,2,1 +??.?.?#??.?.##? 1,1,2,1,2 +????.??#?#????? 1,5 +?????#??#.???##??.# 1,4,3,1,1 +.??#????????.?.?# 1,9,1,2 +????#??.#???#??##?# 3,11 +?###.??#?????#???#?. 4,1,1,2,1,3 +?##?#.?????.????. 4,1,2,1,1 +????#?.??##?.#???? 1,2,5,2,1 +?#?#??.?#?? 4,1,2 +.?#?.???#? 1,3 +#????##?.##?#?.?? 8,4,1 +.#.?.???#?? 1,1,2 +?????##?????????#? 2,10,1 +????..?#?#???????##? 1,13 +????#?#????.??### 8,1,4 +???????#???. 1,1,4 +.??.#?##?#?.?#???.?. 7,4 +#??..#???#?????.??#? 1,1,8,1,1 +???.??.???#?? 3,1,1,1 +?#??#???.???? 5,1 +?#?.??#??##??##??.? 1,11 +#?#??#??##???????? 1,1,1,8,2 +???##?????#???.?.?? 1,9,1,1,1 +??.???????????? 1,1,2,3 +???.?.?#????#??? 1,8 +??##??..#..? 2,1,1,1 +??????#??????? 1,8 +?????.#?#??.#. 1,2,4,1 +?#.?#?#?##????#? 1,7,2 +???#??????????? 1,6,3 +?????#?????#.???. 1,8,2 +???##..???????#???? 3,5,1 +.??#.?.#?? 1,1,1 +???.?#???? 1,1,1 +##???.?#??.?.?.#..?? 5,2,1,1,1,2 +???#??.?.?? 4,1 +.???????###????#?? 6,4,5 +???.??#?#???#????### 2,1,4,1,1,4 +#?..???.????..?## 2,2,1,3 +????#??.#????#??#.? 1,2,6,1,1 +#??.##?#.?.?##????? 1,1,2,1,5,1 +?????.#?#?#?? 2,1,5 +????????????#???? 4,1,3,1,1 +?.?#??#???.???? 6,2 +.?..???.?#.??? 1,1 +??#???#.??????? 1,2,1,5 +#####?#????????? 8,1,2 +???.???#???.. 1,1,4 +??###..?..#???# 5,1,3,1 +.?####?##.????? 7,2 +?#???#??#???..? 1,3,3,1 +.??##??????. 1,3,1,1 +????.????#??##?????# 4,1,9,1 +??#??.???#.#??? 3,1,1,3 +??????#??.?..??#..?. 1,7,1,3,1 +#???#.??????.???..? 5,2,1,1,1,1 +??????????.???? 2,1 +##?##???#????.? 5,5,1 +..??.?.???.?? 2,2 +#????.??#?#????.?? 4,4,1,1,1 +??.??.????????#. 1,1,3,1,1 +.#####?#??????#??. 10,4 +?????????????#?.?? 2,7,3,2 +?????#??#?? 1,3,4 +.?#?????????#??? 2,1,4 +#.??#??##????#??#? 1,15 +??????.???.? 1,1,1,1 +???.#.##??#.?###? 1,1,1,5,4 +..?#?##.??????# 5,2,3 +#???????????.?????. 6,2 +??#??#.#???#?? 4,1,4 +????.???#?. 1,1,3 +????#????#?#.???#?? 1,8,1,2 +?????.##????#???? 5,4,1,1,1 +??????.????? 2,1,1,1 +?##?????.???#? 6,1,1,2 +?.#??#?#.??#??.#. 1,1,4,4,1 +#?.#???.?.?#?????? 2,1,1,1,4 +????#??????.????.. 2,2,1,1,2 +?.###??.?????.# 5,1,2,1 +???..######.? 1,1,6,1 +.##???????.# 3,1,1,1 +#????.????????? 1,1,1,1,2 +#??#.#?????#??.???# 4,1,1,2,1,1 +?#???#??#.???.. 5,1,1 +???#?????#???? 3,1,4 +.???.?????? 2,1,1 +???#???#????##?? 4,1,7 +??#.??.???#?????#.? 2,1,1,6,1,1 +?##.??#????.?#?#??. 3,2,3,6 +.#??#??????#?? 2,9 +?.???#??.???#?# 1,1,1,1,6 +????#??#???.? 1,1,4 +??????#?.????#?###?# 6,11 +#????#????#??#..?? 1,4,3,1,2 +???#??..#??#??# 1,3,1,5 +??.???##??####? 1,1,3,4 +???????????#.. 3,4,1 +#?#??.#?#?#?? 5,1,4 +?.??#??#???##???? 1,1,1,3,2 +?#???????#????? 12,1 +?.?????#?? 1,2,1 +#????#??#????#???##? 1,1,1,2,9 +??###??#?#???#.??? 11,2,2 +#?..??#???.? 1,5,1 +??#.?#????#?????? 1,3,2,1,2 +??#??????##???? 6,3,1 +.#?.?#.#??#??.#?#?#? 1,2,1,1,1,5 +?#?#???.?#??#.. 1,1,1,2,1 +????#????##.?# 1,7,1 +.??????????????#... 3,3,1 +..?..?.?##?? 1,5 +??#?...##?#?#? 2,2,4 +.????.?#.?.. 4,1 +??.????#??##??#???? 1,9,6 +...?#??.?.. 4,1 +?.?.#..??..# 1,1,2,1 +???##??.??. 2,3,2 +?#?#????????.?#???? 1,3,2,2 +???##?????. 5,2 +???#??#??###???#.? 6,5,1,1 +???.???..##??#?#### 2,1,1,3,6 +??#??.?#..#.? 1,1,2,1 +.????#??#.?###?##.? 1,1,1,1,6,1 +.####?????? 4,2,2 +?.?#?#??????.??#?. 1,6,1,2 +????????????? 8,3 +#?##?????.?? 4,1,1,1 +??#????#????#???#? 3,1,1,3,1 +.#.?.#.?#?#.? 1,1,3,1 +?#.??#???.?????? 1,5,1,1,2 +..????????. 2,3,1 +.????.#????#????? 1,1,3,2,2 +..??.???.#?.?##?#? 1,2,2,4 +??#?#?#??##????? 1,10,1 +.??????#???. 1,1,1,2 +.?....#???? 1,4 +?##??..???????.?? 5,1,1,2 +.?.??????#?. 2,4 +?????.??#??#? 1,2,7 +?#????.??????..??#? 5,5,3 +#???.#?###????.? 3,5,1,1,1 +#?#????.??#??#?? 6,5 +#?#????.??##????.? 7,4,1,1 +.#?.?????# 2,2,1 +?.??#?.#????? 1,2,1,3 +???#?.???..# 1,1,2,1 +?###??#?????? 6,1 +?????#?????.? 4,1 +.???..#?.?????#? 3,2,3,1 +.?#?????.?# 6,1 +#???????.?? 1,6,1 +?#..?#???? 2,3,1 +?###??#??#.?.???. 9,1 +?#?#.????#. 3,3 +???..?..???#????? 1,1,2,5 +???..?##???.?.?#??# 1,4,1,1,5 +#?????#.?? 3,2,2 +.?.????#???????. 1,5,2,2 +.????????#???? 8,1 +??.??#??????#???#?? 2,6,1,1,1,1 +?#????##??????#??? 13,1,1 +???.?#..#??#?#??#?## 2,2,12 +.???#????????.. 5,2 +.#??.???#??..?#?? 1,2,3,2 +??.?????##??.??? 2,1,1,4,1 +?#.???#??##.? 2,5,1 +???????#?#??###???# 2,1,9,3 +?#???.??#???. 3,4 +.#..????#??????#.??? 1,4,3,1,1,1 +#???#..??#? 5,4 +?.??#?.???????#?#? 1,1,1,1,2,5 +.?????.??.??.? 2,2,1,1 +?##?#?#?... 4,2 +###??.????????.?.?.? 4,1,1,2,1,1 +???#.?#?????.???? 1,1,7,1,1 +???????.??.????? 7,2,4 +??#?###??.????????? 9,2,3,1 +?#?#?#???#.???#??#. 6,1,1,4 +?.?#???#..? 2,1 +????.???#?#?.?#?.?? 4,6,1 +?????#?????#.? 1,2,1,1 +?#.#.?.??###??? 1,1,4,1 +?#.???.#?.?? 1,1,1,1 +??..?#?##? 2,6 +??????.?##?.??????? 1,1,1,4,1,1 +???#??????? 4,1 +???????#?? 5,2 +?#?????#?#?? 3,4,1 +#?###????#?..??##??? 10,4,1 +.???????#?# 4,2,1 +#???????.?#?? 1,3,2 +..????#?...??????. 2,4 +.?????????? 1,1,2 +??.?.??????####? 3,5 +?.??#??????#??.???# 1,1,9,1,1 +???.?.?#?#??? 1,4 +?.??##??#? 1,2,2 +#??##.???.? 5,1,1 +?????.?????????. 3,2,3 +?.??.??#?#??. 1,5 +?????##??#????#. 1,3,2,4 +.??.?#????.#???#???. 2,1,1,1,5,1 +.#?.?.??#.?? 1,1 +???#?#?#.?.?????.? 1,6,1,1,1 +###??#..#..??#?. 4,1,1,1,2 +.#???????#.?# 1,5,1,1 +????????#???#??????# 1,15,1 +.?#??#?#?#??#.??? 2,9,2 +????##????#?###???. 12,2 +?##??.??.#?#####?#.? 2,1,1,7,1,1 +#??????..?#?##?#? 5,6 +.?.#????.??????.??? 1,2,6 +?#?##?#??????.???#? 7,1,1,1,1 +.????????#?##.?.?? 1,8 +?????##?#.??###?..? 5,3 +#..?#?###?#????.? 1,7,2 +???????#.??#? 7,1 +?#????????.? 8,1 +.?##?#?#?.#??? 7,1,1 +.?????????.?????? 7,1,1,4 +????#?#.???????#??#. 5,10 +.?#???????.?? 3,1 +?????.?#?? 1,1,1 +????#?????#?.?#. 1,9,2 +???.???.#?# 3,2,3 +??#.###??#.?.? 1,6,1 +#??#?#??????#????? 1,3,6,1 +.??#????????? 2,1,1,3 +???????.????????? 6,4,3 +?###?#?#?..???.??? 9,2,2 +?#?###?????.???# 6,2,2,1 +?.?.??#?.. 1,1 +.?#??#?.???? 6,2 +???##??????#?.?.. 9,1 +??##?#???????? 8,1,1 +?##?#?#?#?#????##.#. 16,1 +#???.????#?#?#? 4,1,5 +?.??..??#??.????# 1,1,5,2 +.???.??????? 2,7 +?##??????#?? 3,3 +.?#.?.??#? 2,2 +..?.???..? 1,1,1 +.???.#??????? 1,6 +????#???#???###?.? 1,6,4 +????.#????##.#?#?? 3,1,4,1,2 +.??#??#?.?????. 6,4 +?#?#???.??#??? 1,1,1,5 +???#?#????#???? 1,5,1,1 +??.##??#????.?? 1,2,2,2,1 +?#..?????????#??.... 2,1,3,2 +??#.????.? 1,1,1 +?.??#?..???. 3,1 +???????.??#?? 1,1,3,2 +?##?????.??###.. 2,2,4 +????????#???#???? 1,2,4,2,2 +????.?.?????#???? 1,1,1,6,2 +???????#?????.??# 10,1,1,1 +???#??#??## 1,4,2 +????#???#.?????? 7,1,3,1 +?????????.?. 1,7 +.#???.????#?.#.? 4,5,1 +###???#.??. 7,1 +???#??.???...?????? 1,3,2,1,1,1 +????.?.???.? 3,1,2,1 +##??????.???## 3,3,1,3 +??.?.?????#??#??# 1,6,2,1 +.?????????????# 4,2,1 +#??.?#?.?.?##### 1,1,1,1,6 +?#.???.????. 1,2,1,1 +.?#???.???? 2,3 +????.#?????????. 1,1,2,4 +???#??????#??#?# 1,3,1,6 +.#??#?..????#?#? 5,4 +?.#.??.?##???#??#? 1,10 +??#.#?..???#?#????.? 1,1,10 +...???.#????...??? 3,1 +???#?.?????????. 4,1,7 +??#??#????? 2,3,2 +??????#.??#? 3,1,1 +???.?.?????#??.##? 3,1,3,2 +.?..??#????.?.??.? 1,5,1,1,1 +?..?..##??.??##..? 3,3 +#??????#?#?? 1,1,2,2 +#?.?????????????#??. 1,6,1,1,1,1 +?.????###???? 1,7,2 +?.????####???# 1,9 +???????#??.#?????? 1,5,1,1,1,1 +??.#?#???#.?. 1,5,1,1 +###??#???# 3,2,2 +?##..?????# 2,1,4 +.??????##????. 8,2 +?.?????.#?.??????#?? 1,2,1,1,7 +.??#?#??.??? 1,1,1,1 +#?.#???#?.???. 1,1,3,2 +?.??.????????#? 1,1,3,1,1 +???????#??????#????# 1,4,9 +.?#????????#.##?# 4,1,2,4 +??#.?.?##??.. 1,4 +???.??.?#?..? 3,1,3,1 +?????...????? 4,4 +?###?????.?.? 7,1,1 +.?.???##?.??.?.?. 1,1,3,2,1 +?#??????#????#.????? 2,2,4,1,1,4 +.?.??????? 1,2,2 +????#?#??#?????#?.?? 1,7,2,2,1 +.#???##?#??#?##?#??? 6,1,9 +?????????? 3,2 +????#???####?.? 1,1,6 +??.????.?..?? 1,2,1,1 +??????.#?#??? 1,1,3,2 +????????.??? 6,1 +?#?#????????.? 7,1,1 +??#?.#??##???## 3,2,4,2 +??????#?##?#.?? 11,2 +???????????#??? 1,1,1,4 +???#?#?.#?????#? 5,1,1,1 +#.????????#? 1,2,1,3 +?.?#??###?.#?? 7,1 +???#.#.???.#??? 2,1,1,3,3 +??????#??.? 2,4 +.##???#?????????. 10,2 +?.??????#????#????? 6,5 +???#??#?.? 2,2 +?.?????#???? 1,1,1,3 +??????###???#?##? 3,4,6 +????#.???#????? 3,6 +.??#?.??.????#.?.??. 2,1 +??#??#??????#?#? 2,6,4 +.#???.???#???.# 4,7,1 +#.?.#??#????. 1,2,2,1 +???#.?#??#?????? 2,2,3,2 +#.??#?#??#?###??? 1,12 +.???..#?#????.#?? 3,3,1,2 +.????##?.#???? 5,5 +??.??.?.??? 1,2 +??????????#? 1,1,3,1 +#???#??.??? 1,3,3 +..????..#? 1,1,1 +??????#???????? 3,3,1,1 +???????#??#?????#? 2,9,1 +.###?.??#?## 4,1,2 +???????????.?.?##?? 8,1,5 +??????#.?#???? 4,1,2,2 +?#??.?#????#.????? 3,2,2,1,1,1 +???#??.?#?##? 3,4 +????##????????#??? 3,7 +??#?????????.#.?? 7,1,1,1 +#??#??..#??. 6,1 +??????#???. 2,1,1 +..?#??.??#??.?? 4,3,1 +?..????.?????###? 2,1,5 +.?..???#?#.??.? 6,1 +..###??#.?##?##.??#. 6,5,3 +??#?.????# 2,3 +??????#?#????##?? 3,1,1,5 +???????????? 4,3 +#??#??#??#?. 5,5 +??#???.##???????? 5,3,1,1 +??????#?????????# 8,1,2 +??#???##?????.#. 3,7,1 +.???#.#????????#.?? 3,10,1 +.?#?????#??.# 6,2,1 +?.#??#####???..? 1,1,9,1 +?#..?????#?.?? 2,1,4,1 +?.?##?.?#?.?..? 1,3,1,1,1 +?##.#??#?..?##?####? 3,1,3,8 +.??#####?.?????# 7,4,1 +?????#?#?????? 1,1,1,7 +????#.#?????.??? 2,1,5,1 +??????????#?????#?? 4,1,1,4 +#???#???.. 2,4 +??##???.?##??? 5,5 +?.??##?.????..#.??? 1,1,3,2,1,3 +..?????.#?.?. 1,2 +?#??.?.?..#.? 2,1,1,1 +??.#.??#.?#. 1,1,1,1 +?#?#??#??##?????#?? 1,1,6,6 +...??##?###?.?? 7,1 +?#.?#????.. 1,3,1 +??.????#??? 1,1,4 +????##????????.??? 2,7,1,1 +???????###??#.? 1,1,1,6,1 +?.???#????# 1,5,1 +..?????#????????. 1,11 +?.?????#???###??.? 1,5,3,1 +.????.#?.##?? 2,1,2 +??.???###???????.# 1,1,4,3,1,1 +.??#??????? 3,2 +.?????#?????.????# 1,5,1,3 +?..#.????#??.?? 1,3,2,1 +.?????.???.#..??.? 3,1 +?#.?.????#??.???#?# 1,7,6 +.#???#??#?#??#? 11,1 +#.?????#?????## 1,7,2 +???#?##???#.???? 7,1,1,1 +?????#??#???? 1,9 +#?#??.???#????##? 3,11 +.#?#??????.?#??#??# 7,1,5,1 +??#?#????? 1,5,1 +????#????#.?.. 9,1 +?##.?.?.??.# 3,1,2,1 +??#?.?.??#??#?###? 2,1,1,1,1,3 +?.??..?#???##? 1,1,8 +#..#????#?.# 1,2,1,1 +#??.#??.??.?. 1,1,1,2 +??#??????#??#????##? 1,6,7 +???#???????#??. 2,1,5 +#???????#??. 1,3,4 +.?#?????????#?????? 1,10,1 +?????##?#??. 3,5 +???.?#???#?? 1,2,2,1 +#.?#?.?#?.?# 1,2,1,1 +????????????????.. 2,1,3,2,3 +??#???#.???#?#?? 4,1,6,1 +?.#?.????? 1,1,1 +.#?????.?##??#. 1,2,1,6 +#?##??#?.???????. 1,5,1,3,1 +?#..?#?.???#. 1,2,4 +??.????.?????#??# 2,1,1,6,1 +???#?????#? 3,1,1 +.#?#?#?.??? 6,1 +??##??????? 2,2,1 +#????#???? 1,1,4 +?#?.?#??????? 2,1,4 +??.???.##???#?#???? 1,1,1,9 +????#?.??####? 1,1,6 +#??##????.????#. 9,2,1 +?#?????.?# 1,1,2 +?.#?????#??# 1,1,2,4 +?.??#??###??#..#? 1,9,2 +?#??.?.?#?.? 2,2 +???.??.??#? 1,1,1 +?#??...#????###?#?? 3,11 +?????##??#??#??# 1,1,6,1,2 +????????.#? 2,1,1 +??#?.??..#?##?.??. 1,1,1,5,1 +..?#.?.???. 1,2 +??###.##??? 1,3,4 +???#?#..???????# 6,1,2,1 +?.?.?????##?#?????. 9,2 +.???##.?.. 1,2 +?.????????##?. 1,4,1,3 +?.????.##?????? 1,1,1,5,2 +.??????##??#?#???? 1,9 +?.#.???##??????? 1,1,1,4,4 +.?#????#????. 2,3 +.?.?##????.? 1,3 +#?.?#??#?.?..??#??#? 2,4,1,3,1 +??#????####?? 2,8 +?.??#????????##?? 4,4 +.##..????? 2,1 +#????#????.??.? 1,4,1,1,1 +#?#??????.??###?#??? 1,1,1,1,8 +??.?#??#??????? 2,1,5,1 +..?.???.??????? 2,3 +?.????.?#???.?#?? 1,2,5,2 +.#?????#?.?? 7,1 +?#??.?????#?????#? 4,1,4,2,1 +????#..???. 3,1,1 +????##????#?#??#??? 1,3,9 +.#??#??.?????#? 5,2,2 +?#?..???#?? 1,4 +???##?.?????#???#. 5,8 +###?.?????? 3,3 +?..???#?.#??#.??#.? 1,4,2,1,3 +.?.?????#???? 1,3,1,3 +?##?????????#?#??.. 3,1,8 +??#?#??#????.? 4,2,2 +#?????.#????#?#???#. 1,1,1,12 +.??##????????.#??#? 10,4 +#????.???.#?.##??#?? 1,3,1,2,2,2 +#?????.?#.??? 4,1,1,3 +.#??.??#?????##??#? 3,11 +?.?????.??.???##? 1,2,5 +.???.#??#??? 2,6 +.????.?.#? 4,2 +??##??????.#?#????. 8,3,1 +.##??.?##?#??#??? 3,8 +##.??#??..? 2,2 +??.???#?####? 1,1,8 +..???#??.???????###? 4,1,8 +?????????#??????? 1,13 +?.#??????#???#.?? 8,1,1 +.??###??#??????# 1,6,1,1,1 +????..??#??? 1,1,3,2 +#??.???????. 1,3,1 +?#?##???#?#?? 9,1 +????#???#.?#??#?#??? 7,5,3 +??.????????????? 1,1,1,5 +??..????????#??.?? 1,1,6,1,1 +.??????.#???? 3,1,2 +?#???.#?#???.#??? 3,5,3 +????????#??####?#? 4,11 +??#??#???? 6,2 +.#?????#??.??.???.?? 9,1,1,1 +????.#?#?.???? 4,1,1,4 +#?????????.? 2,1,2,1 +.###?????# 6,2 +????????????#??##??# 1,1,5,5 +??.??????. 1,3 +??#??????##?#?? 1,1,1,1,5 +?.#???????#?? 1,3,5 +????????.###???? 1,2,1,7 +.??#????#???..#?# 2,5,3 +???##??##?#????????? 1,9,2,3 +#??##??????..?? 1,6,1,2 +??????.?.????? 3,1,1,2 +??????????????? 9,2,1 +.??????#.??.??# 1,1,1,1,3 +??????#???##?###??# 1,1,1,11 +???????????.#???.?#? 4,2,1,1,1,2 +?.???????#????#? 6,2,1 +#?#??????????##. 3,2,5 +.?.#??.?????.???#??? 3,3 +??..??.?##??#? 1,1,3,1 +?#???#????.???.?? 8,1 +#.??.?????.##???.? 1,2,1,1,5 +?.??#?.?###? 3,3 +..????????? 3,1 +????#..?#? 1,1,1 +?#?????????? 2,1,1,1 +???#.?#?..?.?#? 2,2,1 +..#?????.?. 1,2,1 +?.#????#?????#?.? 8,3 +?????????#?????. 2,1,1,1,2 +???#?##????? 1,4,1 +????.?#?#????.?#? 5,2 +.??#???###? 3,5 +.#?.?.??#??##. 1,1,6 +.?..?#????..????? 2,1 +.?#.##???.?#?. 2,5,1 +#.????.#???#?#. 1,3,1,3,1 +.?.?????#?###?## 1,1,6,2 +?#?????.??????.? 4,1,3,1 +??#??.#??.? 5,2,1 +?.???.??.???#? 3,1,1,1 +???.???.??????#??? 2,6 +??.?##??#???## 7,2 +??.????#??.??#? 5,3 +#??####???????.? 12,1 +?.???#??#?#?#?# 2,10 +???.?????#???. 1,1,9 +??.???##????#?#? 1,10,1 +???.???.???#.. 3,4 +.?#?.??#?#...????#.? 2,2,1,3,1 +.????#?.?????#?# 1,3,2,4 +???##????????????#?? 5,11 +?##?????#??????? 6,2,1,1 +??#.????#?#??#? 1,6,1 +???????.?#? 1,3,2 +???#???.??##?#?. 1,2,2,4 +#????##???.???.. 10,2 +##.??????. 2,1,3 +.??????.???.??.#??# 1,3,1,2,2,1 +#?.???####??#?#??. 1,11 +????#?????#?.? 3,5 +??????#???#??.??? 1,5,3,1,2 +..???.??##??#???. 3,2,2,1 +#?#.#?????#??#??# 3,10,1 +.???##?##?????#?.. 5,9 +?????#????#.? 1,4,1 +###??#???#? 3,1,2 +?.?????#?#????#?? 1,14 +?#??#???????#?????#? 1,1,1,2,5,2 +???#????.?.? 2,2 +???##????##????? 11,2 +??#.???.?. 3,2 +??##??##??.#??. 8,1,1 +??.?????#?? 1,2,1 +.#?#.#??????..#. 3,1,1,1,1 +???####?#.???#?#. 1,4,1,1,4 +#?????##?#..???? 1,6,1,1,1 +.#?????.?? 1,1,1 +???#?#???#?#?#.#??#? 6,1,1,3,4 +.???##??????##.?? 3,5 +##???#??.???????## 3,2,1,1,1,2 +?..##?????? 1,2,3 +????##??.?##??.???? 4,4,3 +##?#?.?.?.??.? 2,1,1,2 +?..??.#?.???#. 2,1,1,1 +??????.?#???? 1,1,4 +????.?????#????? 1,9 +.???#??#????#???? 1,10,1 +?.?#?.?.???#?.???# 1,1,2,2,3 +#???..?#.#.#?#?.?? 1,2,2,1,4,1 +??????.?.??????? 2,2,1,1,1 +?####?#.##?.?#?. 5,1,3,1 +.?????#??? 1,5 +??.#???#.??# 2,2,2,2 +??#????..???# 2,1,4 +????.?#???#?? 2,2,2 +#?#??#?##?#.???.? 1,9,1,1 +#??????????###?? 1,1,2,1,5 +.?????##??..?# 6,2 +..#?????#???.#?.??? 2,4,1,1 +??.???#??#?????# 1,2,10 +??#???????.#? 3,2,1,2 +?????????.???#?? 2,1,3 +?#?.???????#???.#? 1,1,7,1,1 +????.??#?.?.? 1,4 +###?????#???????.? 6,1,1,4,1 +????.##???. 1,2,1 +??.?????.# 1,1,1 +.??.???.?? 1,1,1 +???#????????.##?.?? 1,2,5,1,3,1 +???????.??????? 1,1,1,2,1 +??#.????.. 3,1 +.??##????#.#???? 9,2,1 +???#.???#???#??. 1,1,1,7 +??????.#??.? 1,1,1,1 +?##..??###??#?#?..? 2,1,9 +??.??#.###???# 1,2,4,2 +????????##. 2,4 +??##.???#??? 3,6 +?????#.?#???? 2,2,5 +#???.??.??#.# 3,1,1,1 +.??..##.??. 1,2,1 +???#.???????? 2,1,1,2 +????#?.?#?#? 1,2,2,2 +???????.?.??#???. 5,5 +???#??????#??#???? 1,2,1,2,3 +?#.?..???#??#??.???. 2,1,9,1,1 +????.#?#.???? 2,1,3,1 +#.??##???..#? 1,6,1 +?????#???????## 8,2 +??.??..?#???.?? 1,1,2,1,1 +????.##???.?.?##? 2,5,1,4 +?#?#?..?????#?? 1,1,5 +?##??????#?? 2,4 +#.?????#??.##????.# 1,5,1,5,1 +?##?.???.? 3,2 +?##?#????#???.??? 12,1 +?..?????## 1,7 +?#?#??????#?? 1,9 +?.#??##???.????? 1,4,3,1 +?###??????? 3,1,2 +??????.??. 1,1 +???.??#??#??#?.#. 2,5,2,1 +?.??????.? 2,1 +.?#???????????? 2,3,1,2,1 +.??.?.??????? 2,1 +.?#.???#?????#??.? 1,9 +??????#??.# 5,2,1 diff --git a/day12/main.go b/day12/main.go new file mode 100644 index 0000000..cf03a1d --- /dev/null +++ b/day12/main.go @@ -0,0 +1,122 @@ +package main + +import ( + "bufio" + _ "embed" + "fmt" + "slices" + "strings" + + aoc "go.sour.is/advent-of-code-2023" +) + +// var log = aoc.Log + +func main() { aoc.MustResult(aoc.Runner(run)) } + +type result struct { + valuePT1 int + valuePT2 int +} + +func (r result) String() string { return fmt.Sprintf("%#v", r) } + +func run(scan *bufio.Scanner) (*result, error) { + var matches []int + + for scan.Scan() { + text := scan.Text() + status, text, ok := strings.Cut(text, " ") + if !ok { + continue + } + + grouping := aoc.SliceMap(aoc.Atoi, strings.Split(text, ",")...) + pattern := []rune(status) + missing := countQuestion(pattern) + + s := spring{pattern: pattern, grouping: grouping, missingNo: missing} + + matches = append(matches, s.findMatches()) + } + + return &result{valuePT1: aoc.Sum(matches...)}, nil +} + +type spring struct { + pattern []rune + grouping []int + missingNo int +} + +func (s *spring) findMatches() int { + matches := 0 + for _, pattern := range s.genPatterns() { + pattern := []rune(pattern) + target := make([]rune, len(s.pattern)) + i := 0 + for j, r := range s.pattern { + if r == '?' { + target[j] = pattern[i] + i++ + continue + } + target[j] = r + } + + if slices.Equal(countGroupings(target), s.grouping) { + matches++ + } + } + + return matches +} +func (s *spring) genPatterns() []string { + buf := &strings.Builder{} + combinations := aoc.Power2(s.missingNo) + lis := make([]string, 0, combinations) + for i := 0; i < combinations; i++ { + for b := 0; b < s.missingNo; b++ { + if i>>b&0b1 == 1 { + buf.WriteRune('#') + } else { + buf.WriteRune('.') + } + } + lis = append(lis, buf.String()) + buf.Reset() + } + + return lis +} + +func countQuestion(pattern []rune) int { + count := 0 + for _, r := range pattern { + if r == '?' { + count++ + } + } + return count +} +func countGroupings(pattern []rune) []int { + var groupings []int + inGroup := false + for _, r := range pattern { + + if r == '#' { + if !inGroup { + groupings = append(groupings, 0) + } + + inGroup = true + groupings[len(groupings)-1]++ + + } + if inGroup && r != '#' { + inGroup = false + } + } + return groupings +} + diff --git a/day12/main_test.go b/day12/main_test.go new file mode 100644 index 0000000..3ea209f --- /dev/null +++ b/day12/main_test.go @@ -0,0 +1,70 @@ +package main + +import ( + "bufio" + "bytes" + "testing" + + _ "embed" + + aoc "go.sour.is/advent-of-code-2023" + + "github.com/matryer/is" +) + +//go:embed example.txt +var example []byte + +//go:embed input.txt +var input []byte + +func TestExample(t *testing.T) { + is := is.New(t) + scan := bufio.NewScanner(bytes.NewReader(example)) + + result, err := run(scan) + is.NoErr(err) + + t.Log(result) + is.Equal(result.valuePT1, 21) + is.Equal(result.valuePT2, 0) +} + +func TestSolution(t *testing.T) { + is := is.New(t) + scan := bufio.NewScanner(bytes.NewReader(input)) + + result, err := run(scan) + is.NoErr(err) + + t.Log(result) + is.Equal(result.valuePT1, 8193) + is.Equal(result.valuePT2, 0) +} + +func TestPower2(t *testing.T) { + is := is.New(t) + + is.Equal(aoc.Power2(1), 2) + is.Equal(aoc.Power2(2), 4) + is.Equal(aoc.Power2(3), 8) + is.Equal(aoc.Power2(4), 16) + is.Equal(aoc.Power2(5), 32) + is.Equal(aoc.Power2(6), 64) +} + +func TestCountGroupings(t *testing.T) { + is := is.New(t) + is.Equal([]int{1, 3, 1}, countGroupings([]rune(".#.###.#"))) + is.Equal([]int{1, 3, 1}, countGroupings([]rune(".#.###...#."))) + is.Equal([]int{1, 3, 1}, countGroupings([]rune("#.###...#."))) +} + +func TestCombination(t *testing.T) { + s := spring{ + pattern: []rune("???"), + grouping: []int{1}, + missingNo: 3, + } + s.findMatches() +}