diff options
Diffstat (limited to '2023/rust/day13')
-rw-r--r-- | 2023/rust/day13/Cargo.toml | 8 | ||||
-rw-r--r-- | 2023/rust/day13/example.txt | 15 | ||||
-rw-r--r-- | 2023/rust/day13/input.txt | 1361 | ||||
-rw-r--r-- | 2023/rust/day13/src/lib.rs | 146 |
4 files changed, 1530 insertions, 0 deletions
diff --git a/2023/rust/day13/Cargo.toml b/2023/rust/day13/Cargo.toml new file mode 100644 index 0000000..36c9510 --- /dev/null +++ b/2023/rust/day13/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "day13" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/2023/rust/day13/example.txt b/2023/rust/day13/example.txt new file mode 100644 index 0000000..3b6b5cc --- /dev/null +++ b/2023/rust/day13/example.txt @@ -0,0 +1,15 @@ +#.##..##. +..#.##.#. +##......# +##......# +..#.##.#. +..##..##. +#.#.##.#. + +#...##..# +#....#..# +..##..### +#####.##. +#####.##. +..##..### +#....#..# diff --git a/2023/rust/day13/input.txt b/2023/rust/day13/input.txt new file mode 100644 index 0000000..023748d --- /dev/null +++ b/2023/rust/day13/input.txt @@ -0,0 +1,1361 @@ +######....####### +..#...####...#..# +.###.#....#.###.# +....##.##.##....# +.##....##....##.. +.####...#..####.# +##..#..##..#..### +..#.########.#... +#..#.######.#..#. +.##..#.##.#..##.. +###.#.####.#.###. +###.#.####.#.###. +.##..#.##.#..##.. +#..#.######.#..#. +..#.########.#... + +......##....# +.#.#.##...#.# +.##.#..#..#.# +.##.#..#..#.# +.#.#.##...#.# +......##..#.# +....#.#....#. +...#.###...## +.#.##.#.###.. +###.....##.## +#.##..##...#. +###.#..##.##. +#..#######..# +#..#######..# +###.#..##.##. + +#.#.#.#.. +#.#.#.##. +#.#.#.##. +#.#.#.#.. +...#..... +#..#.##.. +....#...# +####....# +#####.... +.###.#.## +####...## +.#.#...#. +#....#.#. + +.########..## +.###..###.#.# +###....###.## +#...##...##.# +.########.#.. +#...##..##### +#.##..##.#... +....##....#.. +....##....#.. + +.........##..#..# +.#....#.######.## +.#....#.######.## +.........##.....# +.######.#..#.#..# +##.##.###.##..#.# +#########...#..#. +###..###...#.#### +#......#....#..#. +##....##.....###. +..####..##.#....# +.............#.#. +..#..#...####.... + +##......##. +....##..... +##..##..##. +..#.##.#... +..........# +..##..##... +####..####. +####..####. +#.##..##.#. + +......#..###### +######.#....... +.####.###..##.. +..##..##.#....# +.####.#...#..#. +..##..#.##....# +#.##.##..#....# +##..####....... +.####..#.###### +##..##..#.....# +......####.##.# +#....#......... +######..##....# +######....#..#. +#....#####....# + +##........... +..########### +##..###..###. +##.########## +..#.......... +##...#....#.. +..###..##..## +##.##.#..#.## +..#.###.####. +###.###..###. +....#..##..#. +##.#.#....#.# +...####..#### +....#.####.#. +##.##......## + +#.#....##.. +#..##...#.# +#.###..##.# +#.###..##.# +#..##...#.# +#.#....##.. +.#..####.#. +..#..###### +#..###.#.#. +.#.######## +.#.######## +#..###.#.#. +..#...##### + +....###.#.##..# +....###.#.##..# +#.##..####..... +#.##.....##..## +.#..##....#.##. +.#......##.#.#. +....#.#...###.# +....#.#...###.# +.#......##.#.#. +.#..##....#.##. +#.##......#..## +#.##..####..... +....###.#.##..# + +#..#..#..##.. +#.##......... +#.##......... +...#..#..##.. +##..#.#.###.. +#.#.######### +...#.##....## + +..########..#.### +....####....#.#.. +........#...###.. +..##....##...##.. +####....####.#.## +###..##..###.#.## +#....##....###.## +###......####.#.. +#.##.##.##.##..## + +.####.##. +......##. +..##..... +..##..##. +#....#..# +##..##..# +#....###. +##..##..# +##..##### + +####..####### +.##....##..## +..######....# +..##..##....# +#...##...##.. +#.#....#.##.# +#.######.##.# +###....###### +###.##.###### +.#..##..#..#. +##....#.####. + +###.#.#..#.#.## +##..##....##..# +..#.########.#. +##.#..#..#..#.# +###..##..##..## +##.#.#....#.#.# +..#.#......#.#. +####.######.### +##.##.#..#.#### +..##.#....#.##. +..#.##.##.##.#. +..#.#.#..#.#.#. +###.########.## +###.#......#.## +##...#.##.#...# + +#...... +##..### +##..##. +#..#... +..##... +###.#.. +.##.### +..#.... +#....## +#....## +..#.... + +.#####....##.#... +..####....##.#... +##.#.####..#.###. +##...##...#..#.#. +##...##...#..#.#. +##.#.####..#.###. +..####....##.#... +.#####....##.#... +.#..##......###.. +#.#####...###.##. +....#..#.#..##### +..###....##...... +.#...###...#.##.# +#...#.....#..##.# +#..##.###.#..#.#. +.#...#....###.#.. +##..#..###......# + +###.##.## +##.####.# +##.#..#.# +####..### +....##... +##.#..#.# +...#..#.. +##..###.# +##......# +##......# +..#.##.#. +...#..#.. +##.####.# +....##... +...####.. +....##... +##.####.# + +###..##.# +#####.... +.##.#.##. +#.#.###.. +##...#..# +#.#.##.#. +#####.##. +###.#.... +###.#.#.. +###.#.#.. +###.#.... + +..#...# +..#...# +.....#. +#.#.#.# +.###.#. +###.#.. +##....# +#.#.#.# +###..#. +.###..# +.###..# +###..#. +###.#.# +##....# +###.#.. +.###.#. +#.#.#.# + +.###..... +...###..# +....##.#. +#.#..###. +#.#..###. +....##... +...###..# +.###..... +.###..... +...###..# +....##... + +########...##.# +########.#.#... +##.##.####.#### +########.##...# +#......##..#### +##....##.###..# +##.##.##.##..## +##....###..#### +###..#####..##. +..####...#####. +..####...#####. +..####......#.# +#########.##..# +..........##.#. +..#..#...###..# + +###.#.###.... +####...##..#. +..#..##...##. +..##.#######. +###.#.####..# +##.....####.. +...####..#..# +..###.#.#.##. +##....###...# +..##..##.#### +###.##.####.# +..####.....## +...#.#..#.#.. +...#.#....#.. +..####.....## + +#..#... +.##...# +.##..#. +.##..## +.##.#.# +.##.#.# +.##..## +.##..#. +.##.... +#..#... +....#.# +.##.... +####.## +####.#. +....### + +#.#..#.#.#.....#. +...##...#.#.#.#.# +.######.#.......# +..#.##..#..###.## +###..####.##.#..# +#......######.... +############.#.## +.#.##.#...#.##### +.#.##.#.##..#.#.. +.........#.#.#.## +........#.#.#..## +###..####.##.#..# +.##..##..#.###..# +.##..##..#.###..# +###..####.##.#..# +........#.#.#..## +.........#.#.#.## + +###.####.###### +....#.......##. +.#..####..#.##. +#.##.##.##.#### +.#..#..#..#.... +..#..##..#..##. +#...####...#..# + +....### +#...#.# +.###### +..##### +....#.. +.###.## +.##.#.. +..#.... +....#.. +..##### +.#...## +#...### +#...### +.#...## +..##### + +####.###..###.# +#.##.########.# +....##......##. +...##..#.##..## +....##.#..#.##. +##..#.#....#.#. +......##..##... +#..##........## +..#...#....#... +.##...#.##.#... +.##...#.##.#... +..#...#....#... +#..##........## + +.###.#..... +.##.##.#### +.####..#.## +#.##..#.##. +.#####..... +..##...#### +...#..#.##. +...#..#.... +...#..#.... +...#..#.##. +..##...#### + +.....#..#.. +...###..##. +#####.#.#.# +.##..#.#.## +#..#..#.#.# +#..######.# +....##..##. +....##..##. +#..######.# + +##.###.##.# +.##.#####.. +.#..#.##.## +.#..#.#..## +.##.#####.. +##.###.##.# +.#....#.### +.#....#.### +##.###.##.# +.##.#####.. +.#..#.#..## +.#..#.##.## +.##.#####.. +##.###.##.# +#..#..#.#.# + +###..###.#.## +.##..###.#.## +..###.#.#..#. +.#......####. +#...#...###.. +.#.#####.##.# +.#.#####.##.# +#...#...###.. +.#......####. + +.##.##...##...##. +#####..##..##..## +.....##..##..##.. +.##.#.#.####.#.#. +.##...#.#..#.#... +....#..........#. +#..#..#......#..# +....###.....####. +.##...#.#..#.#... +.....#..####..#.. +#..#...##..##...# +....#...#..#...#. +#..#.##########.# +#..##...####...## +#####.##.##.##.## + +...##...####### +.##..#..##..... +.#....#....#..# +.##..##.....##. +###..####.#.... +##.##.##.###..# +########.###..# +.#....#.###.... +#.#..#.##..#..# +..........##..# +########.##.##. + +..##..... +...###..# +#...##..# +.###.#### +##...#### +##....... +...##.##. +#..#..##. +...#..... +...#..... +#..#..##. +...##.##. +##....... +##...#### +.###.#### +#.#.##..# +...###..# + +.#..##..#.##... +..#.##.#..##### +.##.##..#..#.#. +.########.###.# +..#....#..#.##. +##..##..###.... +##..##..###.... +..#....#..#.##. +.########.###.# + +#####..###.#.## +###....##.#..## +##....####..... +...#.#..##.#.#. +..#.#..#.#..... +...#..###..#..# +..##..###..#..# +..#.#..#.#..... +...#.#..##.#.#. +##....####..... +###....##.#..## +#####..###.#.## +..###...#....#. +##.#...#..##... +###.#...##.#.#. +..###.#....#.#. +..#####...###.# + +..##.####..#..# +..#.###..##.##. +##.#..##.###..# +##.#.#.####.... +###..#.#.##.... +####.#.##.##..# +##.##....###..# +###########.... +..#.##..####..# +...##..#.#.#..# +....####.###### +..#...#.#.#.##. +###...##..##..# +##.#...#.#.#..# +##.#.#.....#### +..##..###.##..# +##.#.#....####. + +#..#..##... +#..#..##... +.#..#.#...# +#...##..### +###.###.### +##...##.### +..##...##.. +##....#.#.. +#.#...###.. +###.#...#.. +......##... + +#....###. +#....###. +.#..#.### +#....##.. +.......#. +#.#..###. +#.##.#.#. +.......#. +.####.##. +##..##.## +.####.#.# + +....#.##### +..#.#...... +###.##..##. +..#.#...... +.....#.#..# +.#...#.##.# +..###...... +#..#####..# +#.##...#### +##.###..##. +.#.##..#..# +..####.#..# +#......#### +##....#.... +#####..#### +#####..#### +##....#.... + +....#........ +#..#.#.#...#. +....#.......# +.##..#.##.... +....##...#### +#..#.##..###. +####.##....#. +####.#.#..##. +......#....## +....###..##.# +.##..#.#....# +.##..#.##...# +....###..##.# +......#....## +####.#.#..##. + +....### +.#.#### +..####. +##.#.## +##.#.## +..####. +.#.#### +....### +###...# +###...# +.....## + +.#...###... +..#.####### +#..#.##.### +....##..... +..#.##..### +...#.##.### +.#.##.#.... +.##.#..##.. +#.####...## +#.##....... +#.##...#... +#.####...## +.##.#..##.. +.#.##.#.... +...#.##.### + +.#..#.### +#....#... +######... +#....##.. +.######## +######... +##..##### +.#..#.#.. +.......## + +##....#.##..##. +#...#####.####. +.#.##.#....#..# +#.....#####.... +.#...#....####. +#.#..#...#..#.# +#.#..#...#..#.# +.#...#....####. +#.....#####.... +.#.##.#....#..# +##..#####.####. +##....#.##..##. +.##...#..#...## +#.######..##.## +........#####.. +........#####.. +#.######..##.## + +.#..#.#...##.#. +..#..#....#.### +#.#.#..#.#.##.. +#....##....#### +#.###.#.##.##.# +##..#...###...# +##..#...###...# +#.###.#.##.##.# +#....#.....#### +#.#.#..#.#.##.. +..#..#....#.### +.#..#.#...##.#. +.#....##.####.. +#.#.#####.#...# +#.#.#####.#...# + +.#.####.####.## +.#.#.#........# +###.#...#..#... +###.#...#..#... +.#.#.#........# +.#.####.####.## +..##..##.##.#.. + +#..####.#.##...## +.....###.#####..# +......##.#..##.## +....#.#.#.##.#..# +....#.#.#.##.#..# +......##.#..##.## +.....###.#####..# +#..##.#.#.##...## +#..####.#.#.####. +.##.####.#.#...#. +.##.###...##..##. +####.#.#...#.#..# +####.#.###.#..### +#..#####....##.#. +#..#####.#..##..# + +#.####.#### +##....##..# +#......#### +.#.##.#.... +..####..##. +..####..##. +.#.##.#.... +.#.##.##..# +.##..##.##. +..####..... +#.####.#..# + +..#.#..#.###....# +.#.######.##...## +#.#.###..##..###. +.#...#####.#..#.. +#.##.#.#..#.#..## +#.##.#.#..#.#..## +.#...###.#.#..#.. +#.#.###..##..###. +.#.######.##...## +..#.#..#.###....# +..#.#..#.###....# + +....#.##... +.#.#..#..## +.#.#..#..## +....#.###.. +.......#.## +..##.#...## +...#.#..... +####..#...# +#..#.#...#. +#..#.#...#. +####..#...# +...#.#..... +..##.#...## + +..######... +..#.##.#..# +#.##..##.## +#.##..##.#. +..#.##.#..# +..######... +##..##..##. +.#..##..#.. +.#..##..#.# +###....#### +..#.##.#... + +#......####.. +..#..#......# +.##..##.##.## +.#.##.#....#. +..#..#..##..# +#..##..####.. +##.##.######. +########..### +#..##..##.#.. +.##..##....## +.##..##....## +.######....## +...##...##... + +.####..## +..####### +.#......# +##..#.#.. +####..#.. +..#....#. +..#....#. +####..#.. +##..#.#.. +.#......# +..####### +.####.### +#..#.##.. +#..#.##.. +.####.### + +#.#..#..#...... +##...####..#.## +####..#.#..#.## +.##..###.#.#..# +..#.##.####.... +.#..##..##.##.. +##.###.##.#.### +#..#.#..#.##.## +##..#####....## +####..#.####..# +#.....#.####.## +......###....## +..#...###....## +.##.##.###..### +.##.##.###..### +..#...###....## +......###....## + +####..#.. +.....##.# +...###... +.....#.## +....##.#. +##.#.#.## +##.#.#.## +....##.#. +.....#.## +...###..# +.....##.# + +######...###... +#.##.#.##....## +......##..###.# +#....##....#.#. +.......##...#.# +#######.#...#.# +#######.#...#.# +.......##...#.# +#....##....###. +......##..###.# +#.##.#.##....## +######...###... +.####.##..####. +#.##.#..###.... +..##.....##.#.# + +#.######.##.#.# +#..####..#.###. +..........#.#.. +..#.##.#....... +..#.##.#....... +..........#.##. +#..####..#.###. +#.######.##.#.# +###....#######. +...#..#.....#.# +.#..##..#.###.# +.##.##.##.#..## +.#.####.#...##. + +##.#..#..##..#..# +##.#..##....##..# +#.#....#.##.#.... +....##.##..##.##. +###.##..#..#..##. +.#####...##...### +...#####.##.##### + +###..####.. +##...#..... +##...#..... +###..####.. +#.#......## +.##....#.## +.###.#....# +#..##....## +.##......## + +........#..## +........#.### +........#..#. +#######.#..#. +.#..#...####. +##..###.###.# +#.##.#....### +########..... +#....##.....# +##..###..###. +.#..#.#.####. +......####..# +..##..##.#... + +....#.#..##.#.#.# +....#.#..##.#.#.# +..#####.##...#.#. +###..#..##....#.# +###.#....#...#### +#..#..#.#...###.. +#....###.#.###### +..#..##.#..#..##. +..#..##.#..#..##. +#....#.#.#.###### +#..#..#.#...###.. +###.#....#...#### +###..#..##....#.# +..#####.##...#.#. +....#.#..##.#.#.# + +...#.##...### +...#.##...### +...##.###..## +.##..#.##...# +#..#..#.#..## +.#....##.#.## +..#.#.###..#. +..#.#.###..#. +.#....##.#.## +#..#..#.#..## +.##....##...# +...##.###..## +...#.##...### + +###.######. +##.#.####.# +..#.#.##.#. +..#.#.##.#. +...#.#..#.# +..##.#..#.# +##...####.. +..###....## +###.#.##.#. +##.#.#..#.# +##......... +####.####.# +###..#..#.. +..#......#. +....#....#. + +#..###.##..##.# +.##...#......#. +##.###.##..##.# +##.#.########## +###.##.######.# +#.#...#......#. +..#..#........# +..#..#........# +###...#......#. + +..#.####. +..##.##.# +###.#..#. +#.#...... +.....##.. +.#.###### +.######## + +..#..#..###...##. +#####.#...#..#... +.......#.#.#.##.# +#...#.........##. +.#.##.#.....#.... +.#.##.#.....#.... +#...#.........##. +.......#.###.##.# +#####.#...#..#... +..#..#..###...##. +#..#..#...#...### +#.#.#.###.#...#.. +#.#.#.###.#...#.. + +....#..#..... +##........### +#....##....#. +##........##. +...#.##.#.... +####....####. +.....##...... +....#..#..... +..##.##.##... +..##.##.##... +...##..##.... +.....##...... +####....####. + +...........#. +.........#.#. +##.##.##..### +.........##.# +#..##..###### +#.#..#.#..#.# +..####..#.#.. +..#..#..#.### +#.#..#.#...#. +.##..##....#. +########.#.## + +.##......##..##.# +.##......##..#..# +.#...##...#.#.... +...#....#...#...# +.#.##..##.#..#.#. +..##.##.##......# +###..##..###..### +.####..####.#.#.# +............##.## + +...##....##.... +.####.##.####.. +.####.##.####.. +##..##..##..### +.#.#.#..#...#.. +##.#.####.#.### +#..#..##..#..## +#.#........#.## +#...##..##...## +#....#..#....## +...#.#..#.#.... +##.###..###.### +####.####.##### + +..#...##...#. +#.##.####.##. +##.#..##..#.# +....######... +....##..##... +...#.#..#.#.. +##.#.####.#.# +..###.##.###. +###.#.##.#.## +..#..####..#. +....#.##.#... + +#......##..##.. +#.####.#.###### +...##....##..## +...##...#.#..#. +##....##.##..## +..#..#.###.##.# +#.####.#.#....# +##....##.##..## +.#....#...#..#. +...##...#.####. +#.#..#.#.#.##.# +..####..#.#..#. +#########.#..#. +...##.......... +.##..##....##.. +.######..###### +###..###....... + +#..#......#.# +#####.#..#.## +....###..###. +#..##.####.## +.##..#....#.. +#..##.####.## +.##..######.. +#..##..##..## +####..#..#..# +.......##.... +.....##..##.. +######.##.### +.##.########. + +######.#. +##..#.#.. +##..###.# +##.##.#.. +.##...##. +#....#### +#....#### +.##...##. +##.##.##. +##..###.# +##..#.#.. +######.#. +######.#. + +.##..#### +.###.##.# +.####.... +..#.###.. +.#..#.... +.######## +.##.##... +.###..### +.##..#### +##.#..... +##.#..... + +#..#.#....#...... +######.######.##. +####..####...##.# +.##...##.####.#.. +.##...##.####.#.. +####..####...##.# +######.######.##. +#..#.#....#...... +###.#######.....# + +#..##.###.##### +#..######.##### +.####.##.#.##.# +..#.##...#.#.## +#..######...#.. +#..######...#.. +..#.##...#.#.## +.####.##.#.##.# +#..######.##### +#..##.###.##### +####.####.#..#. + +.........####.##. +#####.#.#..#.##.# +.##.##...#...#.#. +#..#...#.#.....#. +#..#...#.#.....#. +.##.##...#.#.#.#. +#####.#.#..#.##.# + +.##..###### +#####.####. +#..##.#..#. +.###.###### +.##.##....# +#####...... +.##.#...... +.##........ +####...##.. +####....... +#..##..##.. +.##..###### +####.##..## +......#..#. +.##.#.####. +....####### +#####.#..#. + +#.##.#..##..#.# +.#..#..####..#. +.#..###....###. +#######....#### +.####.##..##.## +.#..#........#. +##..####..####. +#.##.###..###.# +#.##.##.##.##.# +.#..#..####..#. +.####..####..## +.#..#.######.#. +......#.##.#... +##..##.#..#.##. +.####.##..##.## + +###.####..# +##.#......# +...#..#...# +...#..#...# +##.#......# +##..####..# +##.#.#.#..# +..###.###.# +####.#.###. +##..#.#.### +...#....#.. + +.###..##..### +..#.##..###.. +##..#.#####.. +##..#.#####.. +..#.###.###.. +.###..##..### +..###....#.#. +...###..##..# +..#..#..#..#. +.##..##.....# +.##..##.....# + +...#.#..# +###..##.. +...#.##.. +##......# +##......# +...#.##.. +###..##.. +.....#..# +##.##.### +######.#. +.....#### + +.##...####### +....##.#.##.# +.##...##..... +.##..#..####. +######..####. +.##..##..##.. +.##.#..#....# +####..#..##.. +....#...####. +....#....##.. +#..#.##...... + +..##..# +.#.#..# +.#..##. +..##..# +..##..# +.#..##. +.#.#..# +..##..# +##.#### +.#.#..# +#.#.##. +.##.##. +#..#### +#.##... +#...... + +###.##....##.#### +###..######..#### +.....#.##.#...... +.#.###.##.###.#.. +..#.##....##.#... +###..#.##.#..#### +###..#....#...### +.#.#........#.#.. +.#..#.#..#.#..#.. + +.##.#.##..... +#.##.#.###... +#....##...#.. +....##.#..### +#.#.#.#...### +.#..###...#.. +##.....#...## +......#..#... +.##.#..###.## +#.###.#.#..## +#.#####...### +..#.#....##.. +..#.#..#.##.. +#.#####...### +#.###.#.#..## + +...##.#######.... +.....#..#..###### +##..#..###....#.. +##.#.#..##.###.## +..#.#.#..##.###.. +..#..#..##.##.#.. +.##..#..#..#.#.## +##...##..###..... +.......#.#.###### +####.##.#...#..## +###.#.#.##..##.## + +##.#.#..... +.#..###.#.. +####.#..### +##.....#... +.#.#.#...## +##...#.#### +..###...### +####..#.... +####.##.... +..###...### +##...#.#### + +###.#..#.## +..#......#. +...#.##.#.. +##..#..#.## +####.##.### +..###..###. +##.#....#.# +###......## +...#.##.#.. +####.##.### +###..##..## +##.##..##.# +...#....#.. + +#..###...####.. +#.####...####.. +##.###...####.. +...#..#..#..#.. +##...###..##..# +.##.##..#.##.#. +.#.#.#.###..### +#####.#.######. +.###.####....## +####...######## +.#..#.###....## +#........#..#.. +#..#.#.######## + +#...#..######.# +#.#...#....##.. +#.#...#....##.. +#...#..######.# +###.####.###... +.#.#..#..#..#.. +.#.#.###...#..# +######..#..#.#. +.#.####..#....# +#.....#..#.#.## +.##...#.#.....# +##...###..#.##. +...#...##.#..#. +#.#.#..#.##.#.. +#.#.#..#.##.#.. +...#...##.#..#. +##..####..#.##. + +#.#.##..#.. +...###..### +.####.##.## +##..##..##. +##.######## +.###.####.# +####......# +.#...#..#.. +###...##... +##...#..#.. +##.#.#..#.# +##.#.#..#.# +##...#..#.. + +..#.##.###. +..#.##.###. +#.######.## +.#..#..###. +.#.#....... +.#.#....... +.#..#..#.#. +#.######.## +..#.##.###. + +###........###### +..#.#....#.#....# +.#.##....##.#..#. +###.##..##.###### +...##.##.##...... +..##......###..## +.#.########.#..#. +.##..#..#..##..## +##..#....#..####. +.##.#.##.#.##..## +.###..##..###..## +##.#......#.####. +###........###### +.#.########.#..#. +.##...##...##..## + +#.#.#.#..#.###. +##....##.#.#... +#.#.###.#.....# +..##.##..###.## +..############# +..#######....## +..#....##.####. +..#....##.####. +..#######....## +..############# +..##..#..###.## +#.#.###.#.....# +##....##.#.#... +#.#.#.#..#.###. +#.#.#.#..#.###. + +........###.###.# +........###.###.# +.#.##.#..##..#.#. +###..###.#.#.##.# +##..#.##.#####... +..#..#..#..###.## +...##....#.##..## +##....##.####.... +#.#..#.##.#.##..# + +....#.#.###.#.. +.##........#### +.##.##..#.##.## +####.#...#..#.. +.......##.##.## +####..##.#..### +.##..###..##.## +...#.##.#....## +....####.#.#... +#..#######..#.. +#..###....#.### +.....#..#.#.### +.##...#.###..## +.......#..##.## +#..#..##...#### +.##.##.###..... +#..#.##.#.#.... diff --git a/2023/rust/day13/src/lib.rs b/2023/rust/day13/src/lib.rs new file mode 100644 index 0000000..03af2b8 --- /dev/null +++ b/2023/rust/day13/src/lib.rs @@ -0,0 +1,146 @@ +pub fn part1(input: &str) -> u32 { + let mut res: u32 = 0; + + let m: Vec<Vec<String>> = input + .trim_end() + .split("\n\n") + .map(|x| { + x.split('\n') + .map(|y| y.chars().collect::<String>()) + .collect() + }) + .collect(); + + for s in m { + let n = s.len(); + + // Search by column + // 012345678 + // >< + // #.##..##. + // ..#.##.#. + // ##......# + // ##......# + // ..#.##.#. + // ..##..##. + // #.#.##.#. + // >< + // 012345678 + // + let m = s[0].len(); + let mut mc = 0; + for i in 0..m { + let mut j = m - 1; + while j > i { + let mut s1 = String::new(); + let mut s2 = String::new(); + for k in 0..n { + s1.push(s[k].chars().nth(i).unwrap()); + s2.push(s[k].chars().nth(j).unwrap()); + } + if s1 == s2 { + mc = std::cmp::max(mc, i); + } + j -= 1; + } + } + + let mut check = true; + + let mut i = mc; + let mut j = mc + 1; + + while i > 0 && j < n { + let mut s1 = String::new(); + let mut s2 = String::new(); + for k in 0..n { + s1.push(s[k].chars().nth(i).unwrap()); + if j >= s[k].len() { + break; + } + s2.push(s[k].chars().nth(j).unwrap()); + } + if s1 != s2 { + check = false; + break; + } + i -= 1; + j += 1; + } + + if check { + res += (mc + 1) as u32; + continue; + } + + // Search by row + let mut mc = 0; + for i in 0..(n / 2) + 1 { + for j in ((n / 2)..n).rev() { + if s[i] == s[j] { + mc = std::cmp::max(mc, i); + } + } + } + + let mut check = true; + + let mut i = mc; + let mut j = mc + 1; + + while i > 0 && j < n { + if s[i] != s[j] { + check = false; + break; + } + i -= 1; + j += 1; + } + + if check { + res += (mc + 1) as u32 * 100; + continue; + } + } + + res +} + +// pub fn part2(input: &str) -> u32 { +// let mut res: u32 = 0; +// +// res +// } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn example_part1() { + let input = include_str!("../example.txt"); + let result = part1(input); + assert_eq!(result, 405); + } + + #[test] + fn input_part1() { + let input = include_str!("../input.txt"); + let result = part1(input); + assert_eq!(result, 2331); + } + // + // #[test] + // fn example_part2() { + // let input = include_str!("../example.txt"); + // let result = part2(input); + // assert_eq!(result, 2286); + // } + // + // #[test] + // fn input_part2() { + // let input = include_str!("../input.txt"); + // let result = part2(input); + // assert_eq!(result, 71585); + // } +} |