From b0447bed64c0ab646b8b7f699b08ddb92349d195 Mon Sep 17 00:00:00 2001 From: Mathis Date: Fri, 22 Dec 2023 19:52:14 +0100 Subject: [PATCH] 2023-12: Implement first part --- input/2023/day_12/input.txt | 1000 ++++++++++++++++++ input/2023/day_12/input_test.txt | 6 + src/year_2023/day_12_hot_springs/common.rs | 6 + src/year_2023/day_12_hot_springs/mod.rs | 25 + src/year_2023/day_12_hot_springs/part_one.rs | 109 ++ src/year_2023/mod.rs | 2 + 6 files changed, 1148 insertions(+) create mode 100644 input/2023/day_12/input.txt create mode 100644 input/2023/day_12/input_test.txt create mode 100644 src/year_2023/day_12_hot_springs/common.rs create mode 100644 src/year_2023/day_12_hot_springs/mod.rs create mode 100644 src/year_2023/day_12_hot_springs/part_one.rs diff --git a/input/2023/day_12/input.txt b/input/2023/day_12/input.txt new file mode 100644 index 0000000..c94e091 --- /dev/null +++ b/input/2023/day_12/input.txt @@ -0,0 +1,1000 @@ +#?#???????#?.? 3,1,2,2 +.??.##.?#????.??#? 2,2,1,2,4 +.?.??#?##??#????.. 8,1 +??????????#.. 6,1 +.#.##????.??.? 1,6,1 +?#??#???.??.??? 3,1,1,1,1 +?#???????#? 2,1,5 +##?#??#?????.??? 5,1,4,2 +????.?#??.# 2,1,1 +???????##?????##???? 1,1,11,3 +.####??.??#??????#? 6,6,1 +??#..##?...?#. 2,3,2 +..??##?#?#???#??.??. 12,1 +??.?#???#? 1,3,1 +??.#??????????#.??? 4,1,1,3,1 +???##??.?##? 5,1,2 +???..???..?. 1,1,1,1 +.?????#?#??? 1,1,1,1 +##???????????# 5,3,2 +??..????###?#?.? 1,8 +????????#???.##?? 1,2,1,2,3 +????##.?#????.? 1,4,2,1,1 +##???#.##?.#????? 2,2,3,2,3 +?????.????? 2,3 +?#?#??.##???.?#?. 3,5,2 +?#?..?##???#?????? 1,12 +.??#?????????.?.#.? 11,1,1,1 +???????????#??????. 7,1,1,3,1 +??????????#?????## 1,1,2,1,1,6 +.##?.##?????????? 2,4,1,1 +??#?##????? 5,1 +??#????????????? 5,2,2 +?#.#??##??#???#????? 1,2,13 +#??.????#.?? 1,2,2,1 +#.#?#???????.???#. 1,4,1,1,1,4 +????#??..?.. 2,1,1,1 +.??.#????#?????????? 3,8 +?...#??..??.?? 3,1 +?????#?.?.? 2,2,1 +..?...#?#????#?#???? 4,5 +??.?#???#? 2,2 +.?#?#.???..?? 3,3 +.??.#???#?? 2,3,2 +???##??#??#.?..???? 4,4,1,2 +?????????. 4,1 +????.???.#??# 4,2,4 +?????.?##?#??##?#.?? 4,4,5 +??#?????????????#?# 1,6,1,2,2,1 +#??.??????#..#??#? 1,1,3,1,1,2 +???#????.???? 5,3 +????#????#? 1,2,2 +?#.?.??.?.?????#?? 2,1,1,2,1,2 +???.???#??.?? 2,3 +?.??#?#???#?.????#?? 1,3,1,3,2,2 +?.??.??#?????.? 2,3,2 +??##??????????? 3,3,3 +???##?.#???????? 1,3,2,1,1 +?.???#????????##. 1,2,1,1,3 +.?#.##????##??. 2,3,5 +????#??#?.?# 5,1,2 +..?.??????..? 1,6 +##??..????#?#?# 3,1,6 +?#?.?#????.?#?#???? 2,2,1,5,1 +????###??..??#. 7,1 +??..??..?? 1,2,1 +.?.?.?#??????#??. 1,9 +???????.#?#??????. 2,3,5,2 +.##?????#?## 4,1,1,2 +?#?#.???#?#???? 3,7,1 +#??.??.?#??????? 2,1,8 +?#???#?#??#.?? 8,1,1 +?#??????.?#???? 6,2,2 +##.?????.??? 2,1,3,2 +??????.?#? 1,3,3 +.?..?#?#?#. 4,1 +??#?????.??#???? 1,4,3 +.?#??#??.??#. 5,2 +?.#?.????? 2,1,1 +#?###?????#?.?#? 6,5,2 +#??#?.?#???????.??? 5,1,2,2,1,1 +..???#?#??????#.?#?? 12,3 +?????.??#??????? 2,1,6 +#??.#??#?#? 3,1,4 +???.?????#?#.????? 2,7,3 +???.?.#?#?? 2,3 +???..?????##? 1,1,3 +#?.???#???#??????. 1,2,7,1 +????.????#?#??#??? 1,1,9 +??#?.?#?#???###???? 1,1,10,2 +#??????????.##?? 1,1,1,2,3 +.?.?????.???????? 1,5 +???#?##???????? 1,7,1,1 +?????????#??? 1,1,1,4 +???.??#.????? 1,1,1,2 +.???.???..???. 1,3,1 +????????#??#?? 3,1,1,3 +????.?..#?#??? 2,1,3 +#?#???????#??.? 4,2,2,1 +?????###??? 1,6 +???.?#?????? 1,2,4 +?##????????????. 6,2,1 +??##?????..??????? 9,1,1,3 +???#?#???.#. 7,1 +.????#????????#.? 5,7 +##?#???????????.??# 5,2,5,1,1 +??????#?.???#?? 1,1,3,4,1 +.??#???##??...??.? 10,1,1 +.???.??#????????? 2,2,7 +????.????###? 1,1,1,4 +#?#??#?##????##? 1,1,11 +???.#??????#..?#??# 2,3,1,1,1,2 +?????#?#???#?? 1,5,1,2 +???##.?##?#?????.? 1,2,4,1,2 +??????##??. 1,4 +?#??.?????? 2,1,1 +?#?#???###?#?????#?? 14,2,1 +???#?.#???#?.? 1,1,1,3 +???.???#?#.#?# 1,5,3 +??.#??#????#. 2,2,4,1 +??#?#?..?. 3,1 +?????#????#.????#?# 1,2,4,1,1,4 +?.???#.??? 1,2,1 +.???.???#??.? 1,1,2,1 +.??????.???? 2,3,1 +#.##?????? 1,2,2 +.#?#??#???? 3,3 +??#??.#??????????##? 1,3,1,1,7 +.?#.???????##? 1,2,1,4 +#.???#..#..???.?# 1,2,1,2,2 +?#???.??##.?? 4,2 +??..?????.????#.?? 2,2,1,1,1,1 +??????.?#.##?? 2,1,1,3 +#???.?.??? 1,1,1 +.?##??????#? 3,5 +???#.##???. 1,2,1 +##??######.????#.?? 10,1,1,1,1 +.?.??#?.#. 1,2,1 +???????##?.??? 3,3,3 +.?.#.?.##?#.??? 1,1,2,1,1 +.??#???#?????????? 1,10 +??.?#.?.?? 1,2,1 +??.?#???.??#? 5,2 +#??#???#?##????#?? 5,10 +?#???#??#?#?? 2,7 +??###????????#??#?. 5,12 +??.???#????. 1,6 +??#?#???#.???? 1,3,1,3 +???????#?? 4,2 +??#?.??#???#??#. 1,1,5,1 +??.#.?.??? 2,1,2 +??##???#??????. 1,6,1,1 +?#????#..????#??? 1,2,7 +?#??#??#??#?.? 3,1,5,1 +??#?.#????.# 1,1,3,1 +#???#?????????.??? 13,3 +##?.???????#???# 2,2,5,1 +?#.????.????. 2,1,1,1 +???#.??.???? 1,1,1,2 +?#???#???#?????#? 2,8,1 +?##?.????????.??#? 3,6,4 +?????##??.?#?????? 2,2,8 +??.?##?#???# 1,5,1,1 +?.??#???##??#???# 12,1 +.#.#???#????????? 1,12 +???.?#.???#.???#. 1,1,1,3,2 +.#??#??.??? 1,1,1 +?#???#?..? 2,1,1 +?#????.?#? 1,3,3 +???##??#?#???? 2,6 +#????##???#????????# 2,8,6 +?.?###?..#????# 1,4,2,2 +????#?#...#?#?? 1,2,1,1,1 +.#???????#? 1,1,2 +???.??.#.?? 1,2,1 +.??##?#?????????? 6,4 +?#?#?..#??###?.? 1,2,1,5,1 +.#.??????#?????????? 1,7,1,1,1,1 +???.???#?.#.?? 1,1,1,1 +##..#.?##??? 2,1,6 +?.???.???#??#?#??#.? 1,3,1,6,2,1 +?#?##?????????????? 1,3,7,1 +?#???????.????#.???. 8,4,1 +???#..#??#??? 1,1,1,4 +##???????? 5,1 +???###.?#??..???#? 4,4,1,2 +?.?#??###.??????# 1,6,1,5 +.?????????# 7,1 +?.#.?????? 1,1,1 +??#?.#??#??#? 3,7 +??#?.????#?#??? 3,1,1,1,1 +?.#???????.#??? 1,1,2,2,2 +???????#???..? 1,1,3,1 +?#???#???.#???#??.?# 1,1,3,1,5,2 +?.?####.???? 1,4,1,1 +??#???#?????#?.? 7,1,1,2 +.#?#????.???????.? 5,7,1 +???#.????#?#?????. 1,1,11 +???.#??????#??#? 2,1,1,6 +.?#?????.#. 3,1,1 +.???##.?????.?? 5,1,2 +??#????.??.??##?? 6,2,5 +????????#???? 3,4 +???.?..?#?#?? 1,1,1,2 +?????.?.?????##?? 1,1,1,1,7 +?????#####???.?. 10,1,1 +??????..#?#??? 2,2,3,1 +.???.??.?? 1,1,1 +??##..??.?#??.?? 3,1,3,2 +??????#..??.? 3,1,1,1 +#???#??#?????? 1,4,2,1 +??#????..#????#?#??? 2,1,9 +.?????.?????.#??? 3,1,2,2,1 +?#.#?.??.???? 2,1,1,1 +?..?#??#.?#? 1,2,1,2 +??.???#####? 2,1,5 +.#?#?.??.?? 4,1,2 +???.#?#?#.#??.??#??? 1,3,1,1,1,4 +???#????.??.? 1,4,1,1 +.?.?.????##???. 1,6 +.???.????? 1,1 +#?????#??#??#?.?? 1,1,4,3,2 +????.?#??#??##???. 2,8 +#?.??#????##??#?.## 2,5,6,2 +#.#.???#?#?#.??.??. 1,1,1,5,1,1 +????#?.????#?# 6,5 +.???##?????.???.? 7,3 +???#????##?#?.???#?? 11,2 +?#???#????#???.?#?? 7,2,1,1,1 +???#?????#?..?? 7,1,1 +?##?#???????????#??. 4,1,4,1,2 +???????#???.#????. 8,3 +.??#?.?.?.##?????? 1,1,1,6,1 +???#.???#.?.##? 2,1,1,1,3 +#??#??????#????.? 1,2,6,2,1 +.??#?#?.????.?? 5,1,1 +???????#?? 4,3 +?????.?#????#?????.? 1,11 +???##?##?##????#???# 2,2,5,1,2,2 +???.???#??#??#??#?? 3,1,1,5,1,1 +##???.??#??#? 2,1,6 +?#??????#?????#?? 10,2 +???##?.?.?? 1,3 +.???????##??#.#??#? 3,5,1,5 +.#???..##?? 3,4 +????.#??.??.? 1,1,2,1 +?#?..???#??#?.?### 1,1,4,4 +#..??#..?.??###?#??? 1,2,1,5 +.##.#?..#? 2,2,1 +??#?#?#??#??#..? 5,4 +???.?.???#???##? 1,9 +?????????#??##?##? 1,1,13 +.??????#????. 2,4 +.?#.??#???. 1,2,1 +????????????? 10,1 +####????????????.#?? 7,1,2,2,2 +??#.#??????? 2,3,1,2 +#??????#?#.?.. 4,4 +.?#??#.?#??#??#??? 4,1,6 +#??#.?.?##.?#??? 4,2,4 +?#?##????.#??.???. 5,1,1,1,1,1 +???..?#???#???###? 1,1,8 +?###???.??. 6,2 +?##?..??????? 3,6 +?????##?????###.? 6,3 +#.??????????##?#??? 1,1,1,2,1,6 +??????.????? 2,1,1 +??#???????.??????? 8,3 +???????????##?? 4,1,3 +??.????????#?# 2,1,8 +???#?#.##?????.? 1,1,1,7,1 +#??##?#??##?#????#? 7,6,3 +####?#???###??#??.?? 4,7,2,1,1 +#?.?#.??.#?? 1,1,1,1 +???#??????#?.?????? 1,1,3,3,2,1 +???.????#?. 3,6 +??????.?######?? 5,7 +?#??##??#??????. 1,12 +???#?#####?#?..??#. 10,1 +?#.?#.????#? 1,1,2,2 +??.?.????#?#.?.?#.? 2,7,2 +??#????.?????#.?? 1,1,2,6,2 +??#???.??????????? 1,7 +??.?.?.????. 2,1,2,1 +??#?????????#??#???# 1,1,2,5,4,1 +###..##?#??????? 3,11 +?#????#?#??#? 2,4,2 +.??..##?#?..????? 4,3,1 +????.????? 3,1,1 +.???????????.????# 2,4,1,1,1,1 +??#?#???.??# 5,3 +???????#.?#?#?##?##. 4,1,9 +....???#??#???? 7,1 +?.??#??.?#?????.# 1,1,1,7,1 +?????.?#??? 3,3,1 +??#???????.??? 5,3 +.???#????????#??.? 4,1,6 +..?.?????. 1,2 +.??????????#?????#? 11,3 +?.?????#??????? 1,9 +.?????##??.?? 6,1 +?#?.??#.?? 1,2,1 +#????????????? 1,6,3 +.??????..???#??. 4,1,1 +??????????????. 1,1,1,3,1 +?.???????. 1,2 +?#?????..??.???. 2,2,1,2,1 +#????#???? 4,3 +?????????????. 8,2 +.?##.??#.??#.?? 3,1,1,3,2 +???????##???????#? 10,5 +????#??????.?.?? 7,1,1 +?????????#????#.?# 1,1,1,2,1,2 +??#.?##????.??? 2,6,2 +.??#???.???????.#? 6,1,1,1,1,2 +#?#?.?????#???? 4,6,2 +?##?????#????#?#.#? 2,1,1,6,1 +????????.??????#. 4,1,1,1,1 +??.?#????#.#? 1,4,2,1 +???#.???#? 3,1,2 +?##???????#?? 2,1,4 +?.?.??#?.#??.?????# 1,1,1,3,6 +???#?????#?#?.?###? 1,1,1,2,1,5 +?.##??##?#??#???## 6,1,7 +?.?.????.?# 1,2 +????.#??#??#???? 1,1,9,1 +?.?#????.????#?.. 5,1 +?.??????????#??? 2,7 +#???#?##?????.? 5,2,3,1 +#????????. 5,3 +??#??#??#? 1,3,1 +???#???#?##?###.?? 3,8 +?#????#????#??# 2,9,1 +?.??#??.?.??#?? 1,4,4 +??#?#?#?#?? 3,6 +?#?.?.?##??.###?#? 2,4,5 +????#???.#??.??.??? 7,2,2,1 +?#?????#???.#?? 9,1,1 +#?.?#.#?#???????. 2,1,6,1 +?????#?????? 2,1,2 +.???#???.? 5,1,1 +.?#???.????? 4,1,2 +???????##???? 3,1,2,2 +?????##???? 4,2 +.???#????????## 2,1,1,1,2 +?????????.?#. 3,5,2 +?.???.???#????#??#? 1,3,9,2 +?#???????.??#??????? 2,1,1,1,3,4 +??#??#??#..#???.#?? 8,1,1,1,1 +????.?#????.#?.??? 3,2,1,1,2 +??.?#??????# 1,5,2 +?????.?.????? 3,1,4 +???#?????..?..? 9,1 +?????????#?.?. 2,1,1,3 +#.??#??????.#??. 1,1,7,1,1 +??#.??#??????#..???? 3,3,2,1,2 +.#???????????# 5,1,1,1 +?.?..?????. 1,3 +?????#?#????.??? 3,5,1 +???#???#?.??#?##??? 3,1,2,1,1,4 +??.?#????? 1,4,1 +?..#?.??###. 1,5 +???##?..???? 6,2 +#.??.???#?#.#????? 1,1,3,1,1,1 +??#??#???#??#?? 6,3,2 +???#???????##?#??. 2,3,7 +?????.??.??# 1,1,1,1 +?#??#?###? 2,5 +?#?#?#?.?.#?#?.?? 5,3 +??.??#.????? 1,1,1 +?#.?#.#?##??#???#?? 2,1,5,2,2,1 +..?????.??.???..#??? 1,2,1,2,4 +.???#?????.???????. 1,4,2,1,3 +???#?????.#???#..?. 4,5 +???#?????##?#?# 3,1,2,1,1 +??#???.??????? 3,3 +??.??.???#??? 1,1,1,2 +#???????##.?#?. 1,2,5,1 +???#???.?? 5,1,1 +?.###?##????????? 1,8,1,1 +?##???#??????##. 11,2 +.???#?????#??? 3,3 +.##?#?#???? 4,5 +??#??????? 1,6 +???##??.??.? 2,4 +.??#??##.??.???# 2,3,1,1,1 +???#???#???????? 12,1 +#.?#???##????????#? 1,1,13 +?????#????.?#???#? 1,1,4,7 +?????#???????#????? 8,3 +?#??#.????????. 5,3,1 +?##?#?.#?????? 5,6 +?.??#??#.???#.????# 1,3,1,1,1,2 +???.???##????.??#??? 1,2,2,2,5 +??##?#????????.?.# 8,1,1,1 +???##??..?##.?...?. 2,2 +#.?.?.????.????#?#?# 1,1,1,9 +??.????#?????? 1,10 +.??.##.?#? 2,1 +?#??????.#.? 2,3,1,1 +??????.???. 1,1,1 +.???.??..#? 2,2,1 +??.??????.????. 4,3 +#.?#?????.. 1,2,3 +??#??#????#? 5,4 +??#?????.?. 2,2,1 +??#?#??..##?#???#?. 6,9 +?#??#??#####.???#? 5,5,4 +???#?..??#??#?### 2,8 +.???#.???????#????.? 3,1,6,1,1 +???#?????#????## 5,2,4 +#?#?.?????.????? 1,1,3,1,2 +?????#??????.?#???. 4,4,1,1,1 +##????#?.???????. 8,1,1 +???.??#????#????#? 1,1,1,1,4,3 +#?#?##??#????????? 9,6 +?#???????????? 5,1,1,2 +?.?????#?.??. 5,2 +??.??..????#? 1,1,1,4 +??#?.?#?#??.?? 2,6 +.???..?.?..? 1,1,1,1 +??#...??##?????.??? 1,1,4,3,1 +??#.#?????????????? 1,1,1,8,1,1 +?##??#???????# 2,1,3,1 +?#??#.??..?#?? 4,1,2,1 +?#?????#????.. 3,3 +#??#???###??#?????? 2,2,6,2 +#?#??#???? 1,4,2 +.???.?.?#? 2,2 +??#??##?.?? 6,1 +#???#??.#??# 1,4,1,2 +???????#??? 2,1,1 +?##????????????? 2,2,5 +.##?#?.?#? 5,2 +???????##.???#????? 8,3,1,1 +?...??.?.. 1,1 +#????#?##????? 1,7,1 +?.?..##?#.??##?#?.? 4,5 +??.??.????????# 1,2,1,5 +#??#??#??###?????##? 1,4,12 +??#.?#???.?????#?# 2,3,3,4 +???###?.?? 1,4 +?#????#???. 2,3,1 +?##?#.????#??##.#. 5,2,6,1 +?#?#??.????#??# 4,1,5,1 +????.#.????????##?. 1,1,1,2,6 +.???..??#?..??..#??? 1,1,4,1,2,1 +????##?##?##.???? 11,1 +??.???#?#?#????.#??. 1,9,1,1 +.???#??.????? 1,1,1,3 +??.???#??# 2,1,4 +??????.??? 1,1,1 +?#?#???????.???.?#? 6,2,2,2 +#???#?##??#????#? 1,2,10 +?.##??.??.?#???#?.?? 2,1,2,7,2 +.????#..???? 1,3,1,1 +?.?#??????????#???? 3,9 +???#????#.?.? 4,1,1,1 +.???.#????. 1,1,2 +?#?##?????? 2,3,3 +????????##??? 1,5 +???###??.?#????#?? 1,4,8 +?.?#????.???.#.?.# 1,5,3,1,1,1 +?????##???#?.???#?? 2,4,1,2,2,2 +#????.?.#.?#??? 1,2,1,1,1 +??#?.#?#####????.?? 1,1,8,2,1 +??????#???.#?.. 1,1,1,1,2 +.??.##?.??.#????.??? 2,2 +?#??#??#??.??#.???# 1,5,1,1,1,4 +.?##?.?#???? 2,3 +????#?#??????..#? 2,5,3,2 +????????#????#..? 10,1,1,1 +#?????#???????.??#? 8,1,2 +#??###???.????###??? 1,6,1,7 +?????.?.??# 2,1 +??.???..#????. 2,2,2,2 +#?.#???..#..? 1,4,1 +?#???##?.#???????#?? 7,10 +?????#?#????#??? 9,1 +????????##?.###?? 1,1,4,5 +.???#??#.? 1,4,1 +?????.??#???. 1,3 +???#.??###?#???#???? 2,10 +..#??#.???#??.?. 4,1 +??????#?#??.??.???. 1,2,1,3,1,1 +?##??#?????? 7,1 +?.?#???.??????????? 1,1,2,4,1,1 +??????.?##??? 1,3 +?.?.????##?.????? 1,5,3 +?.#???##?#????#?#.?? 1,2,8,1,1,1 +??.?##???.#.?.?#???# 1,6,1,1,1,1 +??#??????..# 4,1,1 +?.#?.???#??#????#? 1,5,1,2,1 +?###.??#???#.?#?# 3,1,3,1,3 +??#??##????#.??? 3,4,1,1 +#?##?#####?#?#??. 1,12,1 +?##??#????#??..?#?? 4,1,6,2 +?????..???? 1,1,1 +????#?????#?? 4,3 +???#?#???#?? 1,1,5 +??#????????????? 4,5,2 +?##???##?#??.???#? 10,1,3 +.???#??????????#???. 4,2,7 +#????#???#??#?#?.?? 8,2,1,1,1 +?.??#??#??? 1,7 +??????#.????? 2,3,5 +###??..?????#??? 5,1,5,1 +?#?????#?.???.?? 1,4,1,2 +???#???#????????..?# 1,7,1,1,2 +?###???#?????#? 8,2 +.?.???#??? 1,1,3 +#####???#???#?? 5,4,2 +.?#?#?.?.??? 4,1,2 +?????????#??#.?.?#?? 3,6,2 +.?###?##?????????# 4,2,4,2,1 +#?????###???????#??? 1,13 +.#?#?????#?. 3,1,1 +.?#?#???#????#.#.? 1,1,6,1,1 +.##??#??#?##?.?.#?? 3,2,5,1,1,1 +.?#??#.??#?#??#?#??? 5,3,4,1 +??.????.?.##???????? 2,3,6,1 +?#?##??###.??#???#?? 2,2,4,1,1,1 +?#.#..????#?#?#??#?? 1,1,1,1,5,2 +??##????#????..# 3,2,2,2,1 +??.???#?..? 1,2,1 +?##?????#. 3,2 +#?#??????.??##.?? 9,4 +.?????#????? 6,1 +?.?.????#? 1,1,1 +???###??#?...??#??#? 1,4,2,1,1,1 +.??#?????..?#? 4,1,1,2 +??.#?...#?##.?#???# 1,1,4,1,1,1 +????.?.????? 1,1,1,1 +????#????#.?. 8,1 +??#?.?#?##.?. 3,4 +?#????#.##??..?? 1,1,1,4,1 +???????#??????.? 1,1,3 +.?????##..? 1,4,1 +.??.####???? 1,7 +.##??.???.?#?.?? 2,1,3,2,1 +#???#?#?????#.. 1,1,7,1 +.?.?#????????????? 1,4,6,1,1 +???.#?????? 2,3,1 +?##????..?##??#. 2,2,6 +?#.??#??.??#?# 1,2,2,1 +.#??#..?#?????. 4,2 +??#???????#?.???? 3,6,1,1 +.??.??.????### 1,1,5 +#.?#.#????????????? 1,1,12,1 +??#????#????.??#?#? 4,1,2,1,1,4 +??????????##? 1,2,4 +##???#??????.???#??? 7,3,2,1,2 +??.???.#?##... 2,4 +.#??#???#????####?# 10,6 +???#??.????? 1,1,1,1 +.?#?????#???? 3,2 +???#???.?.#???## 2,3,1,6 +?#???..???? 4,2 +??#??.???.# 2,2,1 +??????##?##?#?.?. 12,1 +???#???#?.????.?? 2,6,1,1,1 +#?.???.???????##?#?? 1,1,1,1,10 +?????.?##?#???? 3,5 +?????#.???#?? 4,3 +?##??????... 4,1 +?##??#?.????#.#? 3,1,2,1,2 +.?.?????#. 1,1,4 +??????#?.? 3,3 +#.?#?#.?##?????? 1,1,1,6,1 +?#?.?#?..??. 1,2,1 +???????#?? 3,2 +??#???????#.# 3,2,2,1 +..???.#????.??#??? 3,2,1,1,1,2 +?#?###????.#.???? 7,1,1,1 +??#.?.##?.???.. 3,2 +?????#??..#..??? 3,3,1,3 +???##???????? 6,1 +????#????? 1,1,1 +?#?##.??.??# 4,1,1,1 +?#?.??##??.?#??#?# 2,3,2,4 +????????????#? 2,7,2 +?????#?#.????? 1,3,1,1 +.??.????###??? 1,6,1 +?.?#???.#?. 4,1 +???#?#?#?#????.? 11,1,1 +#??.??????###???#?## 1,1,1,1,3,6 +?????.#?##?..?? 4,4 +.??#?#????.?#.??? 4,1 +.?#.?#???#??##??? 2,2,7 +.#????.?????##?##### 1,1,1,13 +???.??.##?.#? 1,2,3,2 +???#?.???.? 2,2 +?##??###????#?#? 3,10 +?????#????##?#?..??? 7,6 +.#?##.??#???? 4,5 +?.???????#??#? 1,2,1,5 +??.#.#?#??###?? 2,1,1,1,5 +?.???#???#?? 5,3 +???#?##.????#??.??? 1,5,3,2,1,1 +?#??.###????#???# 1,5,2,1 +.???.???????#???. 1,1,6 +?##.#???#.#??? 3,5,1,1 +.???????.?#?#? 1,1,2,4 +??.?.??#.? 2,1,1 +???#??#..#?????. 1,2,1,2,1 +.???.??????.#?.? 1,2,2,2,1 +..?????.????.#??#. 1,2,2,1,1,1 +?#???.????? 1,1,3 +?##???#??#??????? 10,3 +??????????.???#? 3,3,1,5 +??...?????????.. 1,3,4 +#???###?#??..#??#?. 7,2,5 +#.#..#??????#?#????# 1,1,15 +?.??#?..????#?.? 2,5 +????????.?? 1,6,1 +??.???.???.#?#.? 2,2,1,1,3 +..#..??##?? 1,4 +##??#??????.#?? 8,2 +?????.?#?.? 2,2 +##.???#??????. 2,5,2 +???##??.?#?#?? 3,5 +#.?????#????#?? 1,9 +#??##?.?#????#????? 1,2,10 +?..?..??#???? 1,6 +??.???#?#?# 1,5,1 +??####??#? 4,1 +?.????????????.? 1,3,1 +???.??????#..#?.?? 2,1,3,2,1 +????#??.???????#???? 6,8 +??#.?#?#??#?.???? 1,1,1,3,3 +.##??????.##????? 5,5 +#??..???#.#? 2,3,2 +?.???.??#??????#???. 1,2,6,2,1 +?.?#?????? 5,1 +??????#?#????. 1,9 +?????.#??.?.?#?.# 2,3,3,1 +????##?#??.??#?. 5,3,3 +?.??????.#. 1,2,1 +?.##?.??.# 2,1,1 +????#???.????#? 3,2,1,2 +.????##??# 1,5 +?????#?.#..## 2,1,1,2 +??.###?????.???. 7,2 +????????.?.?.#??.??# 7,1,1,1,1,1 +#??##????#??? 8,1,1 +##????#?#?##?#?.??. 2,11,1 +???#???????????#?? 6,5 +?.???..#??.??.?.#?? 2,1,1,2,1,3 +?.??.?##????? 1,2,2 +.??#???#?????#? 6,2,2 +..?????#.. 1,1 +?##?..????. 4,1 +??#????????#?? 2,9 +??????.???###? 4,6 +????..#???#? 1,2,2,3 +??##?.??#???# 5,2,3 +#.??????..?. 1,1,2,1 +.#.???.??#.?#?#?. 1,2,1,1,4 +.??.?.??#???????? 2,1,2,1,3 +#???#.??..?#.???? 5,2 +???.???.?.#? 2,1,1,1 +?.#??.???#??. 1,4,1 +????##?#?#???#???.? 14,1,1 +???.??##?#?#? 1,8 +???????.?##?.??? 3,1,3,1,1 +#???#???.???.???? 1,5,1,2 +?????#???#?#?#? 8,1,1 +??#?#???.#? 6,1 +.??????????.?##???#. 8,3,2 +??.##.?..?. 2,1,1 +.???????#???#?#???? 12,3,1 +??#???.???# 5,1,1 +?##?#?##???? 3,6 +??.#???.????#?. 1,1,1,2,2 +???.#?#????#?#?# 3,1,1,3,1 +...?#.?????#? 2,2 +??..?#.?#???## 2,1,2,2 +????#????.???. 1,6,1 +.???#.#?#?#?. 4,1,1,2 +.??????#??##??#?# 1,5,4 +??#?.??????#?? 1,1,8 +??#??.#?#?????# 1,1,2,1,1 +?#????#???????# 1,1,1,6 +?##??????#. 2,1,1 +????.?????#?.?# 1,1,6,1 +?###??????#?#?. 4,8 +.??.?.??????#. 1,1,2,1 +?#.???#????.? 1,3 +?#???.#?????#?#??? 1,1,1,8 +?#.????????.#?? 1,7,1 +?????????#...?? 1,6,2 +#?.?#??#????.#???.?? 2,5,1,1,1,2 +??????..#?. 2,1,1 +.??###?#??. 4,1,1 +#????#??##???? 10,1 +??#??#?###? 3,1,3 +????.??????#.?##?? 1,1,1,2,1,5 +??#?.?.?#?? 2,1,1 +##.?###??? 2,3,1 +.?.??..?#?.?? 1,3,1 +.#?????.#???? 3,2,2,1 +??.?#??.?#???#??? 1,2,2,5 +#??.???#????##? 1,1,1,1,2 +???????###.? 3,3 +????????.. 1,2,1 +.?#?##?.#??#??.?? 5,5,1 +???????#?#. 4,4 +??#?#???.?? 5,2 +?.?#??#?#?#????? 1,10,1 +?...#????? 2,1 +???..????..?.?#? 2,1,1,1,2 +..?#?????#???# 9,1 +???.#??.?#?.?##???? 3,3,2,3,1,1 +??#???#??#???#..#.? 5,4,1,1,1,1 +.?#.??#??#?#. 1,1,1,3 +..?.???##????.??.?? 5,1 +.??.????#??..#???.?? 1,1,5,2,1,1 +##????##.#???? 3,3,2,1 +????##.???#?????#??. 1,2,1,3,6 +..???##.#?.??#?#?#? 4,1,8 +.?#.????#??#?##??#?? 1,2,2,1,7 +?#?#.?#????#??? 2,1,3,2,1 +?.?##?#?#?????????? 10,2,1 +?????###????????..? 1,6,2,1,1,1 +???#.??#.???##.?## 1,1,1,1,4,2 +????..?#?###? 3,6 +??#.#???.?.? 1,1,1,1 +???????????#?????#. 6,4,2 +...?#??????.?. 4,1 +?##???????.?.??.#. 9,1,1,1 +?#?#?##???...? 3,2,2,1 +.##?.?..#??????#? 2,1,1,3,1 +#??##??#?#?????.?? 5,7,1 +??#?????#?.?#.# 1,1,5,1,1 +???.?#???#?.?? 3,6,1 +?.???#????? 4,1 +?#..??.??? 1,1,1 +?.#???.??? 1,3,1 +#?#????#???? 1,1,3,3 +?#??????????.? 2,4 +#???????.??. 1,1,1,1 +??.?#??#??..??.?## 1,6,1,2 +????#??#?# 3,2,1 +??.#?#..??#???? 1,1,3,2 +.#?...??#????.????#? 1,3,2,6 +#?#?.#..?.??.?.?#?? 3,1,1,2,1,3 +#????.??##? 1,4 +?.?.???????#?. 2,1 +#??#..?#????#???.?.? 1,1,10,1,1 +#????????#?.?... 6,3,1 +????###????? 5,2 +#??.?????. 3,4 +?.?????????#?#.??? 6,3,2 +?????..?.? 3,1 +??#??##??.???. 4,3,2 +.?.????#?? 1,2 +??#??.????.? 3,2,1,1 +????#??.??##? 7,3 +?????#..???? 4,1 +?.??#??##? 3,3 +??.???.?#? 1,3 +??.#?.?#..?? 1,2,1,2 +??..?#???. 2,4 +.#.???#???###?#??.? 1,1,2,3,1,1 +?.##???#???.?????.? 8,4 +????.??.#???.#??? 1,1,4,1,1 +.??#?#?...#?.??? 3,2,1,1 +??.?????#??# 2,1,4,1 +???#??#???#?# 3,7 +?.??#..?????#????#? 1,1,1,2,7 +#?.??.#?.?#?.???###? 2,1,1,2,1,3 +#????#?#??.???. 1,6,1,1,1 +????.???#???#?????? 1,2,6 +.?.???????#???.??? 9,2 +?##??.??##. 2,3 +?#?????#???.#???##? 3,3,1,4 +#??????#?###???#?? 2,13 +???#??#???????? 6,1,1 +??#??##????? 1,3,1 +.??..#??#? 1,1,2 +?.??###???#.?????. 8,2 +#..???#??.???? 1,1,3,1 +??????.??? 2,1,1 +?#???.???# 1,1,1 +?###??.?????# 6,1,1,1 +??????????? 1,1 +?##???#????????#.?#. 4,1,7,1 +.?.#??.??#?#? 3,3 +????.#?.?# 1,2 +?#??.????.???.? 4,3,2,1 +.???#??#???#?.???..? 3,3,3,1,1 +???.???.????#???#? 1,1,1,1,8 +????#??#?.?## 7,2 +#??????.???#?#??#? 6,7,2 +.???..?#?# 1,3 +?????#?#?#?#?????? 12,1 +#?..?.????????#??? 2,1,1,1,2,1 +??#???...??#??? 1,5 +?.??????#.??? 3,2,1 +.?#.?#..??.#??? 1,2,3 +.??????#?#...?#?.? 5,2 +??.???#??#? 1,1,2 +???#??#?????#?##???? 8,4,1 +.#??#????????.????. 6,3,3 +.#?#?.?.#??.?? 4,2 +?#???##??##???? 2,10 +???.???????#?? 2,1,3 +?#???#?##??.#?? 4,5,1 +???????????????#??? 4,1,1,1,2,2 +??#???#?#??????#? 2,5,6 +??#?.??#..?#??? 3,1,1,5 +?#???#.???.#..# 2,2,1,1,1 +#???????##??.#?.? 1,1,1,3,2 +?????#??###??? 2,7 +#????????##.?.??. 2,7,1 +?.??#?..???#?#????. 3,10 +??????#?..???????.? 5,2 +???#????????????? 1,1,2,2,3 +????.#???#?.. 1,6 +??.??.#??#????????? 1,2,9,3 +????.?..##??? 1,1,2,1 +?#?#????.?#??#??? 8,5 +##?#???#???#?#.??? 5,2,4,2 +??.??#?????#? 1,3,1,2 +??.???#?.##? 1,2,2 +..??.?????# 1,6 +?##??#???#??? 3,2,3,1 +?????#???#?###?##??? 1,2,13 +#?#?#??????#.??#?? 12,3 +???.???#?????????? 2,6 +#??##????????????# 10,2,1,1 +.?.?.???????? 2,1 +.?????????##????? 1,4,7 +#????#?##?? 1,5 +??.??#??????..#?. 1,1,2,4,2 +#..???..?.#?? 1,1,1,2 +.#??#?#?.?.????? 1,4,1,3 +#?????????.???#??? 7,1,4,2 +#???##?#??# 2,5,1 +????.#.?..?#?#. 1,1,4 +?#???#?#?????????? 1,1,1,1,4,1 +??????..???????. 1,2 +#????#?.??##.????#? 2,3,4,1,4 +??###???#?.???####? 9,4 +?.?#?#??.?#??## 6,2,2 +?#?.????#???#.?#.? 1,1,5,2 +?.??.???.??? 1,1,1,1 +.??#?????#?? 5,2 +????.?.?#...? 1,2 +.?#...?#??#?#??#?#? 2,12 +???.?????##?? 1,9 +#?#??????.????? 7,1,2 +???#??..#?. 1,2 +???????#?.?.???. 9,1,1 +#???#???????# 1,1,1,5 +???#?????? 3,2,1 +.##.?????.?.#?????? 2,2,1,1,1,2 +.????..##?#?##????# 1,1,10,1 +??#?????#???#?.???# 1,2,1,2,2,1 +##??.?#?#?##?.???.?. 3,7,2 +.#???..???????? 4,4 +?#?##.?.?? 5,2 +??#??..?.??? 3,1,1 +?.#.??#????#??????# 1,1,1,1,10 +????.#?#???? 1,3,1 +????..???#?#?#???? 1,1,1,6,1 +.###???????#????.?? 3,8 +.#??????.. 1,1,1 +???.??#??????. 2,1,3,1 +?#??#?.?????##???.?# 6,1,2,1,1 +.??.#?????.??????. 5,6 +.???.#?##? 1,1,4 +???????.?##? 3,1,2 +.?#??#????? 5,1 +??????#??.##??#?. 7,6 +.????..????## 1,1,2,2 +?..#?.##?#?#????#?.. 2,8,2 +??##.????????#?? 3,5,2 +#?????????##?.?? 2,1,1,3,2 +.?#?.#?????##???? 2,2,7 +.?.?????????## 1,1,9 +?????.?#??. 3,3 +?#?#??..?? 1,1,2 +?.??.?#??.#????.#??? 1,1,2,5,1,2 +???.?.?##????# 1,1,8 +???##???##.???.? 5,1,2,1,1 +.????????#???###? 3,8 +???#??#??.??## 5,1,1,2 +#.????????.#? 1,4,1,2 +?????????? 4,1 +##?#?.???#?#???.?? 5,1,3,1,1 +??.?#????. 1,1,1 +???.?.?????#?????#. 1,1,1,6,1 +?.?????..?### 1,1,1,4 +??##???##???#??.??# 8,1,1,1,1,1 +?.#??#??##?.?.?.???? 1,1,5,1,1,4 +?.??##?.???.? 4,1 +..?#?????? 3,1 +????#??.?????#???#.? 5,1,1,3,3,1 +???????##?#?.#?????? 2,5,1,4 +??.?#??#??#?????##? 1,11,2 +.???????.???###?? 1,1,2,5 +.???#??#????##??? 6,5 +##?#??.??#.. 2,2,1 +.???.????? 2,1,1 +?...??.?.?#?###?##?# 1,1,1,1,8 +??????#?#?#??#.?... 2,9 +??????###???.#???# 1,4,2,1 +.?..??.???.# 1,2,1,1 +.???..?#??#?#??. 1,9 +???.????###?? 3,6 +?##????###???.. 2,8 +???#?#.??#?? 5,4 +??##?###???#???????? 9,1,1,1,1,1 +?..###??????????.? 1,3,2,4 +#??##????###??????? 14,2 +?###?#??#??#??.???# 4,2,5,1,1 +??.###?#???.. 6,1 +#?#?#?..??#? 1,1,1,4 +?#.???#??.#???##???? 2,1,2,2,6 +.?##.?##??#?????..? 2,8 +????.?#.?.?? 2,2,1,1 +#??.??????#? 3,1,5 +??.#???.??#?#? 2,1,1,5 +???.??#?????? 2,1 +???.?????#?.#. 1,3,1,1 +??..??..???????? 1,1,2 +??????#?????#???? 9,2 +??????#???#? 1,1,7 +???#???.????..? 1,3 +?????.???## 1,4 +.##???.##??.???.?#. 4,2,1,3,2 +.#?#?.??????????? 4,4,2,1 +?#???.???. 5,1 +?##????..##?..?#? 7,3,2 +????????????? 5,1,1,1 +.??#??#????????????? 1,1,1,5,1,1 +???.???#??. 1,5 +???.??.#.???. 3,1,1,1 +???...?#?? 2,2 +.?.#??##.??.?? 5,1 +?..????.?#?##?# 1,4,7 +.#.??????. 1,5 +.??????#...?? 3,1,1 +.????#..?.????? 5,2 +#?#???????#???##?.. 9,7 +###???????#.????#??# 3,1,4,3,1,2 +.?.##????#???#??? 1,4,7 +??????????#???#? 1,4,1,4 +??#??#.##????#? 5,3,3 +??.?##???????.?.#?? 1,3,1,1,1,2 +.?#???#?#?????#??##? 7,7 +#..??.???#?????. 1,1,1,5 +??.#.?#???##??.# 1,1,9,1 +???.??#??????##???? 1,4 +???.???#??.?#????#?? 1,4,7 +#???#??#?#.#??.?# 2,7,3,1 +.??.???????#??#? 1,1,9 +.?#?.????.???? 2,2,4 +.????.#????.?? 1,1,3,1 +??????#????#?...?? 12,1 +?##???#????#?#?.#??? 9,1,2,2,1 +??##??..#.? 5,1 +.???.?.???????.. 2,2,4 +#???#?.?????#? 6,1,1,1 +??#??#.?#?. 3,2,2 +?.??????#?#??#?????? 1,12 +?....??????# 1,2,1,1 +.?????#?????#.?.# 1,6,1,1,1 +????#?####???????? 1,10,1,1 +??#?.??.?? 2,1 +?.?.#.?.????#???.? 1,3 +.#?.#?#???#??#?? 1,3,1,3 +..?#???..?????.? 4,2,1,1 +??###?#???.?????#..? 8,6,1 +???.?#???##???#? 2,10 +?##??#???????????? 10,1,2 +????#???.??? 3,1,2 +?.???.????????#????? 3,1,7,1 +.?.?#??#???? 5,1 +?..???#?.?????? 4,1,1 +??#?#?.???.##?### 2,2,2,6 +.???.?#?#?#???# 1,1,7 +???#??..#???. 4,1,1 +?#.????.????#??.. 2,2,7 +????????#.?#.? 1,5,1 +?.?#..??#??? 1,1,3 +?????#???????#???#. 6,1,1,3 +.#.??#??.?# 1,4,1 +.##??.?##?#. 2,5 +????##??#?#?#?#?#?# 1,15 +?#?.#?.##?#?????##? 2,1,6,4 +..?????#?##???. 9,1 +????.#?###???????? 1,7,1,1 +.?#????????.??????? 9,4 +?.?#??#???????# 4,1,2,1 +???#?#?????.?##??# 8,6 +?#????#??. 1,2 +.??????.?.# 5,1,1 +?##??#.???#??.? 5,1,1,1 +?.?????????#? 1,1,1 \ No newline at end of file diff --git a/input/2023/day_12/input_test.txt b/input/2023/day_12/input_test.txt new file mode 100644 index 0000000..c5bec3a --- /dev/null +++ b/input/2023/day_12/input_test.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/year_2023/day_12_hot_springs/common.rs b/src/year_2023/day_12_hot_springs/common.rs new file mode 100644 index 0000000..a505f65 --- /dev/null +++ b/src/year_2023/day_12_hot_springs/common.rs @@ -0,0 +1,6 @@ +#[derive(Debug, PartialEq, Clone, Copy)] +pub enum Spring { + Operational, + Damaged, + Unknown, +} \ No newline at end of file diff --git a/src/year_2023/day_12_hot_springs/mod.rs b/src/year_2023/day_12_hot_springs/mod.rs new file mode 100644 index 0000000..f0f5484 --- /dev/null +++ b/src/year_2023/day_12_hot_springs/mod.rs @@ -0,0 +1,25 @@ +pub mod part_one; +// pub mod part_two; +pub mod common; + +use crate::utils::solution::Solution; +use crate::utils::input_reader; + +pub struct DaySolution ; + + +impl Solution for DaySolution { + + fn input_path(&self) -> &'static str { + "input/2023/day_12/input.txt" + } + + fn part_one(&self) -> String { + input_reader::read_input_file(self.input_path(), part_one::part_one) + } + + fn part_two(&self) -> String { + //input_reader::read_input_file(self.input_path(), part_two::part_two) + String::from("Not implemented") + } +} \ No newline at end of file diff --git a/src/year_2023/day_12_hot_springs/part_one.rs b/src/year_2023/day_12_hot_springs/part_one.rs new file mode 100644 index 0000000..efe5fe5 --- /dev/null +++ b/src/year_2023/day_12_hot_springs/part_one.rs @@ -0,0 +1,109 @@ +use super::common::Spring; + +pub fn part_one(input_lines: Vec) -> String { + + let mut springs: Vec> = Vec::new(); + let mut values: Vec> = Vec::new(); + + for line in input_lines { + + let split_line: Vec<&str> = line.split(' ').collect(); + + springs.push(parse_springs(split_line[0].to_string())); + values.push(parse_nums(split_line[1].to_string())); + } + + // for i in 0..springs.len() { + // println!("{:?} - {:?}", springs[i], values[i]); + // } + + let mut res = 0; + for i in 0..springs.len() { + let search_spring = springs[i].clone(); + res += unknown_search(search_spring, values[i].clone()); + } + + res.to_string() +} + +fn parse_springs(line: String) -> Vec { + let mut spring_line: Vec = Vec::new(); + + for c in line.chars() { + match c { + '.' => spring_line.push(Spring::Operational), + '#' => spring_line.push(Spring::Damaged), + _ => spring_line.push(Spring::Unknown), + } + } + + spring_line +} + +fn parse_nums(line: String) -> Vec { + let nums: Vec = line.split(',').map(|x| x.parse().unwrap()).collect(); + nums +} + +fn validate(spring_line: Vec, values: Vec) -> usize { + + let mut validation_vals: Vec = Vec::new(); + let mut count: usize = 0; + + // println!("{:?}: {:?}", spring_line, values); + + for i in 0..spring_line.len() { + match spring_line[i] { + Spring::Operational => { + if count > 0 { + validation_vals.push(count); + count = 0; + } + }, + Spring::Damaged => { + count += 1; + }, + _ => { + panic!("Invalid spring"); + }, + } + } + + if count > 0 { + validation_vals.push(count); + } + + if validation_vals == values { + return 1; + } + + return 0; + +} + +fn unknown_search(spring_line: Vec, values: Vec) -> usize { + + // println!("Unknown search: {:?}", spring_line); + + let mut res = 0; + + let unknowns: Vec = spring_line.iter().enumerate().filter(|(_, x)| **x == Spring::Unknown).map(|(i, _)| i).collect(); + let i = unknowns.first(); + + if i.is_none() { + return validate(spring_line, values); + } + + let i = i.unwrap(); + + let mut op_spring_line = spring_line.clone(); + op_spring_line[*i] = Spring::Operational; + res += unknown_search(op_spring_line, values.clone()); + + let mut dmg_spring_line = spring_line.clone(); + dmg_spring_line[*i] = Spring::Damaged; + res += unknown_search(dmg_spring_line, values.clone()); + + + res +} \ No newline at end of file diff --git a/src/year_2023/mod.rs b/src/year_2023/mod.rs index 9a7cd43..e7b87e5 100644 --- a/src/year_2023/mod.rs +++ b/src/year_2023/mod.rs @@ -9,6 +9,7 @@ pub mod day_08_haunted_wasteland; pub mod day_09_mirage_maintenance; pub mod day_10_pipe_maze; pub mod day_11_cosmic_expantion; +pub mod day_12_hot_springs; pub fn run(day: &str) { let solution: Box = match day { @@ -21,6 +22,7 @@ pub fn run(day: &str) { "9" => Box::new(day_09_mirage_maintenance::DaySolution), "10" => Box::new(day_10_pipe_maze::DaySolution), "11" => Box::new(day_11_cosmic_expantion::DaySolution), + "12" => Box::new(day_12_hot_springs::DaySolution), _ => panic!("Invalid day specified"), };