From 4f06bb8fe5ecc9c8ce2143b08bfc33014d110118 Mon Sep 17 00:00:00 2001 From: JonOfUs Date: Wed, 13 Dec 2023 11:55:51 +0100 Subject: [PATCH] d13 --- res/13/example | 15 + res/13/input | 1349 +++++++++++++++++++++++++++++++++++++++++++++++ src/days/d09.rs | 2 +- src/days/d13.rs | 143 +++++ src/main.rs | 3 +- 5 files changed, 1509 insertions(+), 3 deletions(-) create mode 100644 res/13/example create mode 100644 res/13/input create mode 100644 src/days/d13.rs diff --git a/res/13/example b/res/13/example new file mode 100644 index 0000000..f226414 --- /dev/null +++ b/res/13/example @@ -0,0 +1,15 @@ +#.##..##. +..#.##.#. +##......# +##......# +..#.##.#. +..##..##. +#.#.##.#. + +#...##..# +#....#..# +..##..### +#####.##. +#####.##. +..##..### +#....#..# \ No newline at end of file diff --git a/res/13/input b/res/13/input new file mode 100644 index 0000000..8b26ae2 --- /dev/null +++ b/res/13/input @@ -0,0 +1,1349 @@ +.##.##....##... +.....#.#.#..#.# +.....#.#.#..#.# +.##.##....##... +..###.#.##..#.# +#.###.#.####### +##..#..###.#### +##.#.#.######.# +..#.#....##..#. +..###..##...... +....#...#.#...# +....#...#.#...# +..###..##.#.... +..#.#....##..#. +##.#.#.######.# + +##..#...#.#..#. +##.###...###..# +...#.#####....# +..##.#####....# +##.###...###..# +##..#...#.#..#. +..#..###.#####. + +###......#.###. +#..#.##....##.# +##.#.##....##.# +###......#.###. +#..###.#..#.... +..#.....##....# +#..##..###.#..# +#..##..###.#..# +..#.....##....# +#..###.#..#.... +###......#.###. + +#####..#..##..#.. +##..#............ +.##.##..######..# +#..#.#.#..##..#.# +.#.#..##..##..##. +...#....##..##... +##.#..##.#..#.##. +.##..#.########.# +..#####.##..##.## +.###.#.#.#..#.#.# +.###.#.#.#..#.#.# +..#####.##..##.## +.##..#.########.# +##.#..##.#..#.##. +...#....##..##... +.#.#..##..##..##. +#.##.#.#..##..#.# + +#.#.####### +#...#.#.##. +##..#.#.##. +#.#.####### +##.#.##.##. +.##..#.#..# +#..#####..# +#.##.#.#### +.##.####..# + +......##...###. +.###.#.#..#.#.# +#.#....###.###. +..#..#.#####..# +#.#...#.#...##. +#.#...#.#...##. +..#..#.#####..# +#.#....###.###. +.###.#.#..#.#.# +......##...###. +.#..####...#### +.####.######... +.####.#######.. + +...####...#.#..## +###....#####..#.. +...####.....###.. +.##....##..##..## +..######..##..#.# +...####.....#.##. +....##.....#.##.. +##..##..###.##### +...#..#.....###.# +##.####.###.#.... +##..##..##.#.#### + +#..###...###... +#.##..#.#...##. +#.#...#.#.####. +###....##...##. +##.....#.###... +.#.....#.##...# +.#.....#.##...# +##.....#.###... +###....##...##. +#.#...#.#.####. +#.##..#.....##. +#..###...###... +.##.####.#####. +.####.##...##.# +.####.##...##.# + +..#.#####.... +..#.#####.... +#.#.#.###..#. +.#.#.....#.## +..#.###.....# +.##...##..... +#....#.....## +..####.#..... +.#.###..##.## +#..#####.#.## +#..#####.#.## +.#.###..##### +..####.#..... + +.#.##.###.. +#...##.#.## +..#.#...#.# +..#.#...#.# +#...##.#.## +.####.###.. +##..#.##.#. +.####.#...# +...###.#.## +.#.#...###. +.#.#...###. +...###.#.## +.####.#...# +##..#.##.#. +.####.###.. + +.#..#..#..##. +##..#..#..##. +####..#...### +.#..####....# +.###.#.#....# +.#.##..#..#.# +.....##...... +....##..#..#. +###.##.#..##. +#.#....###... +#.#....###... +###.##.#..##. +....##..#..#. +.....##...... +.#.##..#..#.# + +..##..# +####.#. +...#... +...##.. +####.#. +..##..# +..#.#.# + +.##.##.##....## +#..#..#..####.. +#..####..#.##.. +#.#.##.#.#..#.# +..######..##..# +###.##.######## +#.######.####.# + +#.##.##..##.# +..##..######. +...#.##.###.. +.#..##.#.#.#. +.#.#.#.##..## +.#.#.#.##..## +.#..##.#.#.## +...#.##.###.. +..##..######. +#.##.##..##.# +##..#...#..#. +.#.#..#..##.# +##..#####.#.. +##....##.#.## +##....##.#.## +##..#####.#.. +.#.#..#..##.# + +#.##.## +...##.. +##..##. +#...#.. +#...#.. +##..##. +#..##.. +#.##.## +##.#..# +##.#..# +#.##.## + +....##..... +##.####.### +##..##..### +.########.. +.#......#.. +.########.. +..######... +###.##.#### +..#.##.#... +....##..... +##.#..#.### +####..##### +##.####.### +..#....#... +##..##..### +##.####.### +.....#..... + +###..###...##.. +###..###..#.### +.######.####... +..####....##### +##.##.##..#.### +#......#.#..#.. +#.#..#.###..#.. +#..##..##.#.... +#.####.#.####.. +.#.##.#.##.#### +.######...###.. +##....##.#.###. +........#.##### +##....###..##.. +#########..##.. +.######..####.. +##.##.#####.### + +##...#.#.###..# +#.####..#.##.#. +.##.##..#.##.#. +###..#..#.##.#. +.#.##...##..##. +.#...#..######. +.###.#......... +.###.#####..### +.###.#####..### + +########.#.## +########.#.## +..#.#.#.###.# +#..#.###..#.# +..#..######.# +###....#.#.## +..#..#.#..### +..#..#####... +...###.#.#..# +##....#.#..#. +....#....##.. +.....#####... +###.###.#.... +..###..#...#. +##.#...##...# +###...##.##.. +##.#....#.#.# + +....######. +#..###..### +.....#..#.. +#####.##.## +.##...##... +....######. +....##..### +.##.#.##.#. +.##.######. +.##........ +....######. +.##..#..#.. +#..#.#..#.# +.##.#....#. +####..##..# +....######. +#..#..##..# + +##.#....####### +..###...##..##. +..###......###. +...#...#....##. +######.##.###.. +..###.......#.# +##.#.###..##.## +###.###.######. +##...###.#...#. +..##.##.#.###.. +..#.#..###..#.. +...#..#..###.## +..##.....#..#.. +..##.....#..#.. +...#..#..###.## +..#.#..###..#.. +..##.##.#..##.. + +.#..####.#. +.#..####.#. +..........# +.#..######. +.#...##.##. +#####.####. +#..#....### +#..#....### +#####.####. +.#...##.##. +.#..######. +#.........# +.#..####.#. + +####.#. +##..#.# +###..#. +..#.#.. +..#.#.. +###..#. +##..#.# +.###.#. +.###.#. +##..#.# +###..#. + +.#....##.#.###. +.....####.#..## +....##.####.##. +##...##..###.## +.#.#..#.###..## +####.#.#.##...# +.#.###.##.#..#. +.#.######..##.# +.#.######..##.# +.#.###.##.#..#. +####.#.#.##...# +.#.#..#.##...## +##...##..###.## +....##.####.##. +.....####.#..## +.#....##.#.###. +.#....##.#.###. + +###..######## +########..### +.##..##....## +##.##.##..##. +###..######## +.#....#.##.#. +.##..##....## +..#..#..##..# +.######....## +.##..##.##.## +##.##.######. +..#..#..##..# +.#.##.#....#. +#.####.####.# +.##..##....## +##.##.##..##. +..#..#...#..# + +##..#...# +.##.#.##. +......#.. +##.####.. +...###..# +###.##.#. +###.##.#. + +###..###.####.. +###..###.####.. +#.####.#..##... +........#....#. +##....##..##... +#.#..#######... +..####...#.##.# +..#..#....#.#.# +..####...####.. + +####.##..###..### +...##.###...###.. +..###.#.#####.#.. +##.#..#####.#.#.. +.#..#.#.#...#.### +...##..##...##.## +...#..#.###..#... +..###.##.#.#..... +#.##..##..#.#..## +.######...####... +.######...####... +#.##..##..#.#..## +..###..#.#.#..... + +..##.#### +.#....##. +.##..#..# +..#.#.### +.##..#..# +##.#.#..# +##.#.#..# + +..###..#..#....#. +...##..##.######. +...##..##.######. +..###..#..#....#. +..##.##.##.#..#.# +#...#.###..####.. +.##....#..##..##. +######...######## +######.#####..### +.#....#..#......# +##....#.#.######. +.##.###.#..####.# +#.#.#####..#..#.. +#####.#.##.#..#.# +#.#######........ + +..######### +...##.##.## +###........ +##..##..##. +..#........ +..##..##..# +###..####.. +...#.#..#.# +##..#....#. +..#...##... +...##....## +##.#.#..#.# +####...#..# +..##.####.# +...#..##..# + +...#.#### +..###..## +.###.#..# +###.##.## +.##...### +###.##... +###.##... +.##...### +###.##.## +.###.#..# +...##..## +...#.#### +.##....## +.##....## +...#.#### + +..#...##. +#.#.##..# +######..# +...#.#..# +#...#.... +.#...#### +.#...#### +##..#.... +...#.#..# + +..#..###.#. +..#.####.#. +.###....##. +##.#...###. +#..##..#..# +#..##..#..# +##.#...###. + +...########...# +#.#........#.#. +#....#..#....#. +...#......#...# +.#...#..#...#.# +#.#..#####.#.## +..#..####..#... +..###....###... +..#.#.##.#.#..# +..#...##...#..# +..#...##...#..# + +..#..###.##..##.# +..#..#.#.##..##.# +##....#.#.####.#. +#.#.###.......... +...#..##.#....#.# +...###..#.#..#.#. +...##...#.#..#.#. +#..#.##.###..###. +#..##.####....### +.#.#...#.##..##.# +#....##..##..##.. +#.#.....#.#..#.#. +##.#.###..#..#..# +.##.....#......#. +#..#....########. + +#####.. +..####. +..####. +###.#.. +..#.... +###...# +.#..##. +...#.## +...##.. +.#...#. +.#...#. +.###### +.###### +.#...#. +.#...#. +...##.. +...#.## + +.#.#### +.#.#..# +#...... +#..#### +###.... +.#.#### +###.... +###.... +##.#### +###.... +#..#### +#...... +.#.#..# + +...##.#.#..###..# +###.#...#...#..#. +.#.#.##.#.#..##.# +.#.####.#.#..##.# +###.#...#...#..#. +...##.#.#..###..# +#....#...##..#.## +#.#...#####....#. +#.#...#####....#. +#....#...##..#.## +...##.#.#..###..# +###.#...#...#..#. +.#.####.#.#..##.# + +..####.#... +..##.#..#.. +..##.#..#.. +..####.#... +..#..#.#.## +...##..##.# +..#.#.##.## +....#.#..## +#####..#..# +###.#.#.### +...#.####.# +.....##.... +#.#.....#.. +....##...#. +##....##... + +#####....###..### +#####..#.###..### +#####.####....#.. +.#..#....#.#.#.## +#....#......#..## +#..#.##.##..#.#.. +.###..##.#.#..... +..#..#.###..##### +..#....#..#.##... +#.#.###.#.#.#.... +..#.....###..#### +.##.###.##.##..## +#.#.##....##...## + +##..#.####.#..# +###.########.## +.#..#......#..# +######.##.##### +##..#......#..# +##..##....##..# +#.##.#.##.#.##. + +##.####..## +..#.#..##.. +...#.###### +.###.###### +###....##.. +##...###### +.###...##.. +..#.#..##.. +.##...#..#. +.##........ +#..#.###### +#...###..## +#....###### +.#......... +#.###..##.. +###....##.. +#.######### + +#.##...###..##..# +#.###.###...#.#.. +#.###.###...#.#.. +#.##...###..###.# +#...#....#...#.#. +#....##.##..##### +..##..#####.##..# +###.#####.#.###.# +#####..##.#####.. +.#..#.##.#.#...## +##.....#.#.#.###. +##.....#.#.#.###. +.#..#.##.#.#...## + +...####.###.###.. +###.#.#..###.#.## +...#######..#.... +...####..#..##... +......#.######### +....#.#..####.### +.....#....##..##. +....#..##..#.#.## +..#..#...#.##.#.. +...#..##.#.##..## +...#.#.#.#.#.##.. +###.#.##...#..### +..####..###..#... +..#..#.#.....#### +.....#.###..##.## + +..##### +#..#.#. +#..##.. +.....## +#.#..## +.#.#### +####.## +####... +..##... +.#..... +.#..... +..##... +####... +####.## +.#.#### + +.##.##.##.. +.##.##.##.. +###....###. +#.##..##.## +#...##...#. +.#.####...# +####..####. + +#..##.#.#..#....# +####.##.###..##.. +##....#.##..####. +#...#####.####### +#....####.####### +##....#.##..####. +####.##.###..##.. +#..##.#.#..#....# +#..####.###...... +##..#..##.####### +..#.#....#.#....# + +###.#..#. +.#.#...## +.###...## +###.#..#. +...#..### +###.##.## +.#.#.#..# +#.....#.# +.###.##.# +#.#.#...# +..#...... +#.#..###. +....##... +#.#....#. +.....#### +.....#### +#.#....#. + +..##.##.##....### +..##.##.##...#.#. +##..#..#..##..##. +.##......##.#..#. +.##......##.#..#. +##..#..#..##..##. +..##.##.##...#.## +..##.##.##....### +..#.#..#.#..#.##. +.##.####.##.##..# +##..####..####... +.###....###.####. +.#........#.#...# + +..#####..#..#.. +##......#.##.#. +####.##.##..##. +###..##.#....#. +##.##..##....## +##..#..#..##..# +#...#..##....## +..#..#......... +..###.#.#.##.#. +...#..#..#..#.. +.....##.######. + +####.#..#.##. +####.####.### +...#.#..#.#.. +##.#......#.# +...#.#..#.#.. +..####..####. +###.#.##.#.## + +..###..##.. +.#.#.#....# +.###.##..## +..#..#.##.# +.#.##.#.... +..##.##..## +#...###..## +#...###..## +..##.##..## + +..##.#.#.## +#.##..##### +#.......... +#....#..... +#.##..##### +..##.#.#.## +###.#..#..# +...##.##..# +#.####.##.# +...#..#.... +.#.##....## +.#.##....## +...#..#.... + +###..#. +...#..# +..#.### +###.### +...#..# +###..#. +...#### +...#### +..##.## +..#...# +...#.## +##..#.. +..#.... +..#..## +..#.### + +#....#.#.#... +#.###.###.### +.####..##.#.. +....#...##.## +.#####....... +.#####....... +....#..###.## + +..##..##..# +##...#.#### +#...##.#..# +##...###### +##.##..#### +#.....#.##. +#..#..#.##. + +.#..#...#...##. +.#..#...#.#.##. +###...####..##. +###...##.#..... +.#.#..#....#### +.#...####.#.##. +...#####...#### +##.##.#.###.##. +####..##...#..# + +.....#. +.....#. +###.... +######. +##..#.. +#.#...# +#...... +#...... +#.##..# + +########.##.# +######.##..## +#.##.###.##.# +.......###### +.#..#..###### +##..##..#..#. +.####.####### +..##....####. +#.##.######## +#.##.###..... +#....#..####. +##..##.#.##.# +#....#.#....# +.####........ +......#.####. + +.#.#.#..### +..#.#####.. +.#...#...## +###..#.#.## +.####..#... +.#.#.#...## +...##...... +#.....##.## +.##...#..## +#######.#.. +.######.#.. +.##...#..## +#.....##.## +...##...... +.#.#.#...## + +#####........#. +...#.##.##..#.# +..#.#.###.#.### +...###.####.... +##...#.#..#.... +##...#.#..#.... +...###.####.... +..#.#.###.#.### +...#.##.##..#.# +#####........#. +.#...##...#.##. +.#.####.##.#.#. +.#.####.##.#.## + +.#...#.##.. +##.##.#.### +##.#.....## +.........## +..##.#..### +.#.#.#.##.. +#.......### +#.......### +.#.#.#.##.. +..##.#..### +.........## +##.#.....## +##.####.### + +....#..#....#.... +##...##...##..##. +#.##.##.##.####.# +###.####.######## +###.#..#.######## +..###..###......# +.#.######.#....#. +..#.#..#.#......# +.#..####..#....#. +..#..##..#..##..# +##.#.##.#.##..##. +#..##..##..####.. +####.##.######### +#.#.#..#.#.####.# +...#.##.#........ + +##.##.##.#.#..#.# +#.####.########## +...##...#..####.. +..#..#..#.######. +.#....#.##..##..# +.#....#.#.##..##. +#..#...#......... +..#..#.....####.. +.#....#.###....## +..........##..##. +..#..#..######### +..........#.##.#. +.#....#.#........ +...##............ +..#..#..#.######. +.######.#...##... +###..###.###..### + +...#....##.## +###.####.###. +###.####.###. +...#....##.## +.#..####.##.# +..#...#....#. +#..#..#..##.. +###.##..#..#. +..#####.###.. +####......... +.####.##..##. +.#.#.###..##. +.#.#.###..##. +.####.##..##. +####......... +..#####.##... +###.##..#..#. + +.#.############ +#....#.####.#.. +#.#.#...##.#.#. +..##.##....##.# +....##.#..#.##. +..##..######..# +#####........## +.#.##...##...## +.############## +####.########.# +####.########.# +.############## +.#.##...##...## + +##..######### +##..#.##.#.## +..###...#.### +#####...##.#. +#####...##.#. +..###...#.### +##..#.##.#.#. +##..######### +#####.#.##.## +##....#...#.. +##.#.####.#.# +##.##.###.... +...#.#.#....# +##.#..###.### +...#.##....#. + +####.###. +.######.# +.##.##.## +#..#.##.# +....#.#.. +#..#..##. +....#.### +########. +########. + +....#...# +#####.... +#####.... +....#...# +#..#.#### +#..#..#.. +.##...#.# +.##...#.# +.#.....## +#..#..##. +########. + +.#..####...#.## +.#..#####..#.## +##.#.#..#.#.... +#.#.##.#.##.... +.#.##..##..#### +.#....##...##.. +#.###..#.#.#.## + +#.#...# +#...##. +.#..... +.#.###. +.#.###. +.#..... +#...##. +#.##..# +#.##..# +#...##. +.#..... + +######. +#...... +..####. +.###### +#...... +.#.##.# +.#.##.# +#...... +.###### +..####. +#...... + +..####### +#.##.##.# +#.####### +.######## +....#..#. +..#...... +#.#...... +.#.#....# +.##.####. +#........ +.#...##.. +.#...##.. +#.#...... + +##...##...# +##.#....#.# +.....##.... +####....### +..##....##. +.....##.... +##.##..#### +..#..##..#. +###..##..## +.....##.... +##.######.# + +#..##.#....#. +#....#..###.# +#....#..###.# +#..##.#....#. +.##.#.....##. +.#.######.##. +.###.##.####. +..##.##.####. +.#.######.##. +.##.#.....##. +#..##.#....#. + +.##.... +#..#..# +..##..# +####..# +.##.##. +#.#.... +.#..... +#.#.... +###.... + +##.#.......#...#. +##...#....##..### +.#..#.#...###.### +.###.#..###.#.#.. +######..........# +######..........# +.###.#..##..#.#.. +.#..#.#...###.### +##...#....##..### +##.#.......#...#. +#####..##.#####.# +#..#.##...##.#### +#..#.##...##.#### + +..#..#..###.. +.####.##...#. +.###..######. +.###...#####. +.####.##...#. +...#.#.##...# +#...#..#.##.# +.######.##..# +#.##.##.#.### +#.##.##.#.### +.######.##..# +#...#..#.##.# +...#.#.##...# +.####.##...#. +.###...#####. +.###..######. +.####.##...#. + +#.#........ +..#.##.#### +##...###### +..###...... +##.##.##..# +......##..# +.#.##..#### +##..#.#.... +..##.#.#### +.#.#....##. +#####.#.##. +.####.#.##. +.#.#....##. +..##.#.#### +##..#.#.... +.#.##..#### +......##..# + +#####.#..## +#..###.###. +.##..####.# +.##..####.. +#..###.###. +#####.#..## +.........#. +.##...#.### +.##.####..# +....###.### +#######.#.. + +#.###.#.#.#.#.# +.##..###..###.. +..#.##...####.# +..#.##...#.##.# +.##..###..###.. +#.###.#.#.#.#.# +.....#....##.#. +.........#####. +......#.......# +..###.#####.### +.###..###.#.### +.##.#..#####.## +.##.#..#####.## +.###..###.#.### +..###.#####.### +......#.......# +.........#####. + +.#.##..## +...#..#.. +###..#.## +##...#.## +##.####.. +.#..##.#. +.#..##.#. +##..###.. +##...#.## +##...#.## +##..###.. +.#..##.#. +.#..##.#. +##.####.. +##...#.## + +.#.###....###.# +######....##### +######....##### +.#.###....###.# +.####..##..#### +##..##....##..# +.##.###..###.## +....#.#..#.#... +##.#.######.#.# +#.###..##..###. +..##.######.##. +##.#.######.#.# +..#.#.####.#.#. +.#....####.#..# +#.#..#....#..#. + +##.#.#...#.## +#...#..##.#.. +#...#..##.#.. +##.#.#...#.## +....##.##.... +.#....####.## +...#...##..#. +###.#..#...#. +....##...#.## +.#..##...#.## +###.#..#...#. + +........#..#.#.## +#.#..#.######.#.. +.#....#..#.###### +..####...#...#... +#..##..#.##.##... +##.######.#.#..## +#......#..#..#.## + +###.##..#..##..## +##.#.##.##..####. +..#.#.##.#..#..#. +##...#..#...####. +###.##.....#.##.# +...#.....#.#....# +...####..##.#.... +##.##.##..#...... +###...#..#.#....# + +##..##..######. +###....######## +###.##.######## +#........#..#.# +.#.####.#.##.#. +...####...##... +##########..### +##.#..#.##..##. +.##....##....## +##..##..##..##. +....##......... +##......##..##. +.#.####.#.##.#. +.##....##.##.## +.#.####.#.##.#. +.#.####.#.##.#. +#.#....#.####.# + +####..###..## +.#......####. +#...######### +#....#....... +.#.##.#.####. +.....##...... +.....##...... +.#.##.#.####. +#....#....... +#...######### +.#......####. +####..###..## +###..##.#..#. +.#..#.#...... +##..#.##.##.. + +#.##.## +....#.. +#..##.. +....### +.##.### +....### +####.## + +##.#### +..###.. +..###.. +##.#### +##..### +.#..... +#..#.#. +.#####. +...#.## +..#.##. +.#..... +....### +#.##... +..#.##. +..#.#.. + +####.## +..###.# +##.###. +..#.#.# +##.#.## +##.#.## +..#.#.# +##.###. +..###.# +##.#.## +##.#.## +##..### +##..#.# +..##... +##.#..# + +#.#.### +#####.. +#.#.#.. +...##.. +..#.#.. +#..#### +.####.. +.##.#.. +###.... +###.### +##.#### +.#.#### +##..#.. +.#.#... +.#..### +#.#.#.. +#.###.. + +..####..####.##.# +###..###..####### +..####....###..## +...##...###..##.. +..........###..## +##.##.####...##.. +.#.......#....... +#......##.####### +.##..##.#.#.####. + +#####.### +..######. +####..### +####..### +##......# +###.##.## +..######. + +.#.#....# +#.......# +#..#.###. +...#.#... +...#.##.. +#..#.###. +#.......# +.#.#....# +##....##. +.##.###.# +.##.###.# + +.###.#### +.#.#..#.. +###..#... +#..#..#.. +#.#####.# +.####..## +.####..## +#.#####.# +#..#..#.. +###..#... +.#.#..#.. +.###.#### +......##. +...#..#.. +......#.. + +#.#..##..#. +#...#..#... +..###..###. +#..##..##.. +.....##.#.. +##........# +..##.##.##. +.##......## +.##......## + +..##.###### +#.##.###### +###..###### +##..####### +.#.#..####. +....#...... +.#.#....... +#.#.####### +##.##...... +.###.#.##.# +......#..#. +.##........ +###.#...... +#...##.##.# +#.#..##..## + +##..##...##.. +##..##...##.. +#.##.#.#.#.## +.#..#.###.#.. +#....###.#.#. +##..##.#.#### +##..##....### +#........##.# +#.##.##..##.# diff --git a/src/days/d09.rs b/src/days/d09.rs index 494aba8..9efbaf9 100644 --- a/src/days/d09.rs +++ b/src/days/d09.rs @@ -1,4 +1,4 @@ -use std::{collections::HashMap, fs}; +use std::fs; pub fn solve() { let path = "res/09/input"; diff --git a/src/days/d13.rs b/src/days/d13.rs new file mode 100644 index 0000000..6d7691e --- /dev/null +++ b/src/days/d13.rs @@ -0,0 +1,143 @@ +use std::fs; + +pub fn solve() { + let path = "res/13/input"; + + let contents = fs::read_to_string(path).expect("I/O error, wrong path?"); + //let contents = BufReader::new(fs::File::open(path).expect("I/O error, wrong path?")); + + let patterns = contents + .split("\n\n") + .map(|block| { + block + .lines() + .map(|line| line.chars().collect::>()) + .collect::>() + }) + .collect::>(); + + let result: usize = patterns + .iter() + .map(|block| { + + // check columns + let mut ks: Vec = vec![]; + for k in 1..block[0].len() { + if (0..k.min(block[0].len() - k)).all(|j| { + let col1: Vec = (0..block.len()).map(|i| block[i][k - 1 - j]).collect(); + let col2: Vec = (0..block.len()).map(|i| block[i][k + j]).collect(); + col1.eq(&col2) + }) { + ks.push(k) + } + } + + if ks.len() > 1 { + dbg!(&ks); + } + if !ks.is_empty() { + return ks[ks.len() / 2]; + } + + // check rows + let mut ks: Vec = vec![]; + for k in 1..block.len() { + if (0..k.min(block.len() - k)).all(|i| block[k - 1 - i].eq(&block[k + i])) { + ks.push(k); + } + } + + if ks.len() > 1 { + dbg!(&ks); + } + if !ks.is_empty() { + return ks[ks.len() / 2] * 100; + } + + 0 + }) + .sum(); + + println!("Result 1: {result}"); + + let result: usize = patterns + .iter() + .map(|block| { + let mut smudge_repaired = false; + + // check columns + let mut ks: Vec = vec![]; + for k in 1..block[0].len() { + if (0..k.min(block[0].len() - k)).all(|j| { + let col1: Vec = (0..block.len()).map(|i| block[i][k - 1 - j]).collect(); + let col2: Vec = (0..block.len()).map(|i| block[i][k + j]).collect(); + if col1.eq(&col2) { + return true; + } + if col1 + .iter() + .zip(col2.iter()) + .filter(|&(a, b)| a != b) + .count() + == 1 + && !smudge_repaired + { + smudge_repaired = true; + return true; + } + false + }) { + if smudge_repaired { + ks.push(k) + } + } + smudge_repaired = false + } + + if ks.len() > 1 { + dbg!(&ks); + } + if !ks.is_empty() { + return ks[ks.len() / 2]; + } + + // check rows + ks.clear(); + for k in 1..block.len() { + if (0..k.min(block.len() - k)).all(|i| { + if block[k - 1 - i].eq(&block[k + i]) { + return true; + } + if block[k - 1 - i] + .iter() + .zip(block[k + i].iter()) + .filter(|&(a, b)| a != b) + .count() + == 1 + && !smudge_repaired + { + smudge_repaired = true; + return true; + } + false + }) { + if smudge_repaired { + ks.push(k) + } + } + smudge_repaired = false + } + + if ks.len() > 1 { + dbg!(&ks); + } + if !ks.is_empty() { + return ks[ks.len() / 2] * 100; + } + + 0 + }) + .sum(); + + println!("Result 2: {result}"); +} diff --git a/src/main.rs b/src/main.rs index 39693d8..ce34d93 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,9 +1,8 @@ pub mod days; #[macro_use] extern crate scan_fmt; - fn main() { - days::d12::solve() + days::d13::solve() //_all_days() }