From 20e2a9f7befa09dce564cbf5ff7d7156bda8480b Mon Sep 17 00:00:00 2001 From: Keenan Tims Date: Mon, 11 Dec 2023 23:12:06 -0800 Subject: [PATCH] day12: problem 1 solution Slow and inefficient but fast enough for a solve --- 12/Cargo.lock | 106 +++++ 12/Cargo.toml | 8 + 12/input | 1000 ++++++++++++++++++++++++++++++++++++++++++++++++ 12/src/main.rs | 109 ++++++ 4 files changed, 1223 insertions(+) create mode 100644 12/Cargo.lock create mode 100644 12/Cargo.toml create mode 100644 12/input create mode 100644 12/src/main.rs diff --git a/12/Cargo.lock b/12/Cargo.lock new file mode 100644 index 0000000..b4915f0 --- /dev/null +++ b/12/Cargo.lock @@ -0,0 +1,106 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "crossbeam-deque" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" +dependencies = [ + "cfg-if", + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7" +dependencies = [ + "autocfg", + "cfg-if", + "crossbeam-utils", + "memoffset", + "scopeguard", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "day12" +version = "0.1.0" +dependencies = [ + "itertools", + "rayon", +] + +[[package]] +name = "either" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" + +[[package]] +name = "itertools" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25db6b064527c5d482d0423354fcd07a89a2dfe07b67892e62411946db7f07b0" +dependencies = [ + "either", +] + +[[package]] +name = "memoffset" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" +dependencies = [ + "autocfg", +] + +[[package]] +name = "rayon" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" diff --git a/12/Cargo.toml b/12/Cargo.toml new file mode 100644 index 0000000..f542776 --- /dev/null +++ b/12/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "day12" +version = "0.1.0" +edition = "2021" + +[dependencies] +itertools = "0.12.0" +rayon = "1.8.0" diff --git a/12/input b/12/input new file mode 100644 index 0000000..d0daee0 --- /dev/null +++ b/12/input @@ -0,0 +1,1000 @@ +.#?.##??.?? 2,2,1 +?.#?#?????.? 1,1,3 +??##??????????.?# 4,4,2 +..#?????.?#?.#?. 2,2,1,2 +????????????##?? 1,1,1,1,3 +?????.#????#??? 1,1,3,2,1 +.?#..?#?????#?? 1,2,5 +?#??????????????.? 4,1,2,2,1 +#??##?.#??. 1,2,3 +???????#??????#.?? 13,1 +?#..#??.?#.? 2,1,1,2 +?.###??????#???.?.?? 11,1 +.?????????#???. 3,7 +?????.#??????#.? 1,1,5,2 +?#???????? 4,4 +?.??.#.????#??#??? 1,1,1,4,1,1 +??.?????.#?.?#?????. 1,3,1,2,3,3 +.???#?????.?? 4,1,1,1 +??#??.#??.?? 3,2,2 +.???.?###. 1,4 +#.???##?#? 1,6 +#.??????#?.??. 1,5,1 +.??#???#?#????????? 3,8,2 +??.?????????.?.??# 1,5,1,1,1,1 +????????????#? 1,4,4 +?????????#??. 2,5 +?.?#?.?.??? 2,1,1 +?.?.??.??#???##?? 1,1,2,1,3 +.?#?.#????.. 2,1,2 +#??#??##?.#??? 1,2,2,1 +??.##?#?#???..? 1,4,4,1 +????.##?.? 1,3,1 +#???????#??#? 1,2,1,4 +??????????? 1,2,1 +#???.??##?? 1,2,3 +##?#?#?.??. 7,1 +?.?###????????? 4,7 +.?#??###???#?????? 12,2 +.#.???#????#. 1,6 +??.#???.#??#???##?? 1,1,1,1,6,1 +??#?.?#??? 3,4 +????????#.?. 2,2,2 +??.??????.??????#? 1,3,4,2 +.#??#???.?.???#??? 6,1,1,1,1 +?????????#??????#? 1,1,1,4,1,1 +???...?#??????????? 3,12 +????..?????? 2,1,2 +???.??.???? 1,1,2 +#..?###????????# 1,6,6 +.#?#.???#???##??#??? 1,1,1,1,10 +?.?#?#.????##.##.??? 3,6,2,1 +???????#?#????.?..# 4,9,1,1 +#??#??????????#.???? 1,2,1,7,1,2 +?#??????????????? 1,1,11 +???????#?#? 1,5 +.##?????????.## 4,3,2 +?#?????##??#.????## 1,1,1,3,1,6 +.????#.??..?#?.# 3,1,1,3,1 +?##????????????#?#?? 9,1,4 +.?????#.???.. 6,2 +?.??.#??.#?. 1,3,2 +#?.??.?#??# 2,1,5 +??#?#.????#??#.???.? 3,1,3,1,3 +.?#?#?#?.??.????? 6,1 +#?..??#??? 2,1 +#??#?????.##?# 2,5,4 +?.??..#.????? 1,1,1,2 +??????.?.?#? 1,1,1,2 +.???.?????.?????? 1,2,1,5 +?#...#???#? 2,1,1 +???.?????????#?#?? 2,4,1,6 +.#???##??????. 6,1,2 +#?????#???#?#?????.# 1,6,6,1,1 +.?#???##??.?.?#?? 7,1,1,1,1 +?#?...?##??.? 3,5 +#??#?????????..?##. 4,1,1,1,1,2 +?####?.?.??#?? 4,2 +#??##.?##???#?####?? 5,3,7 +??.?#????#??.??.??? 1,3,4,1,1,1 +.?.?#?##?.?##?????. 2,3,3,3 +???.?????#?#???.# 1,3,5,1,1 +???##?.??#.???#??#? 3,3,6 +.?#?????????.?#??? 2,1,2,3,1 +???...???? 1,3 +##?#?#?..?? 7,1 +????.?#.???# 3,1,2 +?????????##???.???#? 1,1,1,5,1,3 +?.#??????#?????. 1,2,2,4 +????.#???#? 4,2,2 +?????#????#?#??##?# 4,6,4 +#???.???###?#????? 1,1,1,7,2 +?.?#?#????##??#.?? 1,1,1,1,5,1 +?.????.?.???#? 1,1 +??##????????? 3,2,1 +???.?.??#???#? 1,6 +???#?#??#???.?.# 7,1,1,1,1 +.?.???#?##?? 1,5 +??#????#??????#? 8,3 +?#????#.?????#?#. 1,4,6 +???#.?#??#? 2,5 +??????????.??????# 4,2,7 +???#???...?? 1,2,1,1 +????.???????##?? 1,1,1,1,5 +.?##??.##? 2,1,2 +.???##??##??# 1,2,3,1 +????#?????##????? 1,10,3 +??#???.?.?##?..#??? 1,2,1,4,1,1 +???#?#???? 3,2 +.?.#???#????????? 1,9 +?#????##???#?????.# 3,7,3,1 +#.??##??????#????? 1,5,1,1,1 +?????.???????#?? 3,1,5,1 +#??????.##??????. 3,3,5,1 +.???????.? 1,1,1 +??#?#??##??#?.????# 11,3 +.?.?##.??##?.?#?#?#? 2,3,6 +#?????#?.??#??? 2,4,4,1 +.#???????#???? 1,2,6 +####?#?.#?????#?# 7,1,1,2,1 +??#?.?.??? 2,2 +?.??.??#????? 1,4,1 +?..????#?????##? 4,1,2 +#...????.?#?#??.?? 1,4,1,1,1,1 +????.????? 3,3,1 +#?.?##?????#?#? 2,3,1,1 +??????#?#?????## 2,12 +?.???#???.??#? 7,1 +#?#..??.#??#???#?.?? 1,1,2,1,6,2 +??#?...#.???#???.?? 1,2,1,1,4,1 +?.?..???.?. 1,1,1 +?.????..?.??#??? 2,3 +.??##??????.????? 10,1 +..?????###??? 1,4 +??????#???. 2,1,4 +????##.??.??#?????? 6,1,1,4,2 +??????????##?#?#?# 1,1,13 +???.??###?#?????#. 1,9,1 +?#??.????#?.?.?? 3,5,1 +???????????.??.???? 1,4,2,1,1 +??.##??.#... 1,4,1 +?.?#?#??#?.??##????? 7,6 +??.????#?#??#.?.? 1,8 +????#??#???? 4,4 +?..??????#?????. 1,9 +?????????.?##????? 4,1,5,1 +.?.#??.?#.#?? 1,1,2,2 +?.?##?????#.#?#? 9,1,1 +?#???#?????? 1,3,2 +..??#?.?????#??????. 2,11 +???#??????? 4,1 +???#??#????#?# 11,1 +?.?#?#?????#?.?#..? 1,6,3,2 +??.??#?#???.??.#?? 6,1 +?##.???????? 3,1,1,1 +???##?.??? 2,1 +#?.?.?#?#????. 1,1,5,1 +?.????#????? 1,1,4,1 +???#????.??? 1,1,2,1 +#.????..?.?.???#?? 1,1,1,1,1,6 +???##??.?#??#????#? 6,9 +???.#.??.???#??# 1,1,2,6 +????..?#?#?.##?#???. 3,5,2,4 +??#???#?#..???##? 7,3 +?#?##?.???.???? 5,1 +??.?#????#?#?.?#? 1,3,1,4,1 +.?.????.????##?? 1,2,1,1,6 +??????###. 1,1,3 +#?????.???. 3,1,1 +#?#..#????#???#?. 3,7,1 +?.?#??#?.???.?###. 1,3,1,1,1,3 +.#???.?.#?? 1,2,2 +.#?#??#?#??#?.?????? 12,1,2 +????#?????#?? 1,8,1 +..??????#?. 4,1 +##?#????#?#??????#?? 2,2,2,3,3 +?????#???#.#.. 4,2,1 +???##??..????..?#?# 5,3,4 +?#?#???#??..??## 8,4 +.?.???#???? 1,4 +???#?#??#.???.# 7,1,1,1 +..?.????????#??? 1,8 +?????.?##???????. 1,1,8,1 +?????.?????.???? 5,2,3 +???????????..?#??.?? 4,5,4,1 +?#?#???.???#???. 1,2,1,1,1 +.??.#?????.?? 2,3,1 +??..??#??.????. 1,1,3,3 +#??#.?.?.????????? 1,1,1,5,1 +??#????.??#. 1,2,2 +???#??????.?#.?? 1,2,1,2,1 +???#??.??????? 4,2,1 +??????.?#?##?????#?# 1,1,12 +??????.??.?#???.# 6,1,2,1,1 +??.?.????##?? 1,2,4 +????.?????#?#???#? 3,11 +.#????????.?.#?#??? 2,1,1,1,6 +??#????#?????????? 8,4 +??.?..?.?#???#????? 1,1,1,4,1,1 +?.????.###??#? 2,6 +??.#??????.?? 1,6,1 +.?.?.????#???? 1,6 +..??????.#?.?.? 5,2,1 +????.???.?? 4,2,1 +???###????#????##. 1,6,8 +.#??#???????? 1,8,1 +?#?##????.?? 5,1,1 +??####?####?????. 5,4,1,1 +?#??.?##?#???? 1,4,2 +#?????.#??????.# 4,1,3,1,1 +??#??#?????##.#? 8,2,2 +????##??..??#? 1,5,2 +?.#?##?..?#???. 4,3,1 +.?.?#???.????. 1,4,1,1 +??##..?... 3,1 +????#???##??#??# 1,12 +????#?#?.##??#??. 1,2,2,2,3 +.#?##?????#????????. 11,1,1 +?#??.???.#.?#.? 4,3,1,1 +??#?##???#. 7,1 +?.??#????#??.???.? 1,2,1,4,1,1 +.???##??.?.?????#?.# 4,1,2,4,1 +.?#???#??.##?####?. 2,1,1,8 +..???..??#??.? 1,4 +?##???????#??#?? 5,8 +????#?.??#?# 1,1,3,1 +??.?.??#.?.##.# 2,1,3,2,1 +???#???#??#????? 1,1,1,6,2 +#.???##.?.????#.? 1,5,5,1 +??????????#?#?#?#.. 1,1,7,1,1 +????..???? 4,2,1 +??????##??#??? 1,1,2,3 +#????#????# 1,5,2 +?????#???????#??? 1,14 +?#???.???? 1,2 +??#?##??.??????????? 7,1,1,1,1 +?.?#??#???#????.??? 2,3,5,1 +????##??##??.?#.# 1,9,2,1 +???????#?. 1,1,2 +#???###..?.???#? 2,4,1,1,1 +??????????? 1,1,6 +??#.?#?????.#??? 1,1,2,1,2 +#.??#???#.?#??#??#. 1,5,1,1,1,1 +??????????? 1,1 +??#.?#?????## 1,1,1,2 +???##?#?#?#? 1,5,1,1 +????##??#??? 1,1,7 +#????#.?????. 6,3 +?.?#???#?.# 7,1 +????.?#?????#?.? 2,2,3,2,1 +.?.#???#?.. 1,6 +.??#????.?????.## 3,4,2 +??.##??##??...?? 7,2 +##???.##???#??# 2,1,3,2,1 +?###?#??##?.?#???##? 10,3,3 +??#??????????###.? 15,1 +???###.????.# 1,4,3,1 +??.???????#?#?#?? 2,2,4,4 +????.??###?#?.? 2,7,1 +?.#?#????.????????. 1,4,1,1,3,1 +.??.?#?#??#.?#.??. 2,6,1,1 +????#.?.??.?. 1,2,1,1 +.??#???#?#??????? 6,8 +?????.??#?#?#??? 1,1,5,1 +??#?.#?#??#.#??????? 3,6,4 +????#????????#??.?? 1,1,2,1,7,1 +???????#?# 2,1,4 +??.???????#???#?? 2,2,5,1 +?#??..??????? 2,5 +?#???#?.???..#? 5,1,1 +??##.??.?#????.#?? 3,1,1,2,2 +#.??#?????.?.??????# 1,8,2,2,1 +?????.??.?.???.??? 1,1,1,1,1,3 +????#?.?????# 1,3,1,2 +????#???????#?#?? 5,9 +??#???.?#????#??#?.? 5,4,5,1 +##?..??#??..#?# 2,4,3 +?????.#?#?? 1,1,4 +..#?##????????.?#?? 4,2,1,4 +#?#?.??#?. 1,2,4 +????.?????????? 1,2,1 +??#??#???#?.? 1,1,1,4 +????#.????##?? 3,4 +???.???.?.?? 3,1,1 +?????.#???#?? 3,7 +.???#??.??.???? 3,2,1 +?????????##???#? 1,1,1,3,3 +?###??.??? 3,1,1 +#?????.?????.??? 4,4 +??#?.?#???#? 3,3,3 +???#???#??#??# 4,1,4 +??###.?.???#? 4,5 +.????????.?????.???. 1,2,3,3,2 +#.#??#?#??#?#?? 1,2,3,5 +???#?#??#????#????# 1,8,6 +?.??#??##??.??????. 8,1,1,1 +????##.?????#??#?? 4,6,3 +.???.????#?##??? 1,10 +?.?????.????????.? 2,1 +?#..??.?#.? 1,2 +??#????.??#?#???. 1,1,2,6 +???#??????????? 9,1 +#.#??????.#??????? 1,1,1,2,8 +???.?????..# 1,1,1,1 +.?###????. 3,1 +#.?????.?#?##??#???? 1,2,1,11 +????.??#???##.????#? 1,1,8,1,2 +#####.#??? 5,2 +??.???##??? 6,1 +???#?##?#??#??#.???. 15,2 +?#??.?.#?.#.?????? 3,1,1,1,1,1 +????.??##?#..? 3,2,1,1 +#???.??????#.?????# 2,1,7,2 +#???.??.???? 3,1,1,1 +.#???.????.#?? 1,1,3,3 +..??#??.#.?????.?.# 4,1,5,1 +???#####????????? 1,6,1,1 +???????.??????? 1,2,2,6 +?#.?.#???##? 2,1,2,2 +?#???#??????? 7,4 +.?#?#?.?.?### 1,1,1,3 +????.??????? 1,6 +?#?#???##????????. 8,5 +?#???#?.???#??????. 4,2,3,2 +???.??##??##????.??? 3,4,3,2 +..?#?#???#.?. 5,1 +???#?????#????##?# 3,2,7,1 +????????##?#? 2,7 +??????#.?..? 3,1,1 +..#??????#????## 2,5,2 +??##?.??.??? 2,1,3 +??#????????#?? 3,1,5 +?##?.##???????#??#.. 2,10,1 +?.?#????????.?#. 1,3,2,1,1 +.???#?????? 5,1 +???????#??#.????. 4,1,4,1,1 +.?.?#.?.#. 2,1 +?#.?.??.???? 1,1,3 +#?#??????.?# 1,2,1,1 +#?#.#.???????#???? 1,1,1,1,1,6 +?????.??#??..??? 3,4 +???????????#..? 3,2 +?#?.???.??#.?? 2,3,2 +??##????.??? 7,2 +????#??### 1,7 +.???????#?.?????###? 7,8 +???.???#?.#???????? 2,2,1,2,5 +.???????##??????# 3,5,1,1 +??#????#???#???##? 6,1,1,6 +?#?.?.??###??. 3,1,6 +????..?#?#?????? 2,9 +??.??...?##?###.? 2,7 +???#????###???? 2,1,7 +.????#.???? 2,1,1 +???.???##.#?##?#?? 1,1,2,1,6 +???#?#???#? 4,2 +?.#??????? 1,1,2 +.?.?.#?..# 1,2,1 +?.#.???????. 1,5 +?.#.?.#?##????? 1,1,4,2 +???????????#?? 4,1,4 +#?##????#??? 6,3 +?.????#?#???? 1,5,1 +??????#?#?. 7,1 +?#??.?.??###?????? 2,5,3,1 +##?????##????? 2,7,2 +#??#?..?##??.???#? 5,3,1,1 +.#?.?####???? 1,5,2 +???..?#?.? 1,1,1 +#??.???#?###??? 1,1,1,8 +?.?.?##????#..?#.?.? 1,1,8,2,1,1 +????.??????#? 1,2,1,1 +#?..?#??????.??? 1,6,2 +??#?.?####?? 3,6 +#.???????. 1,1,1 +#???????.?.???? 1,4,1,3 +???#??#??? 5,2 +?????.?????#???. 1,1,5,2 +##??#?#?.#?????#?. 7,1,2,1 +?????#?#.?????#??#?? 5,1,2,5 +?.##.???##?#???? 2,5 +#????.#???.??.?????? 1,3,4,1,1,2 +??#?#??#?.???##? 1,1,5,1,3 +?.?????.??. 2,1,1 +.??.?#??????#? 1,1,3,2 +??#??.????.? 4,1 +??.????#?.? 1,2,1 +#??#?.??#??? 1,2,1,2 +??.?##?.????? 3,4 +?.????#??.#????#??# 1,2,3,1,4,1 +?.#?..???#.?. 2,4,1 +?#???#??.#??#? 2,3,1,1 +?.???##???..#??#. 7,4 +#??#.?#??.????? 2,1,1,3 +?#?##????.? 7,1 +.??????#???##?? 4,7 +.?#??#?????..??? 6,1 +??#??#????#####???.? 6,6 +.????##.#?.???????. 6,2,4 +???.##?#??.?.##???.? 5,3 +..?..?#??..#?# 1,2,3 +##.?.??..?? 2,1,1 +???##????.?? 4,1,1 +.??##.???? 4,1 +??..???#??.????..?? 2,6,3,2 +?#??#??#?## 4,5 +??????.?#..??. 3,1,1,1 +??#?#??#??.???# 8,1,1,1 +.?#?.??#?.#.?#? 2,1,1,1,1 +?.?..??????#??. 1,6 +?.?.????????????? 1,7,1 +#??#????#.??????## 4,1,1,8 +?#.??#.#??#???#?#? 1,1,1,1,1,6 +???.????#????#?#.#? 2,1,2,4,1 +.?#?.???#? 2,1,1 +##????????? 3,4 +?#????#?#??#?#?#.? 2,4,6,1 +?????????##? 1,9 +?..#.#??#????#?#?? 1,4,5,1 +#??#?????? 4,4 +#.?.#??#?#???????##? 1,1,7,1,2 +????##?.?#..? 1,4,1 +????????#?. 2,2,1 +??.????.?#??.?#?? 1,2,4,1,1 +.??????.??##?# 1,1,5 +???#?#?.#??.#???? 7,3,2 +??.??#?.?. 2,1,1 +.#..????.? 1,1 +.???##????#??#? 1,2,6 +?..???#??#?? 1,1,5 +?#.??????#??#? 1,1,1,5 +#?.???.#?.?##?.#??#? 1,2,2,4,5 +??.?#???## 1,1,3 +?????.?.#????.?. 3,5,1 +?#?.???#?#?#.???# 2,7,1 +??.?..??..????....?. 2,2 +???#??##?.??? 7,1 +???#????.??????.???# 8,1,1,2,1,1 +??#????????#?#??.? 5,4 +####????????.?.??? 5,5,1,1,1 +????#?.????###?#. 3,7 +.??????????? 1,1,1,1 +##?????.##?? 2,1,3 +????????#?#?? 2,4 +??.#?.??#.??#??##?#? 1,2,3,9 +#??#?#?#??##???.??.? 4,1,6,1,1 +.?#..?##???? 2,4,2 +???.???##?? 2,6 +##???..?#? 4,2 +?.????#??.#.??#??? 1,2,1,4,1 +?##?#.???? 2,1,1 +?.?#????.?##??#??#?? 2,1,3,6 +#?????.?#?? 3,2,3 +.??#?????###??.?##?? 1,6,4 +??#.?#?.?##????? 1,1,1,3,1 +.??#??#?#?#???#.#? 12,2 +?.??.#?#?????.???#. 1,8,2,1 +#?..??#??? 1,1,4 +?.????..???#????? 1,2,1,5 +.???#???#####?? 4,7 +?.#????#??? 3,1 +????#???#???????.# 1,9,1,1,1 +??.???.?####. 1,4 +??.#???.?#?????. 1,1,1,4,1 +??.#????????..? 5,1 +.??#?????????.???. 1,2,5,1,1 +#??.###..? 1,3,1 +????#.?#??.??? 3,1,3,2 +###??????. 4,4 +.????#??#? 1,4 +?.#????????#???#?? 1,5,1,2,1,1 +?.???.???##? 1,1,3 +?????#??#??.??#? 2,3,1,3 +.???.?#???#????# 1,6,1,1 +?#???.???#?? 1,1,4 +?#????.???# 2,1,4 +??#?.?#????.?. 1,4 +?????#?????.???????. 6,3 +??#?#?????#.? 1,3,1,1 +??###..????.??#?#. 1,3,1,1,5 +??.??#??#. 1,2,1 +?????????????#?? 6,1,2 +?????##??????.#? 3,2,2,1,1 +.???????##?#..??#?. 5,4,3 +.#..????.??##?????.# 1,3,8,1 +?#?.???.#???? 3,1,2,1 +??????.??#??.#???. 2,1,2,1,1 +.??#?.?#?? 3,2 +#???.?..?..???##? 2,1,1,6 +?#.#.??????#? 1,1,6 +??.?????.?...???#? 1,4 +.?.???#...??##?.. 3,4 +..?###..???#??.???? 4,2,1,1,1 +..???.????## 1,1,5 +..?#?????? 2,2 +.???????????? 2,1 +#??#????#??????? 5,5,1 +???#??.????#?#.?#??? 5,1,5,2,1 +?#?#??????#??##?.??. 6,8 +?.#?#.?.?????? 1,1,5 +.#???#?#??????.????# 1,3,1,3,1,1 +.??????#??????#.?? 2,5 +..#.??????#???? 1,1,1,3,1 +.#.??#????.? 1,1,1,1 +?#?#????#????.?#? 1,2,3,1,3 +??.#?????.?.?? 1,1,3,1 +?.#??????? 1,5 +??#.??????##??#??? 1,5,7 +.???????#????##.??. 14,1 +????###???.?.????# 2,6,1,1,3 +?#?#?.????.##. 4,1,1,2 +?#????.?##?#?#? 4,6 +?????#?#?.?####?? 1,4,5 +#??????.#??#???# 3,2,1,6 +#?.??.#??????.? 2,7,1 +?????.???.?????? 2,1 +??????????? 2,1,3 +?#??.??????. 3,5 +?##????.??...# 3,2,1,1 +?#.?.#???? 1,2,1 +##??????.?????? 4,2,1,2 +??#??#?????????#. 12,3 +????.?.#?## 3,4 +.??#?????.. 3,1 +??#.?.?#.#??#?# 3,1,1,2,3 +???#?.??????#?? 3,3,1,1 +??#?#?##.????#..? 8,1,2,1 +#??#???#?#?#??#? 1,2,10 +??#??##??.#?.??? 1,2,1 +??#????##?? 2,7 +??#?#.?#??.#??#??? 4,1,1,1,1,1 +....??#???..???#??? 6,4 +??##???????#?? 3,3,3 +?#????#?.??.## 2,4,1,2 +.???.????.?#??.? 1,1,1,1,4 +?###????##??#?#?? 12,3 +???#?.????#?? 5,5 +??##???????????. 6,1,1 +?????.?#?##???###? 2,1,2,2,1,4 +??.?.#?.?#???#? 2,1,1,3,1 +???????##???.??? 9,3 +?.??#??#??#?????? 1,12,1 +..??????#?#?????? 1,9 +??.?#?#???? 2,4 +?.?.??#??.? 1,1 +???#?.??????.?.?.?? 5,2,1 +?#?#?##???..??? 9,2 +?#?.???#?#?.? 2,3,1,1 +??????.??? 4,2 +?.??..?.?.????.??. 1,1 +..??##.??#? 2,1 +..??.????#. 1,5 +.???.?????#? 1,1,6 +?#??#??#??#?# 5,1,2,1 +?????#???..? 1,5 +.#??????????? 2,2,3 +??.#?.?.?. 1,1,1 +???????#??.???.#? 1,4,2,2 +????#???????.?..?? 1,3,2,2,1,2 +??.###?#?..?#???? 5,2 +#????##?#?##??. 1,3,1,4 +?.??.?#??. 1,1,3 +.#?.?????#??##???? 2,1,1,6 +?.?????##.??? 4,2,2 +.?.???##??? 1,4 +??#.???????#?.?????? 3,3,5,2,1 +???##?#??.??? 3,2 +??##?#????..# 7,1,1 +???????.???????.#.? 1,1,1,7,1 +?????#??#????#?? 8,4 +????#.#####?#??? 2,1,8 +???????#????##?#?.?# 16,2 +?.????#??.#??###?#?? 2,3,9 +????????#?.??????.?? 1,6,1,2,1 +?.#??#????.?#?????.? 5,1,7 +?.#.##?##??.#.??.. 1,1,6,1,1 +#????????.??.#?? 1,4,1,1,3 +??..?#?###?#??#???? 1,8,2,1 +.?????#?#???.??. 2,6 +?#?????.#????? 6,1,1,1 +.??????????? 2,1,1,1 +#?#.#??#?.????#??# 3,5,1,1,2 +?#????.#?##??##? 2,1,8 +?????#?.???### 3,4 +.????#???..?##?????? 5,7 +???#?.????#####???# 1,2,10 +????.?#??# 3,4 +???#.#?.??###.#?#? 2,2,3,1,1 +?#???.?????..#?. 1,1,2,1 +##???????## 3,6 +####.???.# 4,1 +?##???##?#???.#?#??? 10,5 +..??????.??.?# 2,1 +??????.#?.? 2,1,1 +.?#??????##?##. 5,5 +??..???##??#.??. 1,8,1 +.#????.#??. 2,1 +#??.#?.????.? 3,1,3,1 +#?#?????.???.?.?. 5,2,1,1,1 +????.??.??#?#??.?#? 1,1,1,6,1 +..?.?..???? 1,1 +?##??????#????.?? 3,5,1 +???.????#??## 1,2,1,3 +???????#?????#??? 4,2,3 +???#?.?.##?#?????.? 1,1,1,9,1 +.#??#?#??..?? 2,4,1 +?.??.???.??#?.?##?. 1,2,1,4,3 +???.?#??#??? 2,6 +.##??#????? 2,2,2 +???????????#? 3,1,1,2 +.????#.#??????#. 1,2,5,1 +?.##?????..???#????? 1,7,1,1,2,1 +??.#??#??????#?????# 1,4,1,10 +?????????.? 1,4 +???#?#?#.??.?????#? 6,1,1,3 +??????.?##?# 5,5 +#??..???#????? 3,8 +?#.??.??#?#. 1,1,1,1 +??.????.?#??.#? 1,1,3,2 +..#???.???.???.#. 4,2,2,1 +?????????.?#?.???? 1,3,1,2,2 +??##?????#?#???.???? 2,9 +?##??????#. 3,1,2 +.?#??#??#?????? 1,6,1,1 +.???#.???###????#??. 4,6,2,1,1 +?#??#???#?#????.? 2,1,5,3 +?#?.?????#.?#?#?? 2,1,1,2,6 +#?.#?.#??????#???.# 1,1,1,1,6,1 +?.?##????#?? 4,2 +####???????# 5,2,2 +???.?????#??? 2,1,1,1 +?.????#.#??#???? 1,2,1,5,1 +##?.#?#???#?????#??# 3,8,1,1,2 +..???##.?? 1,2,2 +??#????#?#?#?#.???#? 3,1,7,1,2 +.???.#?????# 2,2,1 +..?#????.?? 2,3 +?????.??????? 1,1,2,1 +?????###?#?..##???#? 8,6 +?#?.??????????? 1,1,1,1,3 +??##?.?##? 4,2 +#??##?.?????#????? 1,4,1,6,1 +????#??#??? 1,7 +???????#???# 2,6 +??##????#?#??????.? 1,2,3,1,1,1 +?.?.???##??#? 1,1,5 +.???#??.??.. 1,3,1 +???????###??#?##?. 1,12 +??.????.?# 1,1,1 +??#???##??..#?.#. 3,4,1,1 +??????.#?????#???? 6,2,2,2 +###..????#?#..????#? 3,2,3,2,3 +#?#????#??#????? 6,4,1 +?????.????.????.??? 2,1,3,4,1,1 +???.?#??#?? 2,4 +.??.???#??#???##??#. 1,6,3,1 +?.???.?.???? 3,3 +.?#?.??#???????. 3,9 +????##?#?.?#?.# 1,4,2,2,1 +??..???##?? 1,7 +?..????.???????# 3,4 +?.?..??#.? 1,1 +.??#??#?#?????.?? 7,2 +???##????.?#??.?.#?. 6,2,2,1,1 +?#?###??????.?#?.?. 9,2 +.????.????##..#?#??? 2,1,3,4,1 +??..??.??? 2,1 +.??#??????.?#?.? 1,1,3,2,1 +??..??#?##.?..? 2,5,1,1 +?.#.??#?#? 1,5 +.???#???.?????#??#? 3,1,1,2,2,1 +?????.?.???#?? 3,5 +?.??#???##?#???# 1,13 +??????.?..???????. 4,1,2 +????.#?#??#???#???? 2,4,7 +.??.??.?#.?? 1,1,1,1 +#.????#??? 1,7 +????????##???.??#? 3,6,1,3 +.?????##?##???????? 14,1 +.?.???.##? 1,3 +???????#?##??.? 1,1,1,6,1 +?#?.????#?#.#??.??# 2,4,1,3,1 +??.??.??#? 1,1,3 +.??##??.?#??#?#?#?.? 4,7,2 +??#???????#???# 4,1,3,2 +#??#????##???? 1,11 +?.#?????#?? 2,2 +.????#???###??#? 3,10 +????.?#???.#? 4,2,2,1 +??.????.?..#.??? 1,4,1,1,1 +.??.????#??.?.?#?#? 1,2,3,1,2,2 +.????????## 1,1,3 +?##?????#??#?##?## 9,1,2,2 +?##??????????.???? 7,1,1,1,1 +??.?????#.??.? 1,4,1,1 +.????#??#??#.?#????? 11,7 +??.?.?#?#???????? 2,7 +?????####????.?#. 9,2,1 +???????.??? 1,1,2 +?????.??..#?.## 2,1,1,1,2 +??????#?.??????? 2,3 +?????#.#?##??????#?? 5,6,5 +?###??.??????..??? 4,4,2 +?##???????? 4,2,1 +.??????#??????.?.?#. 13,2 +.?.#?#???#????#?? 1,4,5,1,1 +??????????. 1,6 +?.???????#?????#? 9,2 +#??.??.???????????. 3,4,2,1,1 +???#??..????#.??##?# 3,4,3,1 +????#??..?#. 5,1,1 +????#??.???.?? 1,4,1,1 +?#?????.????#? 1,2,4 +?#??#.??????#?.????? 3,1,2,1,1,3 +?.?????.#??? 1,2,1,1 +.??.????##??.??????? 2,7,1,2 +???#?....?????#???? 2,6,1 +.?????.??###?..? 5,4 +.#??###?#?.???? 9,1,1 +?#?.#????.?..??##?#? 2,1,1,1,1,5 +.??#??#?#??.#?.??.? 1,8,1,2 +??.??.?#???#?#??#?? 1,11 +#????###??##.? 8,2 +????.#?#???. 1,1,4 +??#??#?.#?#?##??# 1,1,1,7,1 +#?#?.???#??..#. 4,1,1,1,1 +.??#?#??#?.?? 5,2 +?.??????#?? 1,3,1 +???.?????# 1,1,2 +??#..#?.##? 3,1,2 +?.?.#?????????#?# 1,7,2,1 +#??#?#?#?..?.????? 4,1,2,1 +?.?#.?..#.?.. 2,1 +????????###.?#??? 2,1,1,3,4 +#???#?????#????...? 1,11,1 +.#?#?#????#????#?# 1,1,7,5 +?.?#.?.??.?. 1,1,1,1 +.?#.????## 1,1,3 +???.????#???.??...? 3,6,1 +?.?###???#????#?#? 1,5,1,2,1,1 +????????#??.? 5,2,1,1 +???.?.?.?? 1,1,2 +..?#?..???? 3,2 +?.#??#?####???#.?? 1,11,1,1 +??.##????#????. 1,4,1,2 +????????.?#??##? 2,1,1,1,3 +?????#.??????.? 3,1,1,2 +????.?#?..?# 1,1,3,2 +#??.???????#???#.? 1,1,2,1,6,1 +###????#?? 5,2 +##??#.??????#?.?# 5,1,4,1 +#?..?#?.??#?.?#? 2,2,3,3 +??????.?####? 1,1,6 +??.???????..?.???## 2,1,1,1,1,5 +?..???#???????#?. 4,5 +???#??.#?? 3,1,1 +??#??#?.???? 5,1 +?#??????#?. 2,2 +?.???.?????#?#. 1,2,1,5 +?.???????????? 2,1,1,2 +.?##?.???#?#? 3,4 +???.??????#??.#???? 3,7,2,2 +?#??????##??.?#?#?? 11,2,2 +??.?.????# 1,4 +????.?.?????????? 3,4,1 +???????#???##?? 8,3 +?..?.??#?????#?.?? 1,9,1 +.????#???#?.? 5,3,1 +..???##??##?#? 2,9 +?#????????#??. 2,2,4 +??..??#??#??#???##?. 1,1,1,5,4 +?????????#?????#??#? 2,1,10,2 +?????#??#?????#???.# 4,1,6,1,1,1 +??????#??# 4,2,1 +?#?..??.?#???#?##?# 2,1,11 +?#?.????#? 3,3,1 +??#?.???????? 2,1,2,1 +???.????##???.### 2,1,6,3 +.????####??.#? 1,8,1 +?.???#??#?.?. 3,1 +...??.???#?#?#?.? 1,6 +#??.?#?.?#.?????? 3,1,2,1,1 +#?????.##?#??.?. 2,2,5 +?????#?.????.?# 6,1,1,2 +?????#.?#.????? 3,1,2,1,1 +????#????.????? 3,1 +##???#?.?. 2,2 +?????.#?.#??#?#?.??? 1,1,1,1,5,1 +??#?.??..? 4,2,1 +?#????#???#??.. 2,1,6 +.?#?????#?.????? 8,1 +??#???..?. 1,1,1 +.?#??.??.#.??? 4,1,1,1 +?####?#?.??#.???. 7,1,2 +.##????.?? 2,2 +??.#.??#??.?#????#? 1,1,2,5,1 +???.????#?#?# 1,1,6,1 +?##????.#?#?.??#?#? 2,1,3,4 +#??##??#.???? 1,6,1,1 +##?##?????? 2,3,1 +???????#.##?##?? 2,3,6 +.???#???????? 8,1 +??#?##??..? 7,1 +#???????????? 2,5,1,1 +?#??##????#??? 5,6 +?##????????##?.??? 5,6,1 +??????.?#?#?##. 1,1,2,1,4 +????????.??#???#?? 1,1,1,1,2,2 +..?.#?.?????#?#? 2,1,5 +.?#???#?##?????#?? 2,7,1,3 +??#?.????????? 2,2,1,3 +?????????.??## 7,2 +?#.??.??#?#? 2,1,2,2 +??????????..??#???.? 1,5,1,2,1,1 +##??.???????..???.. 2,7,2 +.#?#?????????##??# 4,5,4,1 +.??.#??#?#?? 1,7 +?..?.##?.???????.? 2,4 +?.??????#??#??? 1,1,1,6 +##?#?.??#????????#? 5,2,1,1,1,1 +.?#?#?.?#??#?.?? 4,6,1 +????????#?????.????. 1,1,4,1,1,4 +.?????.??#?.??? 2,1,1,1,1 +#?#???#?#?? 5,1,1 +??.?#???##?#?# 1,1,6,1 +??????#?##?.?. 2,6 +.?#??##??.????## 8,1,1,2 +.?#?.?????. 2,3 +#??????#????####? 2,4,6 +??.#??#??#?##??? 4,1,2,1 +???###?.?? 1,4 +??.????.???.#?.??.? 2,2,1,2,1,1 +??..???.??? 1,1,2 +#???#?#???##?.??? 7,3,3 +.???#???##??..#?? 10,3 +?????#??????#??? 1,2,1,5 +??????????#???##? 10,2 +.??????###? 1,4 +?.??#??#??.###???? 1,5,1,3,1 +?????.?????#? 3,2,1,2 +#??.??#???#?. 3,8 +???#??????#?. 3,6 +??.?????#??????.? 1,4,3,2 +??##???##?#????.?#? 6,2,2,1,2 +?.??.????#??# 1,1,2,2 +?????..??.???#?#?.? 1,1,2,6,1 +?????##???????.? 8,1,1 +????..????#???.##?? 3,7,3 +?????#???#????#???? 2,11,1 +?????.???#.????.?? 1,1,1,4,1,1 +.?.?#???????.????#?? 9,2 +???#?#?#???#. 1,1,3,3 +##????#?.??.?????. 8,1,1,1,1 +?????????? 3,1 +.?#?.?.#??.. 2,1 +.????.??#?? 3,2 +#?#??###?#??#????#? 1,12,3 +##?.?#???.??# 2,3,3 +##?????#????? 3,8 +???.#..????.?#??#? 1,1,3,1,3 +??#.?????.?#?##? 3,3,1,1,3 +#?????????#????????? 11,2,1 +?#?##?????? 5,2 +?.#..?#.?????.???.?? 1,1,2,5,1,2 +??#????#.?? 8,1 +??#?#??#?#.? 1,4,1 +?.??..?.??#??? 2,3 +??????????.?. 2,1 +?????#.??#?.? 2,1,1,2 +.?#??##??#.?? 6,1 +??#??#?.?#??? 1,1,1,4 +#???##?????? 1,1,2,3 +???#.?#???????? 1,1,6,1 +?#????.?##???#??? 4,3,1,1 +..?.???.?.??##?.. 1,4 +????..??#??#??.?? 1,6,1 +?.#??####??.??????? 7,1 +??..?#.#??#??????? 1,2,1,2,1,1 +??.?#???#?##.??#?? 1,3,4,5 +????.???.?#?? 2,1,1,3 +??.#?.??.?..?? 2,1,1 +.#??###...#???... 6,2 +.?????????#.?#??#.# 1,1,3,1,5,1 +???????.?? 1,3,1 +??.##?.##???????#??? 2,3,5,1,4 +??#???#.??###???? 7,4,1 +???????#???.?? 5,1 +??#???#??? 1,1,5 +??????#?..???. 7,2 +????????#?????#? 2,1,9 +????..???#?#? 1,7 +.??????.???##? 1,2,1,3 +?????#????.??? 3,4,2 +?#???##..?????? 3,2,3 +?##??#???????#??? 2,2,1,5 +.??.???#####???????? 1,8,4 +?????#???.??????#??? 1,2,2,9 +.?##?#??##?..?? 2,6,1 +??.??????##???? 1,7,2 +.???????#?? 1,5 +??#?.?#?.? 1,2 +?#??????#??#????? 1,1,4,1,1 +??#?.??.???.? 3,1,3 +?#??..???????#?#? 1,2,2,5 +..?????.?#?. 3,2 +##.??#?####??#???#.? 2,2,7,3 +?.????????. 2,1 +????..??.#?##.?#? 1,1,1,4,1 +?#??#?#??.???#? 8,3 +???.?#??.???#????? 1,1,1,1,5,2 +?.???????? 1,1,4 +#????#????#???.# 1,1,6,2,1 +?#?#???#.#?? 7,1 +##???#?.????????? 2,1,1,9 +#????????..?.?#? 1,1,3,1,1 +.?.????.?????.?? 2,4 +????#.##?? 3,3 +?.?????.?????? 1,5,1,1 +#?.????#???? 2,1,4,1 +?.??.???????## 1,1,2 +.????..?###?.. 1,4 +??#?.?.?#. 2,1,1 +.?#.?#.??. 1,1,1 +.??##??##??#?#? 8,3 +#??.#??.??.#? 3,3,1,2 +#?.?#.#.???#?#??#?.# 1,1,1,8,1 +??????...#?????.# 1,1,1,4,1 +.#.#??##.??##???? 1,5,7 +???#?????# 4,3 +?##????#??????? 6,2,2,1 +#?????.?##.?.??? 3,1,2,1,1 +?..?.#????.? 1,1,1,1 +.?#?.#????#???#??? 1,12 +?#??#?????##? 4,4 +.??.??#?#? 1,5 +??.????#????#??? 4,6 +????#????#. 6,1 +#?##???#?.?#?? 9,1 +#??#??.??#.?..??? 2,1,3,2 +#???????#?#?##?? 4,7,1 +???.?#???##..???#? 2,3,3,1,1 +?????#.?????.? 2,2,3 +??..?#????.#?. 2,2,2 +.???#???..??##?#? 6,1,4 +?##?#.#?????..??? 2,1,3,2,3 +.#???#?????.#.?? 1,1,5,1,2 +#?????#??.??????. 2,5,1,3 +??.?###.###??? 1,4,3 +???.??..????#? 3,1,1,1 +?.?.?????##? 1,1,1,2 +????.?????#?.??? 2,1,3,3 +??#?.?#??#???.??.? 4,5,2,1,1 +###??.#?.?. 5,2 +??#..????#?.????? 2,5,2,1 +????.????? 2,1,1 +??##?.?.????.???? 4,3,1,1 +??????#???.?. 1,2 +.??#?#?#??#??#? 1,1,9 +.???????????#???. 1,4,2,2 +??.?.#??###??????? 1,11,1 +#####?????? 6,2 +.??.???#??#??. 1,3,3 +?????#.?.?#? 2,1,1 +?#????##?#??.???#?? 3,6,4 +?..#?.?#??#???.#??#? 1,1,2,2,5 +#????.??#.??#??.?? 1,1,1,2,5,1 +?##???????#?#?????. 2,9,3 +.????#??.?#?? 4,2 +?????##?#?#?#? 1,10 +?????#??????. 1,1,4 +?.??#??##??##??.? 1,5,3,1 +??#?##.?#??.?#? 5,3,1 +??#??#?#???#?#?#. 3,1,1,4,1 +????#?.?##?????#???# 1,3,5,3,1 +.??#????.?##???#?? 3,7 +???#?.##?.?##?..???? 4,2,4,2 +??.??????????#. 1,2,3,1 +???#???#?? 2,2,3 +.?#?##?#?#??.??#??#? 9,6 +????#?#?#??#?.???? 4,3,2,1 +??#?????????##?.??? 3,2,4,2 +???????????. 1,1,1,1 +#??##???????#?? 9,2 +?##?####??#???.?? 8,1,1 +??##?.??#?#??.? 4,7 +????#?????##??.??? 1,3,7,3 +?.?#?..??.??#?.??# 1,2,2,1,2,2 +??#?#?#??.??? 7,1 +?.?#?#..??? 3,1 +?#..?.#?.?. 2,1,1 +???.?#??.??. 1,3 +..???.#???##?#.? 2,8 +?????#.??# 1,1,1 +??###??????#???#? 8,5 +#????.#?#???#?##?#?# 1,1,1,1,1,9 +?????????.??? 2,1,3,2 +.????..??.? 1,2,1 +?#??.?#.#?.????.? 4,2,1,2,1 +?#???##?????????? 1,5,1,1,1 +.??.???##?????#?.?#? 1,12,1 +??.????.?..?.???. 2,1 diff --git a/12/src/main.rs b/12/src/main.rs new file mode 100644 index 0000000..b9bd11a --- /dev/null +++ b/12/src/main.rs @@ -0,0 +1,109 @@ +use itertools::Itertools; +use std::fs::File; +use std::io::{BufRead, BufReader, Lines}; + +// BOILERPLATE +type InputIter = Lines>; + +fn get_input() -> InputIter { + let f = File::open("input").unwrap(); + let br = BufReader::new(f); + br.lines() +} + +fn main() { + println!("Problem 1 solution: {}", problem1(get_input())); + println!("Problem 2 solution: {}", problem2(get_input())); +} + +// PARSE + +#[derive(Debug)] +struct SpringRow { + springs: Vec, + spans: Vec, +} + +impl From<&str> for SpringRow { + fn from(s: &str) -> Self { + let (springs_s, spans_s) = s.split_once(' ').unwrap(); + SpringRow { + springs: springs_s.chars().collect(), + spans: spans_s.split(',').map(|x| x.parse().unwrap()).collect(), + } + } +} + +impl SpringRow { + fn possible_arrangements(&self) -> u64 { + let mut permutations = vec![self.springs.clone()]; + while let Some(cur) = permutations.iter().position(|perm| perm.contains(&'?')) { + let perm = permutations.remove(cur); + let rep_pos = perm.iter().position(|c| *c == '?').unwrap(); + + let mut new_elem = perm.clone(); + + new_elem[rep_pos] = '.'; + permutations.push(new_elem.clone()); + new_elem[rep_pos] = '#'; + permutations.push(new_elem); + } + + permutations + .iter() + .filter_map(|perm| { + let groups: Vec = perm + .iter() + .group_by(|c| **c == '#') + .into_iter() + .filter_map(|(key, group)| if key { Some(group.count()) } else { None }) + .collect(); + if groups == self.spans { + Some(()) + } else { + None + } + }) + .count() as u64 + } +} + +// PROBLEM 1 solution + +fn problem1(input: Lines) -> u64 { + let rows: Vec = input + .map(|row| SpringRow::from(row.unwrap().as_str())) + .collect(); + + rows.iter().map(|row| row.possible_arrangements()).sum() +} + +// PROBLEM 2 solution +fn problem2(input: Lines) -> u64 { + 0 +} + +#[cfg(test)] +mod tests { + use crate::*; + use std::io::Cursor; + + const EXAMPLE: &str = &"???.### 1,1,3 +.??..??...?##. 1,1,3 +?#?#?#?#?#?#?#? 1,3,1,6 +????.#...#... 4,1,1 +????.######..#####. 1,6,5 +?###???????? 3,2,1"; + + #[test] + fn problem1_example() { + let c = Cursor::new(EXAMPLE); + assert_eq!(problem1(c.lines()), 21); + } + + #[test] + fn problem2_example() { + let c = Cursor::new(EXAMPLE); + assert_eq!(problem2(c.lines()), 0); + } +}