From 50f217eea084761c410d3ff3ef10b4324db07b82 Mon Sep 17 00:00:00 2001 From: Andy Teijelo Date: Fri, 15 Dec 2023 19:51:58 -0500 Subject: [PATCH] day 13 part 1 --- example.txt | 21 +- input.txt | 2367 +++++++++++++++++++++++++++++---------------------- src/main.rs | 164 ++-- 3 files changed, 1455 insertions(+), 1097 deletions(-) diff --git a/example.txt b/example.txt index e925935..3b6b5cc 100644 --- a/example.txt +++ b/example.txt @@ -1,6 +1,15 @@ -???.### 1,1,3 -.??..??...?##. 1,1,3 -?#?#?#?#?#?#?#? 1,3,1,6 -????.#...#... 4,1,1 -????.######..#####. 1,6,5 -?###???????? 3,2,1 +#.##..##. +..#.##.#. +##......# +##......# +..#.##.#. +..##..##. +#.#.##.#. + +#...##..# +#....#..# +..##..### +#####.##. +#####.##. +..##..### +#....#..# diff --git a/input.txt b/input.txt index b82b6e0..966b536 100644 --- a/input.txt +++ b/input.txt @@ -1,1000 +1,1367 @@ -.??.?#??##???. 1,6 -?#???.#??#?????.? 3,1,3,1,1 -??#????#??#???.?? 4,7,1 -??#?.?#?#???#?#?? 1,11 -?????????? 1,4,1 -?#?#????..?????? 6,4 -?#?#?.#?#???????..? 5,1,1,3,2,1 -?.#??#??.??????.? 6,1,1,1 -##???###?.##?? 2,4,2 -???.#??#????.??? 3,7,2 -????#??..?# 1,3,1 -.?..#????????#????? 1,5,6 -?#..??##??.??? 1,5,2 -?#???#???# 1,1,2 -#???#??..?????.??.?. 5,1,1,1,2,1 -??#??.?#??????. 2,2,1,1,1 -??????.???..??#?? 1,2,1,4 -.?#??#???#??#?????. 12,3 -??#???#?.?##?.?? 6,3 -?#?#?.??#???? 3,1,1,1 -??#???.#??.#. 3,2,1 -??#...??.. 3,2 -#?#.??????#.??????? 3,2,1,1,7 -?#?#.?????#???? 3,5 -?#??.???.?.?.???? 4,1,1,3 -????????.##?#.???? 2,1,4,2 -?#??#.??????????#? 4,3,1,3 -.#?#?.???..? 3,1,1,1 -?..##.???#????. 2,2,2 -.#??#?#??#?.? 9,1 -???.??..?#??#?? 1,1,2,1,1 -.??#??#..#????? 2,1,1,2 -.???#??..??????####? 4,2,7 -????#?.??. 1,1,2 -?#??#?#?..???#?.?.?# 1,5,1,1,1,2 -??????#???.?.??.?#?? 10,1,2,1,1 -???.????..? 2,1,2 -??.#???????? 1,1,4 -??.??#???.?????#? 1,1,1,1,6 -?..????##.##?#?????? 6,6,2 -##???#?.??#.???? 7,2,3 -????#??#??#? 1,6,2 -.???.??..#..?#??? 1,1,1,1 -?.???.?.???????? 1,1,1,3,4 -?.?????#?#.?????#??# 7,1,5 -?????##?#?? 2,6 -???.#?#????#. 1,5,2 -????...?#?? 1,2 -.????.?????#. 2,3 -?.?????##??###?##??# 1,1,11,2 -#??..?#?.???#??. 2,1,3 -#?.???????#???#. 2,1,1,1,3 -?#???..#?? 5,3 -????#???#.?#???#?.#? 2,2,1,1,4,2 -.????#??##???#?#. 8,4 -???????????#?.??#. 2,1,4,1,1 -?.#?#??.??####??? 5,8 -?#?#?#???.#.?#. 8,1,1 -?.??.????#?.??.? 1,5,2 -#??.?#...? 1,1,1 -??#?#???#??#.????.?# 8,2,4,1 -.?#?####??? 7,2 -???#??#?.??? 4,3 -..????##????????.? 8,2,1 -???#?#?##?.???.? 7,2 -?#???#?#.?.??#.?. 6,1,1,3,1 -???.?#?.?? 1,1,1 -???????#..# 4,2,1 -?.?#.?????? 1,1,2 -.????????#???##?#? 4,1,4,4 -???#?#?????#?#?? 1,13 -#????#????.#?#???#? 2,5,8 -.????#.#??. 4,2 -??#????#??? 8,1 -?.##.??#??? 2,4 -#????#?#?#?.?????#? 1,1,1,4,1,3 -????#????.?????##??? 2,5,1,1,2,1 -..???#??..?#? 6,2 -?#?.?.##???????? 3,1,2,4,1 -.?.???##?????# 1,5,1,1 -?.#????.??? 2,1,1 -?#?#?#.???..???.??? 5,1,3,3 -.?.???#??#?.???#? 1,6,4 -?#???.?#?#.????#? 5,4,1,2 -.?#????????...#??? 2,2,4,4 -?????.???#? 1,4 -????#?.????.?#??.??? 5,1,2,1,3 -????????.? 2,2 -..??#???#?#.?#? 9,1 -????????#????#????? 5,3,1,1 -#?????#??????. 1,1,3,1 -?..#?.#???? 2,4 -..#?????????#?#???? 1,13 -?.?#.???#?? 1,2 -#?.#??????????#? 1,2,1,2,3 -.???????.?#.?? 1,3,2,1 -.????.?#?????##?? 3,3 -????###?##??.??#???? 1,8,5 -#?.?####????.? 2,6,1,1 -??.##???#?????? 1,6,2 -??.??#???#?#? 1,3,1,4 -.??.???.?#?#??? 1,2,5 -??.#.?#???.##??? 2,1,1,1,5 -???.???.??.?????#? 1,1,1,1,3,2 -?#?.?#?##???#???#??? 1,11,2 -??#????.?. 1,1 -.?#??##??#???.?? 10,1,2 -?#?#?.?#.? 1,1,2 -????#???????#. 3,1,1,1 -.??#?..??.???.??? 3,1,2,1,1 -.?#??.???#? 2,1,1 -?.?#.??##?????????? 1,1,8,1,1 -?.?????.??#?? 4,1,1 -?.??.#???? 1,4 -???#???..???.? 2,1 -.??????#?#??.?.? 2,5,1,1 -#??#??..?.?.???.#?? 6,1,1,3 -.???.?#?#??.??#???? 3,1 -.??#?..???? 4,2 -?.##???#???#??#.?? 2,8,1 -????#.#.???.???# 1,1,1,2,4 -#???????????.???#.? 6,1,3,1,1 -?#?????.??##??. 1,1,1,1,2 -?..????..?#? 1,1,1,3 -.??..????.?#?? 2,1,1,3 -????????????. 1,1,7 -???.?.??????#.?? 1,1,1,3,1 -?##...?..##??. 2,3 -.???##?????? 1,5,1 -.??#?.??????#???#?? 4,7 -.?#???.?.?? 4,1 -.???###???#??..???? 8,1 -???.?????#??##?.. 3,5 -??##??#??????? 5,2 -.?.???.#..? 1,1 -??##.??#??#???. 4,6 -?#????#..##?#? 1,3,4 -.?.?.??..? 1,1,1 -??????????#??#. 1,1,1,1,2 -??##???.???.????. 1,5,3,1,1 -???????.?????#?##??? 7,9 -##..#???.?#???#?? 2,1,1,4,2 -????#??#??????? 8,1,2 -.##?##???????.???# 7,1,2,1,1 -#.?..????#?#. 1,1,1,5 -???#??#????.??? 2,1,1,1,1 -#.??#.???#?##?#????? 1,1,1,3,4,2 -???###?#?.???.??? 6,2,1,3 -???#?#???????? 8,1 -??????.#???.?..??.? 3,1,3,1,1,1 -???#?##??#?.??.#.?? 1,8,2,1,1 -??????##???.#??#?? 8,2,3 -??.??#??.??.# 2,1 -??#.???#??????#? 3,3,4,2 -#?..???????#??#???? 1,5,6,1 -.??####??.???. 5,2 -.??#???????#? 1,1,4 -.?????.#?#???#?# 1,1,3,1,3 -.??#??#???..#.?.?# 1,1,4,1,1,1 -??.??????????.? 2,2,3,1 -???#.?.???##?## 4,8 -.?###??????#??#??? 5,7,1 -??.???.??#????#??? 2,2,1,1,5 -#???????.?#.#???### 3,1,2,1,3 -.????#???..?.#?? 4,1 -???????????.?#.?? 3,2,4,1,2 -.??#.#?.?.??##?.? 3,2,1,4 -??#??.?##???#? 2,3,2 -?????###?.? 2,5,1 -#?#.?##????#???? 1,1,3,1,5 -???#??#????????## 9,2 -?#??##??##???##??.?? 2,11,1,1 -???.?#.???? 1,1,1 -#???#????????.#? 1,4,1,2,1 -?#??.??##? 2,4 -.###??#??#??#?# 3,10 -#.????#?#??????#?? 1,2,4,2,2 -??..????.? 1,1,1 -#??##?..??????? 5,1,1,1 -##????.?.##???. 3,1,5 -???##.????#? 5,1,3 -?.????.##.? 1,2,2 -?#????##??????##???? 1,2,3,8,1 -???#?????.?..? 3,1 -?#?#??.#??#?.? 5,4 -??.?###??????? 1,4,1,1 -..##????#???#???? 4,6,3 -?????#??????.???# 7,3,1,1 -??#???????. 3,1,1 -??????##??????. 1,1,2,1,1 -?????.??????. 1,1,2,1 -?.?.??.?#?????#?##.# 1,1,1,8,2,1 -?.#???????#?? 2,1,3,1 -.#????..??#?..?# 4,1,1 -.??.??#??? 1,1,1 -##??###??.??? 8,1 -????#???????.????? 6,1,1 -#?#??#??..????? 1,2,1,1,5 -.?#????.?.??#? 6,1,1,2 -????..?##.?.?.????#? 4,3,1,1,1,3 -.#???????##??.???#?# 5,6,4 -##??????#?..#??? 2,1,5,1,1 -#????????#?#.#?.? 1,1,1,4,1 -#??#???#.?????#???? 8,1,1,5 -#?.?#??#?.? 1,2,2 -?.#?#??.?????..? 4,3 -?#?#???.?? 4,1,1 -???????#????#???.? 1,2,2,2,4,1 -????#??..?.??#?#?. 5,3 -..??#?#????????#???. 5,1,3,1,1 -?.#???.???. 1,2 -??????????.?.??? 6,1,1,1,1 -?#??????.? 3,2,1 -.?.##???## 1,7 -?.?????#??##??##???? 1,16 -??#????##?#??? 1,1,7,1 -.?????????? 5,1 -??????????.? 2,1,1,1 -##?.?????. 3,1 -?#?..?.???? 2,1,1 -#..???#??#???# 1,2,8 -??##?????#????? 3,9 -???#?.?##. 3,3 -??.??#?#??##?#.# 9,1,1 -#.??#?#??. 1,3 -.??#????????????? 3,1,2,3 -??#??#???.?.?? 7,1 -??#..##????#??#????? 2,10,2 -#?###????##?..??? 11,2 -.???#.??#.?##.?? 1,1,1,3,1 -?#??????#? 5,1,1 -?.?##??#??????? 5,4 -.?????.?#??.. 2,2 -.??.?#####?????##? 7,4 -??????.#?.. 1,1,2 -??#??????..?? 3,1,2 -??????????# 4,2 -?.?######???. 1,7,1 -????#?????????# 10,2 -.???#?#?#? 1,2,4 -?##????.???#?#?? 5,5 -.??#??.?#?#?.##? 1,4,2 -#.????????#????. 1,6,2,1 -?###????.?#?#??#??.? 6,9,1 -?..??..??###. 1,2,5 -?????#?????????.??. 1,1,3,6,2 -?.?#??.??? 1,1,2 -.??.?????????. 1,5,1,1 -????#??.?????## 3,6 -##?#??.?????. 4,1,1,2 -??#????#??.????#?. 8,1,2 -.???????#.?.?#??#??? 1,2,2,1,7 -?#.#???.?#?????# 1,1,1,1,5 -??#?##?.??# 6,3 -??????.##??#??###? 1,1,1,5,4 -???#???????##??. 2,1,1,2,1 -?????#..????#??##? 6,1,3,3 -????#??#??#??????##? 11,3 -.##??##?????.#?#?? 11,1,1,1 -?.?#?.?????.?? 3,4 -###?.????#?? 3,1,3 -????..?##?.??????#?? 3,2,9 -?#?.???#??#. 2,1,4 -??##?#?.#.???#??? 6,1,1,1,1 -#??????.???.#?#??. 4,2,1,1,3 -.?#???????.##? 7,2 -???#???.?.?#?#?. 4,1,5 -?.?????#.??#???# 6,3,1 -.??#??#??.?#??? 6,1,1 -??#????????. 5,1 -????????????? 1,4,1 -?#??#?####?.??.?#... 10,1,2 -#????#??????#???.?? 1,1,4 -?.???.???### 1,1,1,4 -?####??.?.??????. 7,4 -#???.#?#?#?#.?#?? 2,7,2 -???..?.??#???. 1,1,6 -???????.????####??.? 4,1,10,1 -??.?#?????????..?.# 2,11,1 -???.???#??.. 1,1,3 -?.?#?#??#????#?? 1,2,2,3 -???#????.?#??. 3,1,1,1 -.????????? 1,1,1 -?.?.????##?###??.?? 1,11,1 -?#????.#?#??? 1,1,1,2 -#.?.?..#?#?#????? 1,1,3,4 -?#?.??..?##?##????? 3,10 -?????????#????.#???? 1,7,1,2,1 -?#????????.#?# 1,4,2,3 -.????????#?. 6,2 -?.?#.??##.#??.?#?? 1,2,1,2,1,2 -.?????#??.?#?? 2,3,2 -#?.##?..#.???????? 2,2,1,5 -?????.?#????? 1,1,1,3 -???????#?##??#??? 1,10 -???##?..#? 1,3,2 -???#???.???.?? 2,1,1 -#?.#..?.?? 1,1,1 -????#???#?. 2,6 -##.?.????#??.?#?## 2,1,1,1,1,5 -??...?#??##.#???? 2,5,1 -??????..?#???? 3,1,1,1 -?#?.?##???#?.???? 1,8,1 -???##?#???????.#? 5,6,1 -?????..?#????# 1,1,2,2 -?###..??#? 3,4 -..?#??#????# 5,3 -???.???#????. 1,1,6 -??#?.??#?.???. 1,3 -?..????...?.????? 4,1 -#.??#??#?.#??#??#?# 1,6,1,7 -?.????..?.?? 1,3,1,2 -.??#???#??????#?.?# 1,1,10,1 -.#.?.??#?.?.#?? 1,1,2,1 -?.?.??.#???#? 1,1,1,3 -?.???.???.?? 1,3,2,2 -.????.??????. 1,1,1,2 -?.?#??????.??#? 1,5,1,1,1 -?????????#. 1,2,1 -.?.?#??##???? 1,6,1,1 -?#??#??.#? 1,1,1 -??.???????#??#.? 2,1,1,5 -#?.#??.?.##..##?.?. 1,3,2,3,1 -????????#?.##?#? 2,1,2,5 -?#?????.#?#.??#? 3,1,1,1,1 -????#?#?????#? 2,3,4 -?.???????#. 1,3,1 -???????##?#???.????. 14,3 -??????#?.#?#?? 6,4 -?##?#.??##?.# 5,4,1 -#??.???###?????? 3,1,3,1,1 -?#?#??.???#?#??? 5,2,4 -.???#?.#?####. 1,1,6 -.???.?#?#??.# 2,1,2,1 -#.#??#????? 1,6,1 -?.??.???.. 2,1 -?.??.#?##.?????#???. 1,4,8 -.#?#?#?#???..?#??# 9,4 -.#.?#?#??.# 1,6,1 -#?#.???#?????? 3,1,7 -??#?###??#?#??#??? 1,6,1,1,2,1 -??.?##???#?#?.? 1,10 -.#?##???#???##???..# 1,11,1,1 -??.#?.????#???# 1,1,7,1 -#????????#? 1,6,1 -????.#?.??#???#.?# 1,1,1,4,1,1 -.???#?#??.?.???# 7,4 -???##??????..## 8,2,2 -?#?#?.?.?##?## 5,5 -?.?..???.. 1,2 -.?.????..# 1,3,1 -#??????#??.?#?###??? 1,1,1,1,1,8 -.??#??.?.???? 4,1 -??????##?.. 2,3 -?#.????.#?# 1,1,3 -.?????..?????#. 2,1,2 -????#?#?##.????? 10,1 -?????.????#?? 3,1,1,1 -.??????.??.??..? 6,1 -?????????#??#???# 1,2,3,5 -#??####??..??#?.. 9,1,2 -?####??##?.????? 9,1 -?##??#??.???#. 6,4 -#.#?????????.#????? 1,1,1,1,1,5 -??#???????###??#??? 5,8 -#??##?????#????#? 1,7,1,1,1 -????????#?.????.???. 1,1,3,1,3,3 -??.??????? 1,2,1 -.?####???.???#?.? 4,1,3 -.???##??#?????.???? 13,1 -???.??#??#?????????? 1,1,3,7 -?????..??.?? 1,1,1,2 -?#???#??#??#???.??? 7,6,1 -???#???#?#??????. 6,1,2,1,1 -???????.?????? 1,3,2,1 -..#???#???#????#? 1,10 -??##??##???.???# 6,1,1 -#?#???###?##?.?????? 1,1,1,7,1,1 -??#?.?#?.???? 1,2,2 -.?..???#.? 1,4 -#??????#.?#?.##???## 3,1,2,7 -...#??#??#?##??.. 10,1 -.#??.??????????? 3,2,1,1 -?#??#?#?#????###??. 2,15 -?#????#??.?????? 2,4,6 -??.??.????##. 1,1,1,4 -.??#???.?.?????? 4,1 -?#??.??##??#??.? 2,8 -????#?#??#???##????. 1,15 -.???????#..?#?? 2,4,2 -?.?#?#?.#.?.??? 1,2,1,1,1 -???????#?##?#??? 1,6,2,1,1 -#???#####?.???#??. 10,4 -??????#.?????.? 2,3,4 -?.?#?#?????.? 4,1 -?.#?#?..????????#. 1,4,1,3,1 -.?????????#??##?? 3,1,7,1 -#.?.?.???##.??? 1,1,1,2,1 -?#.??##??.?..#? 2,3,1,2 -?#.?.????????#? 1,2,6 -???#?.??##?#???#??. 1,2,1,10 -???????.?#????? 6,3,2 -????#?.????.??.? 1,2 -#???.??#.??? 1,1,3,2 -???.??#??#????? 1,2,3,1 -?#?#????#?.?? 2,1,4,1 -.#???????#??#? 3,1,5 -?#.???.#.????#? 1,2,1,5 -.???#???##.??????.# 6,2,1,1,1,1 -.??????????? 1,1,4,1 -..??????????#?#?#?#? 6,10 -???.#????#.# 1,3,1,1 -#???????##?#..?? 1,1,5,1,1 -??#???#?#?.??...??# 10,1,2 -?#???#??..?????#???. 7,3,2 -???????????#??. 1,2,1,1,1 -#????#???##??.?.?#.? 1,11,2 -?????.??.???.?# 5,1,3,1 -?.#?#?#?#?#?#??? 1,1,1,3,5 -??.????.???? 2,3 -???????#??#? 1,3,2,1 -???.??#???#? 1,4,2 -??.??#?#.#????? 1,1,1,2,3 -???#????.?????.?.??? 5,1 -???#?.???##???####. 2,10 -.??#..?.???? 2,2 -?#.???#??##??? 1,7 -?????????##?? 3,1,3 -.?#?#?.?.#? 4,1,2 -.?.?#??.????#?? 1,2,1,3 -?#?#?????.??#?.??? 7,3,1 -.#???????#????.#..?? 3,4,3,1,1 -?.?#.????.#??#???# 1,1,1,1,6 -??##??#???#?#..# 4,7,1 -????#????. 5,2 -??#?#?.?.?..??? 2,1,1,1,1 -##????#?##??? 2,1,1,5 -??#..?#?##??? 2,8 -?.??#??????#?? 6,2 -??.?.???.??? 1,1,1,1 -?.?????#??? 1,4 -??#???????#??????? 1,7,1,1,1,1 -????..??.?????.#?? 2,1,1,1,1,3 -?#?#??.???????? 2,2,6,1 -??.??#?????##?? 2,2 -???.???????????.?? 1,2 -??##??????#?#??.# 2,1,2,3,1 -??????#??#? 3,1,1 -??.?????##????##??? 2,14 -?#?.?..??? 1,3 -?.??????#? 2,1,1 -??.??##.?? 2,2,1 -.??.??.??? 1,1 -.?#????#??. 2,3 -???????#???.#? 3,2,1 -??#???..?? 6,1 -...?#???###????? 2,4 -#?.?.???????? 1,1,1,2 -?????#????#??.?? 7,2 -.?????#??.???????? 4,3 -?###??.?.?.?##??#?? 3,1,1,7 -??#?#?##??...??? 9,1 -?????#?#?????.?##? 12,3 -???????????..#??. 8,3 -?#??#?##???#??? 7,1 -??????###??## 1,10 -?#??????#????#####.? 2,2,1,8,1 -.?###???..??#???.? 4,1,3 -?.???????? 1,6 -???#??#.??#?##??.? 4,2,7 -??.#??#??##??#?##. 2,2,11 -??.??#?#... 1,4 -.?.#?#?.?????#? 1,4,5 -.?????.???#?#?#??#? 4,9 -??.#?????#?#????? 1,12,1 -???#???#????.#???? 1,7,1,1,1,1 -??.?????##?.?..#?#.# 1,1,3,1,3,1 -.?#??##?????###?# 1,7,3,1 -#???????????#????#?? 1,2,1,1,1,7 -####??##???#??. 9,4 -???#???#?.??#? 4,3,1,2 -???..#???? 1,1,1 -?#????#?.????.??#? 3,1,1,2,1 -.?#????##? 4,4 -??.???.??? 1,2,1 -.??##??.????#??? 3,1,8 -????????#? 1,4 -.#????#???????.?.? 6,1,2,1 -??.??????##??#?#?#? 1,1,8,3 -??????###? 1,3 -???#..#??#.??.?#? 4,1,2,1,1 -?.##??#????..##?? 7,2 -#??#????#?? 5,2 -.#??.?#?#???? 2,3 -?.??#??##?????.??#? 3,2,2,3 -?.#???##????.? 10,1 -.##???.#??? 5,2 -??#?????.?#.???.?# 2,2,1,1,3,1 -?#?????.#??#???#???? 1,10 -?##?#..???#??#??#??? 3,1,1,6,1,1 -?.?????#?????????.. 2,3 -????#??#????#???. 1,12 -.#?????#????????###? 1,11,3 -#?#??.??###?? 3,1,3 -.#?????.??##???#??? 3,10 -.#?.??#??? 2,1,1 -.???##?..?. 5,1 -?.??#??.???? 2,1,2 -?.??.#?.????#?????# 1,1,2,1,9 -.??????#?#????.?#?. 8,1,3 -?##???????.#. 3,3,1 -#???????#.???? 9,3 -?#???.##??#??? 4,7 -????.?#??.?.#?#??? 2,4,5 -.?????#?#??#?????# 7,1,1,1 -#??..???#??#? 3,4 -???.??##?????##??#?# 3,7 -?#?#.??.?#.?#.? 1,1,1,1,1 -#.??????????? 1,4,3 -...???????##??#??#.. 1,12 -.???###????#??##???# 1,15,1 -???.?.?#?##..#? 3,5,2 -..??????.??#??. 2,2,4 -##???#?#?????? 8,3 -???.???#??? 1,4 -???.??.?#?????.#???? 2,1,3,2,1,1 -???#?#??#.? 1,6,1 -??###?????#?##.???# 10,2,1,1 -???##???..#??? 4,2 -?##??#.?#?##? 5,5 -??????.?#.?.?.? 1,1,2,1,1 -???.?#?#?.?.? 1,1,2,1 -???.??#?.?? 1,2,1 -?#????.?#.??? 5,1,1 -?.???.??#? 2,2 -??.??#??????#????##? 1,16 -????.????.??.?.#?#?? 1,4,1,1,1,1 -.??#??????? 1,3 -???.?????.. 1,1,3 -#??#?..???#?..?? 4,1,2,1 -??????#.????? 7,1,2 -?###???..?#?? 6,2 -?????????#??#.?? 1,1,4 -.????#????. 4,2 -.?#.?..??#.?##??# 2,1,2,2,1 -#?#?????#??#?.?#.#? 6,1,2,1,1 -????.#???#???? 2,1,2,1 -???#????????..#?? 8,2 -??##?#???.?#?..???. 6,3,2 -????.??#??#.?#??? 4,6,3 -???##??##?? 5,3 -???????.#..#???# 3,1,1,1,3 -?????????? 2,1,1 -#??#????#?#?????#? 11,1,3 -#??#??#?.???##??? 1,2,2,7 -#?.???#?##?##?? 2,1,9 -..??..??..?? 1,2 -.????.?#?#?.?. 4,5 -#???#??#???.???#??? 2,4,1,1,1,1 -.??#..??????#???#?. 3,1,9 -#???????#.????? 2,1,1,2,1 -??????##????#??.??. 8,1 -???.??#?...?#?#? 3,4 -?.??.#??#? 1,1,4 -?.??#?#??.??? 1,4,2 -?##??#??.????.??? 6,1,4,1 -??.?????#??? 1,3,1,1 -?.?????????#?#??? 5,8 -?.?????.#?##?. 1,1,1,4 -.?????##?#??.? 11,1 -.?.??#?????????# 1,1,1,5 -#?#????..?#??#??? 6,5,2 -?#??#??#?#?.???#??? 10,2,1 -.??????#.? 4,1,1 -????.?#.????? 2,1,4 -???????.?##? 2,4 -?#????#???? 4,4 -?.?#.???.?## 2,1,3 -?.????#...???..??. 4,1,1 -?#???#????#. 8,1 -?#.??????.?####?. 2,2,2,5 -??#?????#.?? 5,3,1 -?#????#??????#..?# 7,4,1,1 -#?????.???#?##?? 1,1,1,2,4 -##?#????.???. 8,1 -?.???????##??? 3,6 -???????##??#???. 1,7,1,1 -#?????#?.??##??????# 1,5,7,3 -.???????.# 2,1,1 -??????.?#?? 3,2,3 -??????#????. 7,1 -??#?.??.??? 3,2 -..??????#?#???#.? 9,1 -##?#??..#.? 5,1,1 -?#??#.????.???? 4,1,1,1,1 -?????#.#.?.??? 2,1,1,2 -???###?..??. 4,1 -??####?#?????#? 7,1,1 -??###?#???.#???????? 9,1,2,2 -??.??.?..####?#??? 1,6 -.???#?????????????# 3,2,1,1,1 -??#.????.????????? 2,3,5,1 -.?..?#?#??????#??. 1,10,1 -#?.???#..???. 1,4 -?#????????#?.. 5,5 -???#.#??#?##???##. 3,7,4 -.??###?#?.?????..?? 6,4 -???.???##???.??# 3,1,5,1,1 -..????.???? 2,1 -?#..?##??.#??#? 1,4,2,2 -????..??#?#?? 1,1,2,3 -#???.???????? 2,4 -..??????#??.???.??? 7,2,1 -?.#???????.. 3,2 -??????##????? 9,2 -??.#.??.?#???#?# 1,1,3,3 -????.#.???? 3,1,1 -#??.?##??#??#.?? 1,1,9,1 -?.????..??.???? 1,3,1,1,2 -??.???##??.#????? 1,5,4,1 -???.??.?????.?.???# 3,1,2,1,1,4 -?#.#???..??#??#? 2,1,1,4,2 -?.??.?..?????.???. 1,1,1,5,1 -.?#???.??.????????? 4,1,1,3,1,1 -???.?#.???. 2,1,3 -???.?#??????# 1,3,1,2 -????????.?????. 5,4 -??#.??.??? 1,1,3 -??#?..?#???#?.? 3,4,2 -????#??##???????? 7,1 -#??????##?.## 1,1,3,2 -???#.?????# 3,4,1 -#?#?.??????# 1,2,3,1 -?.??#..#..?? 2,1 -?????????.?????..? 7,1,1,1 -?????.???.??#??.??# 2,1,1,1,3,2 -?.?.??#?.#?# 1,1,1,3 -????????#.? 6,1 -#.????##???????? 1,5,3,1 -..???#.?.#?#??#??# 4,1,4,1,2 -.?.#?.??.??? 1,2,1,2 -??#??.?#???.. 2,3 -???#??#????#? 7,2 -??##?.??#? 3,4 -?.????#????.#?#? 1,2,3 -.???.???#?#????? 2,5,1 -.##.??.#.##? 2,1,1,2 -??????#??????##?.? 1,4,3,4,1 -???????#???.?#?# 6,4 -??..?????????.#??#. 1,8,1,2 -????????.? 1,2,1 -??##??##???#?.??#??? 3,6,6 -.??#?#???????? 3,2 -.??????.??##???..? 5,4 -????????..? 2,4,1 -.#?????#?#??????? 1,9,2 -?#####??#???.#?? 7,1,1,1 -#???.?#.#.?#?#?###?? 1,2,1,1,8 -.?#?????.??????? 6,4 -????.?.??##.????#?. 2,1,3,1,2 -???????????????#. 5,1,4 -.?..?.?##????? 1,1,4,2 -..???????? 2,2 -??.??#?#.? 1,5 -?#???.#####??? 3,5 -??..#?#?#???#??? 1,3,8 -.????????.???#? 2,1,1,1,2 -?????.#???????#.#. 1,2,1,2,1,1 -????#???#??#.?? 6,5 -??.?#??#??#?.??#?#?? 5,2,4 -???###??#?#????. 8,5 -.??????##.????#??.# 1,5,1,3,1,1 -.?????..?????? 1,1 -??##?.?.?? 3,1,1 -???#??###??????##??? 1,6,8 -.????#.???????.?#?#? 1,1,1,6,1,1 -???#..?#.?.?? 4,2,1 -?.?.#.?#?## 1,1,5 -?#???.?#?? 4,2,1 -?#?#?#???#?.??#.??# 5,2,1,1,1 -.???#?.?##?? 1,5 -?#???.?#.? 4,1 -.##??#?#...?? 7,1 -?##?.?.?.?#?..??. 2,3 -??#?#.??#?????? 4,2,2 -?#?###?.????.? 7,1,2 -#?.#?#?.?#?.#? 1,4,1,1 -...#?#???.???? 4,1 -.#?????#.?##??? 1,1,3,3,1 -.??#????###?????? 3,8,1 -?.???#??????????#??? 4,9 -.##?????#?? 5,1 -??.????#?????.?.. 1,10,1 -.??#?#?????..#.?.??? 2,3,1,1,1,2 -??????#???? 2,3,2 -??#??????#?????# 6,1,1,4 -???????.?#.??#?# 2,2,2,1,1 -?#.????#?? 2,6 -??#????????.. 5,1,2 -?????#????#??#?.?#?. 8,5,3 -??##????#?..? 5,3 -.?????.????#? 3,4 -...?.?????????#???. 1,8 -#?????#??.. 7,1 -.??#????????? 4,1,1,1 -?#.??????.???? 2,1,2,1 -#???#?#?#?????????? 9,1,1,1,1 -??.?.??..??#.?# 2,1,1,3,2 -?#?#??#???#.????.?? 10,1,2,1 -.???#.?????.? 3,3 -???#??##??.????#??#? 8,1,1,1,1 -????..??????#?? 1,2,2 -?#.?.?#..#??#?.? 2,1,1,5 -????###.#..? 1,4,1 -.????????? 1,1,1 -?.?...????? 1,2 -??#??.??##?? 3,6 -?.????#??#?.#?? 1,9,2 -?###??????#.???. 11,1,1 -?????#.?????? 3,1,1,1 -?.##..?????.?#..?? 2,1,2 -??#??#?????..? 4,1,1 -?##?#?#??.??#. 5,3,3 -.??.#????#???#???? 2,1,7,2 -?.#???????????????? 1,1,9,3 -.???#????##.? 1,2,2,1 -?#?.?.???#??#?..?.?? 1,1,6,1,2 -??#?????????#??? 4,1 -??????.??###?????.#. 3,1,1,3,4,1 -?????#.#.?.?#? 5,1,1 -????####..?#..#?# 7,2,1,1 -#???..??????...#?? 2,1,6,1,1 -?????#??.? 5,1 -.??#????#? 4,1 -???.#???.??#? 4,2 -.#????#??#?????? 3,3,1,2 -?????.??????.???? 1,1,3,1,2 -?#.##?#?.#####??# 1,4,8 -??.#????...?### 1,1,1,4 -#??#?#??#?.? 6,2,1 -????#???#?? 5,1 -#???#?#????##.?.? 13,1 -?###????#???. 4,6 -????????##???????. 1,4,2 -#?.????#.???? 1,1,2,2 -.????????#? 1,2,3 -?????##?#.??##?. 8,4 -?#??#?#????? 1,1,1,1 -????#??#?#? 1,5 -#??????#?#??????#??# 4,8,3,1 -?.?###??.????????? 3,7 -??#???#?????.?###?? 1,1,2,1,4,1 -?.??..?.??.????##.?? 2,1,1,6,1 -??#??????? 1,5 -???##??##???.#??#?# 8,1,6 -.?.??#?##?#?? 6,1 -????????##????#?# 1,1,9,1 -????.#?##?.?? 3,5,1 -??#??.????..?. 4,3,1 -#??#??????#??? 1,1,1,3 -###?#.?..#? 5,1,1 -?????#.??????#?#? 1,2,1,5 -#.???#??#. 1,3,1 -.??#?##????? 6,1 -?????#????..?? 7,1 -???#??#?#??#??.??? 1,2,3,2,3 -??????..#????#??.? 2,1,1,2,4,1 -?#.##?##??????.? 1,5,1,3,1 -??#??##????.????# 8,1,1 -???????#.#??#? 1,3,2,1 -?##?.?#???#???????? 2,2,3,2,1 -.#??..??.????#? 3,2,1,1 -???????.??????#.###. 3,3,1,5,3 -??#.#??#????. 2,4,3 -#.#??#????#??##????? 1,1,2,1,6,3 -##?#?.#?#.#.??? 5,1,1,1,1 -??????????##??#.?# 5,2,2,2,2 -??#.??#?????#?#?? 2,7,4 -???.???????.??#? 1,3,2,3 -?#.#??...?#.# 1,1,2,1 -???#?????#?#???#..## 3,9,2 -#.???????#. 1,7 -.??#????.?.????.?? 2,2,1,1,1,1 -?????..??. 1,1,1 -??#.???????#.? 2,5,1 -?????????? 3,1,3 -#.?.??##??.? 1,1,4,1 -??.????????#????? 1,2,3,1,3 -.#####????????? 6,1,2 -##????##?.?#.??? 9,1,2 -??#??????? 2,1,1 -????#?????????.?#. 14,1 -?##???##?.##??. 7,4 -#.?#?##??#?####???# 1,14,1 -.?##?.?????# 4,1,2 -.?#.#?.???# 1,1,2 -.?..???????#?.?# 1,1,6,2 -??##?#?????##??.???? 6,2,3,2 -??#??????.??#?? 7,2 -#.?.?..#?.??#?#?#. 1,1,1,1,5,1 -?.?#???????? 2,4 -????#??..???#?#?. 1,4,1,1,1 -???.?????# 2,6 -???#???##..?????..?? 2,3,3,1 -??##?##?#???###? 5,7 -.??#??##??#?. 2,5 -.#???#?#?????# 1,11 -?#?#?.?????.????#?? 2,1,2,1,7 -??#?????????# 3,1,1,1 -.??.????#? 2,2,1 -????????#????? 1,7 -?????.##???#?#? 1,3,3 -????#..??#??? 1,1,2 -?#?.?.#???# 2,2,1 -#..??.??????#. 1,2,1,4 -.##?.??#.?#.?? 2,3,1,1 -..?#???#???###.????? 12,1 -????.????#? 2,1 -???#.?.??? 1,1,1 -.??.????.# 1,1,1 -????.???.?.???##??? 3,1,6 -??#????.??.? 4,1 -#.?..###?? 1,1,5 -?????????..#.? 1,3,1,1 -???.###?#??.?. 1,6,1 -????????????#?##???? 3,1,9 -??.??.???? 1,2 -??#?.?????.???????? 4,5,2,4 -????#?#.?#####??. 5,7 -?.#?????#??? 1,3,1 -#????#??.?? 1,1,1 -.??????.????# 3,1,2 -??#?#?????#?.???#### 10,6 -?.?????#?..? 1,4 -???#??.#??#??? 2,5 -##?#?.#?##??##?????? 4,8,3 -???#???.??????## 3,1,6 -.???#??.??. 1,3 -.???#?.??.?#??? 1,2,2,1 -??#?.??#.?#.??##??? 3,2,1,5 -?###??#???###?#???.? 8,8,1 -###?.?.???..??.? 3,1,3,1,1 -?#?.?.##????#???? 1,1,4,2,1 -???????.?? 1,4,2 -.?#???###??? 1,4,1 -#.????.???#.# 1,1,4,1 -??#?#????.?#?.? 1,5,1,2,1 -.?#?#?#?##? 4,1,3 -????????????#?#????? 1,1,8,1,1 -#.????????? 1,2,2 -?##??.???? 3,1,1 -????..???.?.###?# 2,2,5 -#?#????##.#?? 5,2,2 -???.#????##?????..#? 1,1,6,2,1 -.#??.??.?? 1,1,1 -#????#??##??? 1,2,4 -?#????.??????.? 5,4 -??.?#???#?..?# 1,5,1 -?#???????????#???? 4,1,5,1 -???????#?.? 5,1 -?#??#?????.#??.#?? 5,1,1,1,3 -???.??????.?? 3,1,2 -?.???.#??? 2,3 -?.#.?????? 1,2,1 -#??#.??.#???. 1,2,3 -#???.#.?.?#?. 1,1,1,2 -?##??????.?#.?? 2,4,2,1 -.?#??#.?#??????? 4,4,3 -#????.???.??#???#.? 2,1,2,4,2,1 -?????.?????# 1,1,5 -#???#.#?.?????????? 2,2,2,9 -?#????????.?#.#? 7,1,1,1 -##?.????#?.?#??. 3,4,3 -???##??#????#?????? 11,5 -.??.??#??##.?? 1,7,1 -#??##???#.?.? 5,2,1,1 -???.??#????##??.?# 2,1,1,6,1 -??##?#????? 3,3 -#.?#??.????#??# 1,3,1,1,4 -..##?#??.?#? 5,2 -??.??#????. 1,4 -???#?.????? 4,2 -#?..????.?#??#?#?#? 1,3,9 -????##???#.?#?? 7,1,3 -?????#???????.?? 1,5 -??.??.????##??#???? 2,10 -??#?###?.?# 3,3,2 -???????#???.??.. 7,1 -??????????#.#?? 4,1,1,1,2 -?#?#?#??#??.??##??#. 9,5,1 -?.##?????.? 2,4,1 -#.???.???#??#?#?#??? 1,1,12 -?.?.?#???#?#?#.?#. 1,1,1,4,1,1 -???#?#???##????#??? 6,4,4 -?.????##..??.## 1,1,3,2,2 -.????#.?.??? 5,1 -?????..?.??#.?#? 1,2,1,2,1 -?.??#?????.?#? 1,5,1,2 -.????##?????#?? 1,4,2,3 -??.??.???.?#?? 1,3,3 -?.#????.???#??.#???? 1,1,1,6,1,1 -..#?????????##???## 1,4,4,3 -###??.##??#?????. 4,2,6 -?..?#????.??.?? 1,2 -.?#?.#????????.??? 3,1,3,1,1 -?#?????#?##?.###?#?? 3,7,5 -##??##??????#??..??? 13,1,1,1 -..#??.?#????#??? 1,2,6 -?????#?#?????##?.##? 1,7,1,3,3 -?##?#?#?##? 6,2 -.??#??..???? 4,2 -.#?##????.???. 1,3,1,1 -??##??.?#.? 4,2,1 -???.???#?# 3,2,1 -.????..?##???#??#. 2,10 -?##?????#??.## 5,2,2 -??????.??? 3,2 -??#???..?.??? 1,1,1,2 -#???????#?#?????# 1,1,11 -?##??????#?.??? 4,1,1,1,1 -?..??#???#????.?### 9,4 -?????????????#??.?? 1,1,1,4,2,1 -??#.#.??????.????? 2,1,1,1,4 -?.....?????? 1,1 -#???.??##? 3,2 -???.???.?#? 1,3,1 -??.???.??..? 1,1,2,1 -#??#???#?#??##??? 4,4,2,1 -.????????. 1,3 -.#?????.???#? 2,1,2 -?.?.???#..?. 1,2,1,1 -?###????#.??????? 7,1,1,1,2 -?##?#????###??.?. 6,3 -???#?.?#??. 3,1 -??#???#?.?.? 6,1,1 -?.??????????? 6,1 -...???##???.?. 5,2,1 -???.???.?.???## 1,1,1,1,3 -???.?##??#? 1,2,1 -###???.?#??#?? 6,5 -...?#???.??????#? 3,2 -??????#?????????? 8,2 -.?????#??#.??.#? 1,5,1,1,1 -###???#??#??????? 4,4,1 -.????###?# 1,3,1 -??#????#?#?.??? 1,3,1,1,2 -.#???#?##??#?#?# 1,12 -##.???#??.??..# 2,1,1,1,1 -???#.##???? 1,3,1 -???###???.?.##??.?# 1,7,1,2,1,1 -?.#.?#?#?..?..? 1,1,4,1 -???.??.?#?? 1,3 -??????#???#. 1,3,1,1 -?????#.#????#??? 5,4,1,1 -.?.????#???. 2,3 -???.??.?## 3,3 -?????#?.????#?#? 5,6 -???#?.???#?? 2,6 -...?????#.? 1,3 -#???#????#? 1,2,1 -??##????????###??. 6,1,4 -??#????#??? 1,3 -??#???#??????#?#? 7,7 -??####.?.?? 6,1,1 -.?.?.#?#??.?????? 4,2 -#???..#???.?? 4,3,1 -??..?#??#???##? 1,6,3 -??????#?#? 1,1,4 -?.???#?.???????? 1,3,2,1,1 -????????##????? 1,5,1 -????#?#?#???#.?.#? 11,1,1 -?????#??##??????# 1,3,3,3 -?.???.?#.????#?#??# 1,1,1,1,8 -.#?#??????#?????. 5,3,2 -.??###?????#??. 3,2,3 -?????#?##??#??? 1,1,1,2,4 -??#?.#..????#?.?#? 3,1,6,2 -?##??.????? 2,3 -?????#?###??#? 2,8 -.??#?#??.????.? 6,2,1 -????#?.?#???##??? 1,2,6,2 -??????..?#..? 2,1 -?.?????#???????? 1,4,2,1 -#.??????.?????#? 1,2,2,6 -#?.?.??#?.????? 2,1,1,2,3 -?.????#???#??????.#? 12,1 -?#????#??#.???#.##? 7,1,1,1,2 -?#???#????????.?? 5,2,4,1 -???????????# 3,1,1,3 -.???????.? 2,1,1 -?#????#???????? 2,1,3,1 -.##.?#??.#.?# 2,1,1,1 -??#???#???.????. 5,1,1,1 -..????..?????? 1,3 -#??#??#????.?.# 5,1,2,1,1 -??#.?#????.. 2,3,1 -?#.??????? 2,1,1 -????.?#???#?? 1,2,6 -????#?#?..?#? 4,1 -??#?#????#?#????. 8,7 +##.##...... +##.######## +...#...##.. +..#.#...... +###..#....# +###.#...... +##..##.##.# +..#...####. +..##..####. +#####.#..#. +###.##.##.# +....####### +#.#........ + +#..###......# +..#.#........ +#.#####....## +..##.#..##..# +.###.#..##..# +#.#####....## +..#.#........ +#..###......# +##...#..##..# +#.###..#..#.. +.##...##..##. +###.######### +#..#.#.#..#.# +.##.##......# +#..#####..### + +.##.....##. +####.#..#.# +#####...... +.......#.## +.##..###### +#..#.....## +#####..#### +.##.....#.. +....###.... +....###.... +.##....##.. + +.##.###.###...# +....#.##....### +####.###...###. +#..#.##....##.. +.....#######.#. +.##.###.....#.. +#..#.#....####. +####.##.#..##.. +.......#.#####. +.##.......#...# +.....##..#.#.## +.....##..#.#.## +.##.......#...# +.......#.#####. +####.####..##.. +#..#.#....####. +.##.###.....#.. + +#..####..#....# +..##..##..####. +....##.....##.. +...#..#........ +#.##..##.#.##.# +.##.##.##.####. +.##.##.##...... +#......#.###### +.#..##..#...... + +.#..#.#...#.... +#.##.#.#.#..... +#....#.##...... +#....#.##...... +#.##.#.#.#..... +.#..#.#.#.#.... +.#..#...###.... +.#..#.##.#..##. +########.#.#.#. +#....##.##...#. +.......###.#### +......#####.### +.#..#.#.#.###.. +##..###..#.#..# +##..##..##.#.## +#########.#.### +#.##.##.###..## + +..###.# +####..# +##..##. +##..##. +...#..# +...#### +..#.##. +##.#### +##.#### +####..# +...#..# +##.#..# +..##### +##.#### +..#.##. +..##### +....##. + +.#.##.##....##. +...#...######.. +#....########## +..#.#....##.... +#..###.######.# +#..###.######.# +..#.#....##.... +#....########## +...#...######.. +.#.##.##....##. +.#####..####..# +#......######.. +.....##.#..#.#. +.#...###....### +..##..#......#. +##..###.#..#.## +.#.#.#........# + +#..#####.##.#.. +.#..##.#.####.. +...##..##.#..## +.######.#.#.#.. +#.#..###.....## +....##..#....## +..##.#.#.#.#.## +##..#...#..##.. +#...###..##.### +.###..#.#.#..## +..#.###.##..### +###.#.#####.... +#.#.#.#####.... +..#.###.##..### +.###..#.#.#..## + +#..###. +.....## +#..#..# +#..#..# +.....## +#.####. +#.####. +.....## +#..#..# +#..#..# +.....## +#..###. +.#.#.## + +##.#..#####.# +##.#..#####.# +#......#.#..# +##..##......# +..###....#.#. +...###.#.#.## +#.#.##..##.## +#.#.#...##.## +...###.#.#.## + +##.#......... +.#.##...##### +#...#####.#.. +.....##.#.#.. +#.#.#.###..## +#....##...#.. +#....##.#.#.. + +##.##.##.##.##. +..##.###....### +###.#.###..###. +###.##..####..# +..#####.####.## +##....###..###. +..###..#.##.#.. +..##....#..#... +...##....##.... +###.####.##.### +###.##...#....# +##..#..##..##.. +...#..########. +...#.#.######.# +##.#...######.. +..#..##......## +..#.####.##.### + +.###..####### +..#..######## +..###.#....#. +#......#..#.. +###..#.#..#.# +#..#.######## +##.####....## +##.#..#.##.#. +.#...###..### +#.##..##..##. +.....##.##.## +...##..#..#.. +...##..#..#.. +.....##.##.## +#.##..##..##. +.#...###..### +##.#..#.##.#. + +..###..## +.#.##..## +##.###### +.#....... +.#.#....# +##.###### +.#.##..## + +#..#.###. +#..#.#.#. +.##.#.##. +.#..#.#.. +...#.#### +...#.#### +.#..#.#.. + +.#..#####.....# +..########...#. +###.#.###.#.#.# +#.###.#..#...#. +#.###.#..#...#. +###.#.###.#.#.# +...#######...#. +.#..#####.....# +..###...##.#.## +###..###...##.. +##...#####..#.. +....#####.#...# +....#####.#...# +##...#####..#.. +###..###...##.. + +###....#. +###..#... +###...#.. +###...#.. +###..#... +##.....#. +.######## +#..#.#.## +#..#.#.## + +##.##.#.... +##..#.#.... +.#.#.###... +....#..#### +..##..###.. +#..##.##.## +#######..## +#..######.. +.#.#.#.#... + +##########.##.. +.............#. +.#....#.##..### +##.##.##.##.#.# +############.## +.........####.# +#..##..###.##.# +#..##..##..##.# +.........####.# + +.##.#.... +.....#.## +...###..# +###..###. +...#.##.. +...#.##.. +###..###. +...###..# +.....#.## +.##.#.... +#...#.... +#...#.... +###.#.... + +##.#### +###.#.# +...#.#. +###..## +###...# +##.#..# +....### +...#..# +...#..# +....### +###..## +#.###.# +####..# +##.#..# +##.#..# + +...#.###...#.#. +#.#...#.#.#.... +..#..##.#.#.... +.....#####.#..# +.#....###.#.### +#...#####.####. +###...#.##.#.#. +##.#..####..#.. +##.#..####..#.# +..#..#..####.## +###.####.##.##. +....###.##.#..# +....###.##.#..# +###.####.##.##. +..#..#..####.## +##.#..####..#.# +##.#..####..#.. + +..##..###..#.## +..###.##.####.# +..###.##.####.# +..##..###..#.## +#.##...#.##.#.# +#..#..#.##.##.. +##.#.###....##. +..#....###.##.. +#######..####.. +#.###...#...#.. +#.####..#...#.. + +....#.##.#.##.# +.##...##.#....# +####...###.##.# +.##...#........ +.....##...####. +#..#..#.##....# +.##....####..## +####...###....# +.##.####.##..## +#..###...#.##.# +.###.###..#..#. +....#.######### +.##.#.####.##.# +.##.##..###..## +#..#.##..##..## + +.#..#..#..... +.###.##.###.. +.###....###.. +....####..... +#.#..##..#.## +####.##.##### +##.#.##.#.### +....####..... +..##....##... +##.##..##.### +##.######.### +..#..##..#... +.##.####.##.. + +..##..#..####..#. +##..##..#....#..# +#.##.#..##..##..# +##..####......### +#....##.#.##.#.## +######..#.##.#..# +..##.........#... +#....#..#....#..# +#.##.#.########.# +..##...#.#..#.#.. +.####.#........#. +#.##.##..#..#..## +#....#..######..# +######.#.#..#.#.# +.#..#..########.. + +....####... +..#......#. +...#....#.. +##...##...# +##...##...# +##..#..#..# +...##..###. +##..#..#..# +.....##.... + +####....####. +..#.#..#.#..# +#..#....#..## +.#.#....#.### +.#.######.#.# +#####..#####. +...#....#...# +###......#### +###......#### + +#.##.## +#.##.## +####..# +#.#..#. +###.### +.#...## +.##..## +###.### +#.#..#. + +.#.#....#.#.. +##.#....#.### +##.#....#.### +.#.#....#.#.. +..########..# +#.##.##.##.## +.##...#..##.. +#.#......#.## +..##....##..# + +###..#####. +.#.####.### +.####...### +.####...### +.#.##.#.### +###..#####. +..#.######. +.#.#..#...# +.##.#.##..# +.##.#.##..# +.#.#..#...# +..#.######. +###..#####. + +##..#.##.#..# +..#.#....#.#. +#..#..##..#.. +#..#..##..#.. +#.#.#....#.#. +##..#.##.#..# +..#..#..#..#. +#.#.##..##.#. +##...####...# +...#.#..#.#.. +..#.######.#. +##...####...# +.##...##...## + +####...#..#..#..# +##.#.####.#..#.## +.#.#.#..##....##. +.##..#.########## +.#.##.#...####... +###.###...####... +.#.#.#.##.####.## +#.##....###..###. +..##...##.#..#.## +..#........##.... +...#..#..##..##.. +...#..#..##..##.. +#.#........##.... + +#.###...### +....##.#..# +.###.##.##. +.#.###..##. +..####..... +..####..... +.#.###..##. +.###.##.##. +....##.#..# +#.###...### +...#.....## +...#.....## +#.###...### +....#..#..# +.###.##.##. +.#.###..##. +..####..... + +.##...##. +....#.... +#.####..# +.#..#.... +###.#.... +#.####..# +.#.##.... +####.#..# +.#..##### +###..#### +###..#### +.#..##### +.###.#..# + +####... +...#### +#.#.... +#.###.. +##..... +##..### +##..### +#...... +#.###.. +#.#.... +...#### + +##..#.#..#. +....###.#.. +.########.# +#.####...## +.#.#..#.#.# +#..####.#.. +#..####.#.# +.#.#..#.#.# +#.####...## +.########.# +....###.#.. +##..#.#..#. +####....... +#.##.##..## +#.##.##..## + +.###.##..#.#.#### +##.#...###..##### +..#..###.#.#..... +..#.#..#..##..... +..#...####.##.#.. +##....##.#....... +##.####.#.#####.. +.#.#.##.#.##.#.## +#.##.##..##..#### +..###..#.##.###.. +.#.###.######.#.. +..#...###.##.##.. +..#...###.##.##.. +.#.###.######.#.. +..###..#.##.###.. +#.##.##..##...### +.#.#.##.#.##.#.## + +#.##.#.#.##.... +#.##.#.#.##.... +######.####.#.. +#######......#. +##########.#..# +.#..#...#...##. +..##.....##..#. +.##.#.##.....## +.#..#...#..#... +.####......##.# +.####.#.###...# +##..###.#...... +######...#..#.# + +.##....##...# +###########.# +.##....##..#. +####..####.#. +....##......# +..#....#..#.. +#..####..#.## + +.#..######..#.##. +#.##..##..##.#### +.##..####..##.... +.####.##.####.##. +###.#.##.#.###..# +..##..##..##..##. +##.##....##.##..# +#.#.#....#.#.#..# +..###.##.###..... +.....#..#..#..... +..##..##..##..##. +..###.##.###..##. +...#......#...... + +##.#.##.....#.### +.#..##...#.#...#. +#..##.####...###. +..###.###...##..# +.#..########..#.# +##.#.##.##.##.##. +..##..###.###.### +...#..#......#..# +.###...#######..# +.###...#######..# +...#..#......#... +..#######.#.##### +..#######.#.##### +...#..#......#... +.###...#######..# +.###...#######..# +...#..#......#..# + +###...#..#. +#.#........ +###.#...... +....#...... +###........ +...#..####. +..##.##..## +#####...... +..#..#.##.# +..#..#.##.# +##.#...##.. +..##....... +######....# +...##...... +..#..###### + +.##.#.##..##. +###...##..##. +.##..#..##..# +.##.#........ +#....#..##..# +#.#.##..##..# +.###.######## +.#........... +.#.#......... +#.########### +...###..##..# +.####........ +..###..#..#.. +#..########## +##.#......... + +..#.##..# +..#.##..# +##..##..# +..##.###. +####.#.## +#...#.#.# +..#....#. + +...#....#.... +...#....#.... +...######...# +.##..##..##.. +##........### +.#..#..#..#.. +.....##...#.# +.##......##.. +.#...##...#.. +...#.##.#...# +##.#....#.##. +...##..##...# +####....##### +...#.##.#...# +#....##....## +#.###..###.## +#.#.#..#.#.#. + +.####..#..#..## +#....#...#...#. +#....#.#.#...#. +.####..#..#..## +.####.##...#.#. +.####.##.####.# +#....####.#...# +.#..#...#..#... +.####...#.#.#.. + +......#.. +#.###.#.# +#.###.#.. +..#.##.## +#....#.## +.##...#.. +...###... +#...##### +#.##.#.## +.#..###.. +.#..###.. +#.##.#.## +#...##### +...###... +.##...#.. + +##........... +..#.##.##.##. +####.#.##.#.# +..#..######.. +###.########. +##.#..#..#..# +..###......## +##..#.####.#. +....#..##..#. +..#.##...###. +...#..####..# +#####......## +#######..#### +######.##.### +###..#.##.#.. + +.##.##....##..##. +#.###.##.#..##..# +#.#####.......... +####.##.##..##..# +..##.#.##.##..##. +.#.#..####.####.# +.##.#####........ +#.#...#..#..##..# +..#.#.#..######## + +.#..###.# +..#.##.## +..#.##.## +.#..###.# +#.#.##### +#.#....## +#.##..### +.#..#.... +..#...... +.###..#.. +.#.#..#.. +..#...... +.#..#.... + +##......... +...###..### +...##.##.## +#.##......# +#..##.##.## +##.##.##.## +#....#..#.. +##.###..### +.#......... +##.######## +.#.##.##.## +.#.##.##.## +##.###..### +.#......... +##.###..### +#....#..#.. +##.##.##.## + +##..#.#....#.## +.####..#.#.#..# +#..##.####.##.# +.#.....#..##..# +.##.#.#..###..# +.##.#.#..###..# +.#.....#..##... +#..##.####.##.# +.####..#.#.#..# +##..#.#....#.## +#.#..##...#.#.# +.#.#..##..#..#. +.#.#..##..#..#. + +#.#..###### +...###..##. +...###..##. +#.#..###### +#.......#.. +.#.##.#.##. +.....#..... + +#.####.#. +#.####.#. +........# +########. +#.####.## +##....##. +##....### +#.#..#.#. +#.####.## +.#....#.. +..#####.. + +#.#.#######..##.. +.#.##..#####....# +.....#...###....# +..#.#######..##.. +..#.#.#..###.##.# +..#.#.#..###.##.# +..#.#######..##.. +.....#...###....# +.#.##..#.###....# +#.#.#######..##.. +.##.###...##....# +#.#.###....#.##.# +#.###....##.#..#. +#....#######.##.# +#.#.#...##..####. +#....#....#...... +..........####### + +#..##..#.#..#.### +#.....####..#..## +#.....####..#..## +#..##..#.#..#.### +#.##....##....#.. +.######..###...#. +#....##...##.#... +#....##...##.#... +.######..###...#. +#.##..#.##....#.. +#..##..#.#..#.### + +####.#.## +####.#### +.##..#..# +#####.#.# +#..###.## +#####..#. +......#.# +#######.# +.##.##### + +.##..##....#... +####.##.#..##.# +.##.#..#.#..#.. +#..#..###..#.## +#..#..###..#.## +.##.#..#.#..#.. +####.##.#..##.# +.##..##....#... +.##.####.##.#.. +..##..#..#####. +..#.#..#.#..#.. +..#.#..#.#..#.. +..##..#..#####. +.##.####.##.#.. +.##..##....#... +.###.##.#..##.# +.##.#..#.#..#.. + +#.#.####. +##.#.#.#. +##..#.#.. +.###.##.# +####.#.#. +####.#.#. +.###.##.# +##..#.#.. +##.#.#.#. +#.#.#.##. +#.#.#.##. + +#.#....#.#### +.##.#.#.#.##. +.#..#.#...... +..##.###.#### +..##.###.#### +.#..#.#...... +.##.#.#.#.##. +#.#....#.#### +###....#.#... +.#.#...##.##. +.#.##.#..#..# +..#.#....#### +.#..#.#.#.... +....#####.##. +.#.#..##.#### + +...##.##. +..#.##### +..#.##### +...##.##. +#.......# +#..#.#.## +#.######. +.#....#.# +#.###..## +##.#..... +##.#..... +#.###..## +.#....#.# +#.######. +#..#.#.## +#.......# +.#.##.##. + +..######### +.#.#.#....# +##.##..##.. +.#.##..#... +.#.###.##.# +..##.##..## +.###.#.##.# +.###.##..## +.#..#.#..#. +.#....####. +.#.##..##.. +###...#..#. +#.......... +.###....... +.#.#.##..## +.#.#.##..## +.###....... + +#..#.##.#.. +....#..#... +.###.##.### +#.#.####.#. +#..#....#.. +#..#....#.. +#.#.####.#. +.###.##.### +....#..#... +#..#.##.#.. +.#........# +#....##.#.. +#.##....##. +#...#..#... +..###..###. +..#.#..#.#. +.##......## + +....#..#... +####....... +#..#.#....# +.....#....# +#####...... +####.###### +.##.##....# + +.#.#..#.#.. +###.##.#### +#..#..#..## +.##..#.##.. +.#..##..#.. +.##.##.##.. +....##..... + +#.####.#..# +#.#..#.#.## +#......##.# +###..####.# +..#..#..#.. +##.##.##### +.##..##.### +...##....## +...##....## +.##..##.### +##.##.##### +..#..#..... +###..####.# + +#.###...# +#.###.#.# +#.#.#..## +#.####### +.#..#..## +.###.#### +.######## +.##..###. +.##..###. +.######## +.###.#### +.#..#..## +#.####### +#.#.#..## +#.###.#.# + +##.######.# +..#.#..#.#. +..########. +........#.. +####.##.### +....####... +###.####.## +##........# +##........# +##.#....#.# +..##....##. +...#.##.#.. +..###..###. +##.#.##.#.# +##.######.# +...#....#.. +###..##..## + +##.#..# +###.##. +#..#.## +.#.#### +.#..##. +..##### +..##### +.#..##. +.#.#### + +.....##.###.. +....#..####.# +####.#.#..##. +#.#..##.##... +#.#..##.##... +####.#.#..##. +....#..####.# +.....##.###.# +.#.#..###..#. +..###.#.#...# +..###.#.#...# + +.##.###..#. +..#.###.#.# +######.#..# +######.#..# +..#.###.#.# +.##.###..#. +#.#.##..### +##.....#### +#.##.##..## +..######### +..#.....##. +..###..#... +..###..#... +..#.....##. +..######### +#.##.##..## +##......### + +.#..#.#....#. +#....##....## +.#..#...##... +.......#..#.. +#######.##.## +#....######## +######.#..#.# +#....#.#..#.. +.####...##... + +####.##..##.### +####..#..#..### +..#.###..#.#.#. +#####..##..#### +...##..##..##.. +..#####..#####. +....#.#..#.#... + +####.#..####..# +###.########### +.##.#.......... +.##.#.......... +###.########### +####.#..####..# +######.######.# +.####.#.####.#. +###.##.##..#..# +.######..##..## +..#.#.##.##.##. +##..###..##..## +#......#....#.. +.........##.... +...#.#.##..##.# + +..#..##..#... +###..##..#### +###..##..#### +.##..##..##.. +#..##..##..## +##...##...### +####....##### +...######.... +##.#.##.#.##. + +####.## +######. +......# +......# +.##...# +#..###. +#..#.#. +#..#.#. +#..###. +.##...# +......# +#..#..# +######. +####.## +####..# + +...#....# +#..#.#### +..######. +##....### +##...#.#. +..#....## +###.##... +.....###. +.....###. +###.##... +..#....## +##...#.#. +##....### + +########..#.# +#######..#### +..####....##. +.#.##.#.##... +..####..####. +.##..##..#.## +#.#..#.###... +........#.#.# +.#....#.#.... +#......#.#..# +#......#.#..# + +.#..##....# +.#..##....# +#.##.#....# +#..###.##.# +##..###..## +#.##.#.#### +#.###...... + +.##.#....#.##..#. +#..#..##..#..#.#. +.#..#.##.#..#...# +#..##....##..##.. +#..##....##..#.#. +#.#..#..#..#.#### +.#..#.##....#...# +#.###....###.#... +..##..##..##....# +##...#..#...##... +####..##..#####.# +###.######.###..# +#.##.####.##.#### +#.##.####.##.#### +###.######.###..# +####..##..#####.# +##...#..#...##... + +####..##########. +#..####..#..#..## +.#.####.#....#.## +.###..###....###. +..#.#..#......#.. +##......######... +.##....##....##.. +.########.##.#### +##......######... + +##..#....##.##.## +#..##.#.#.#....#. +....###.#..#..#.. +....###.#..#..#.. +#..##.#.#.#....#. +##..#....##.##.## +#....##.###.##.## +.##.##..#.#...... +##.#...##.##..##. +.#..#..##........ +....#.#.#..####.. +##.#..####.####.# +####.#.#.#......# +#.#..#.##..#..#.. +#.###..#....##... + +..#.####...##.. +.....#####....# +##..#..####..## +##...#..##.##.# +..#.##..###..## +##.#...#.###### +....#.#..###### +##.##.##.##..## +##.#######.##.. +..##.###...##.. +#####...##.##.# +##.#.##..#.##.# +##..#..##.####. +####....#..##.. +##.##..#.#....# + +#.###...#..#. +.#.#.#..#..#. +...####..##.# +.#.###..#.### +.#.##..#.#### +.######...#.. +#.#......##.. +#.#......##.. +..#####...#.. +.#.##..#.#### +.#.###..#.### +...####..##.# +.#.#.#..#..#. +#.###...#..#. +#.###...#..#. + +.........#. +#..##..##.# +........##. +.##..##...# +........#.# +........### +#..##..##.. +...##...### +..........# +.##..##..## +.##..##.... +#..##..#.#. +........##. + +.....######...... +####.##..##.####. +##..#.####.#..##. +.#..#.....##..#.# +.#..##.##.##..#.. +.#...######...#.. +#.#..........#.## +.###.#.##.#.###.. +.###.#.##.#.###.. + +.###.#.#..#.##.#. +....###..######## +.##.....#..#..#.. +#.#..#..#........ +...###.#.#..##..# +#.#.........##... +.###.#.#.##.##.## +####.###....##... +##.####.#...##... +##..###...#....#. +.#...#.#..##..##. +.#...#.#..##..##. +##.####...#....#. + +#.#.#..#.## +###.#.##..# +###.#.##..# +#.#.#..#.## +#.##.####.. +.#.###...#. +.#.######## +.#.###.#### +.#.###...#. + +##..##..###.# +##.#..#.##### +..##..##..##. +.##....##.#.. +#..#..#..###. +#.##..##.#.#. +#.#.##.#.#### +#.######.#..# +#.######.#..# +#.#.##.#.###. +#.##..##.#.#. + +######.##.. +.#.#..##... +.#.#..##... +######.##.. +.#..#.#.##. +#######...# +#.#.#..##.. +.##.#...##. +.#..###.#.. +.....#.#..# +.....#.#..# +.#..###.#.. +.##.##..##. +#.#.#..##.. +#######...# +.#..#.#.##. +######.##.. + +######.## +###.##.## +#.######. +#.######. +###.##.## +######.## +....##.## +##.##.#.# +####.##.. + +.#...#..# +##...#... +....#..#. +....#..#. +##...#... +.#..##..# +####...## +##.#..#.# +#.......# +.#.....#. +..#.##.## +.#.#..... +..###.#.# +#..###.## +.##....## +..####### +..####### + +.###### +#####.# +#...##. +#...##. +#####.# +.###### +..#...# +.#.#... +##..#.. +#...##. +#...##. +##..##. +.#.#... + +.#.##..#.##.# +.##.#....##.. +#..####.####. +.##.#...####. +####.##.####. +#.####..#..#. +####...#.##.# +####...#.##.# +#.###...#..#. +####.##.####. +.##.#...####. + +.##.#.#.....#..## +##.#..#.#.##.#.#. +.#..####....#...# +.#.#.#..##.###..# +...#.#.#....####. +..##...###.#....# +##.....###.#..... +##.....###.#.#... +..##...###.#....# +...#.#.#....####. +.#.#.#..##.###..# +.#..####....#...# +##.#..#.#.##.#.#. +.##.#.#.....#..## +.##.#.#.....#..## + +#.....#.. +#..##..## +.##.##.#. +###.##.#. +#..##..## +#.....#.. +#.#.#.### +#....#... +#.#...##. +#.##..##. +######... +######... +#.##..##. + +##..#.# +###.#.# +###.#.# +##..#.# +#.##.#. +.#....# +..#.### +..#.#.# +.##..#. +....### +###.... +#..#.## +######. +.##..## +#.###.# + +..##..#.#.##.#. +#..#..##.#..#.# +######..######. +..#####........ +######.##.##.## +######.##.##.## +..#####........ +######..######. +#.....##.#..#.# diff --git a/src/main.rs b/src/main.rs index 2e963c2..96b6329 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,90 +1,84 @@ -use std::{collections::HashMap, io::stdin}; - +use std::{collections::HashSet, io::stdin, vec}; use anyhow::Result; -fn matches(conditions: &str, group: &str) -> bool { - for (g, c) in group.chars().zip(conditions.chars()) { - if c == '?' { - continue; - } - if g == c { - continue; - } - return false; - } - true -} - -type Cache = HashMap; - -fn arrangements_inner(conditions: &str, groups: &[String], cache: &mut Cache) -> i64 { - let g = &groups[0]; - let w = conditions.len() - groups.iter().skip(1).map(|s| s.len()).sum::(); - - let positions = w - g.len() + 1; - let mut sum = 0; - for i in 0..positions { - if !matches(&conditions[i..], g) { - continue; - } - if conditions[..i].contains('#') { - continue; - } - let after = if (i + g.len()) < conditions.len() { - conditions.chars().nth(i + g.len()).unwrap() - } else { - '.' - }; - if after == '#' { - continue; - } - if groups.len() == 1 { - if conditions[i + g.len()..].contains('#') { +fn mirror_points(line: &[char]) -> Vec { + let mut result = vec![]; + for i in 1..line.len() { + let mut mirror = true; + for j in 0..i { + if i + j >= line.len() { continue; } - sum += 1; + if line[i - j - 1] != line[i + j] { + mirror = false; + } + } + if mirror { + result.push(i); + } + } + result +} + +fn vertical_mirror_points(grid: &Vec>) -> HashSet { + let mut s: HashSet = HashSet::new(); + for row in grid { + let n: HashSet = mirror_points(row).iter().copied().collect(); + if s.is_empty() { + s = n; } else { - let cache_key = format!("{},{:?}", &conditions[i + g.len()..], &groups[1..]); - if let Some(v) = cache.get(&cache_key) { - sum += v; - } else { - let a = arrangements_inner(&conditions[i + g.len()..], &groups[1..], cache); - cache.insert(cache_key, a); - sum += a; + s = s.intersection(&n).cloned().collect(); + if s.is_empty() { + return s; } } } - sum + s } -fn arrangements(conditions: &str, groups: &[usize]) -> i64 { - let mut group_strings = vec![]; - group_strings.push("#".repeat(groups[0]).to_owned()); - for g in groups.iter().skip(1) { - group_strings.push(".".to_owned() + &"#".to_owned().repeat(*g)); +fn horizontal_mirror_points(grid: &Vec>) -> HashSet { + let mut s: HashSet = HashSet::new(); + for x in 0..grid[0].len() { + let mut column = vec![]; + for row in grid { + column.push(row[x]); + } + let n: HashSet = mirror_points(&column).iter().copied().collect(); + if s.is_empty() { + s = n; + } else { + s = s.intersection(&n).cloned().collect(); + if s.is_empty() { + return s; + } + } } - let mut cache: Cache = Cache::new(); - arrangements_inner(conditions, &group_strings, &mut cache) + s } +type Grid = Vec>; + fn main() -> Result<()> { - let mut sum = 0; + let mut grids: Vec = vec![]; + grids.push(vec![]); for line in stdin().lines().map_while(Result::ok) { - let mut split = line.split_whitespace(); - let conditions = split.next().unwrap(); - let groups: Vec = split - .next() - .unwrap() - .split(',') - .map(str::parse) - .map_while(Result::ok) - .collect(); - - let conditions = [conditions].repeat(5).join("?"); - let groups = groups.repeat(5); - - let a = arrangements(&conditions, &groups); - sum += a; + println!("{line}"); + if line.is_empty() { + grids.push(vec![]); + continue; + } + grids.last_mut().unwrap().push(line.chars().collect()); + } + let mut sum = 0; + for (i, grid) in grids.iter().enumerate() { + for v in vertical_mirror_points(grid) { + println!("grid {i}: v = {v}"); + sum += v; + } + for h in horizontal_mirror_points(grid) { + println!("grid {i}: h = {h}"); + sum += 100 * h; + } } println!("{sum}"); Ok(()) @@ -95,24 +89,12 @@ mod tests { use super::*; #[test] - fn test_arrangements() { - assert_eq!(arrangements(".??.?#??##???.", &[1, 6]), 5); - assert_eq!(arrangements("???.###", &[1, 1, 3]), 1); - assert_eq!(arrangements(".??..??...?##.", &[1, 1, 3]), 4); - assert_eq!(arrangements("?#?#?#?#?#?#?#?", &[1, 3, 1, 6]), 1); - assert_eq!(arrangements("????.#...#...", &[4, 1, 1]), 1); - assert_eq!(arrangements("????.######..#####.", &[1, 6, 5]), 4); - assert_eq!(arrangements("?###????????", &[3, 2, 1]), 10); - assert_eq!(arrangements("????#?#?..?#?", &[4, 1]), 2); - } - - #[test] - fn test_matches() { - assert!(matches("?", "#")); - assert!(matches("?", ".")); - assert!(matches("#", "#")); - assert!(matches(".", ".")); - assert!(!matches("#", ".")); - assert!(!matches(".", "#")); + fn test_mirror_points() { + let chars: Vec = "#.##..##.".chars().collect(); + assert_eq!(mirror_points(&chars), vec![5, 7]); + let chars: Vec = "#.##..#".chars().collect(); + assert_eq!(mirror_points(&chars), vec![5]); + let chars: Vec = ".#.##".chars().collect(); + assert_eq!(mirror_points(&chars), vec![4]); } }