diff --git a/src/input/day13 b/src/input/day13 index e69de29..097310f 100644 --- a/src/input/day13 +++ b/src/input/day13 @@ -0,0 +1,1365 @@ +#.......##. +.#.###....# +###...#.... +..#........ +###.##...#. +.#..##..### +####.#.##.# +...#.#.###. +..##.#.###. +.#...#.##.# +#.##..##### +#.##..##### +.#...#.##.# +..##.#.###. +...#.#.###. + +#####..######## +##.######.####. +.#.#.##.#.#..#. +..###..###....# +...##..##.....# +####....####### +#.#..##..#.##.# +#...#..#...##.. +...######...... +.#.#....#.#..#. +.###.##.###..## +...######...... +###.####.###### +#.###..###.##.# +#....##....##.. +.#........#..#. +.#.#.##.#.#..#. + +...##..##.... +..##.###...#. +...#.#.#.###. +..#...#.##### +...####...### +##.######.##. +.....##.#.##. +...##.#...#.# +####..#.##### +....#####.##. +...####..#..# +.....#.###..# +...#..#.#...# +..#.#.#...##. +....#.#...##. + +#..########....## +....#####..#..#.. +####.#....#.####. +##.....#..######. +..##.#...##....## +.##.#..#.##.##.## +#.#...###.#.##.#. +#....#.#.##.##.## +#....#.#.##.##.## +#.#...###.#.##.#. +.##.#..#.##.##.## + +###.#.... +..#.#.... +..##.###. +..##.###. +..#.#.... +###.#.... +...#..##. +###...#.# +.##..#### +.##..#### +.##...#.# +...#..##. +###.#.... +..#.#.... +..##.###. + +##...#.#..# +....##.#### +#####.#.##. +#####...... +.#######..# +######..##. +..##.###### + +##..... +.##.#.. +.####.. +##..... +#..##.. +.#...#. +.....## +.#####. +##.###. +#..##.# +.###... +.###... +#..##.# +##.###. +.#####. +.....## +.#...#. + +#..#.#...##.#.#.# +....##...#######. +#..##.#...#....## +......#..#.#.##.. +.##.###..##.#...# +......###..#.#.#. +....###.#.#...### +#..##..#.###...#. +#..###.###..#...# +..........##.#..# +#..#.#.........## +.##..###..##.#... +#####..###....### +#..#..##.###....# +#..#..##.###....# +#####..###....### +.##..####.##.#... + +....##.#### +##..#.#..#. +##..#...#.. +..#..####.. +..###.##### +##..#.#.#.. +####..##### +..#..#####. +..##.#####. +##..###..#. +#####.##### +...##....## +....##..#.# +#####.##..# +...##.##..# +...##.#...# +#####.##..# + +#..#..##### +....###.### +#..#..#...# +....##.#### +#######...# +.##....#... +####.##..#. +#.....#.#.# +####.#...#. +#..###..##. +#..##..##.# +.##..##...# +.##.#.##.#. +#..#.###... +#..#.###... +.##.#.##.#. +.##..##...# + +.##.##.##.. +#.######.## +.#..##..#.. +#.#.##.#.## +#.#....#.## +.#..##..### +##..##..### +##..##..### +.#.####.#.. +#..####..## +.#.#..#.#.. +.##.##.##.. +.##....##.. + +.....#..##..#.... +#####.#.##.#.#### +##.#..##..##..#.# +...#.#......#.#.. +....#.#....#.#... +##..##.#..#.##..# +..#...#.##.#...#. +.......#..#....#. +....#........#... + +..#.#.#.##... +.#.##....#... +.#.##....#... +..#.#.#.##... +########.##.. +##..#####.... +.##.#.##.#.## +..#.##.##.... +#####..#.#### +#.##..##.##.. +.#.###..#.#.# + +#...#....##.. +#.#..##..##.. +#.##.#.#..### +#.#########.. +#.#########.. +#.##.###..### +#.#..##..##.. +#...#....##.. +#...####.#### +.......##.... +######.##.#.. +....#..##.### +#.###.#...#.. +..#######.### +#.####.##.### + +..##### +####..# +###.##. +###.... +...#### +..##..# +....##. +##.#..# +##.#### +##.#### +...#..# +##..##. +####... + +..#.###.#..#.## +###............ +######..####..# +...##...#..#... +####....#..#... +.....#.##..##.# +....####....### +.......#.##.#.. +##.#.#.#.####.# +..###...####... +##.#.##..##..## +##.##.##.##.##. +#####...####... +###..#.######.# +.....#...##...# + +#...#.###.##..##. +..##.#.#..##..##. +.#.#.##.#.##..##. +..#.####.######## +.###.##.##..##..# +.#.#.#...######## +.....##..#..##..# +.#.#..#...##..##. +###.#.########### +#.###.##.#..##..# +#..##..##.######. +#####.##..##..##. +.###..####..##..# +..#####.#........ +##.###.##.##..##. + +########. +#....###. +......### +##..##.## +#.##.##.. +##..##### +.####.##. +.#..#..## +.#..#...# +######.## +######.#. + +##.#########..# +.....######.... +###..#....#..## +#####.####.#### +##...#.##.#...# +..#.#.#..#.#.#. +..#.##.##.##.#. +...#..####..#.. +..#...####...#. + +..##...#... +######.#### +..##...#... +#....#...## +..#...##... +..##...##.. +.####...### + +#.###..#.#.#### +.#........#.... +.#.######.#.... +.#...##...#.##. +..#.#..#.#..... +#..######..#### +.#.######.#.##. +###......###..# +#.###..###.#..# +##..#..#..##..# +.#.#.##.#.#.... +.#.##..##.#.... +#..#.##.#..#### + +####.#.## +####.#.## +##......# +#..#.#### +..#..#... +##..#.##. +...#..... +..###.#.. +###....## + +...##.... +###...... +###.##### +.....##.# +......#.# +..######. +.....#..# +##..####. +##.#.#.#. +#####..#. +....#.### +....#.##. +#####..#. +##.#.#.#. +##..####. +.....#..# +..######. + +##.#..#......#..# +##..##.#.##.#.##. +#.......####..... +#.##..##.##.##..# +..#.#..#.##.#..#. +##..##..#..#..##. +..#.##..#..#..##. + +..##.##.. +#....##.. +.#....... +..#####.. +..#.#...# +..###.#.. +#.#..#... +#.#.##### +.###...## +#####.### +#####.### + +#.#.#..##.#.# +#..#...#...#. +......#.###.# +#..###....##. +#..###....##. +......#.###.# +#..#...#...#. +#.#.#..##.#.# +#...####.#### +.###.##..###. +.###.##..##.. + +..#...# +.#..... +#..##.# +##.#.#. +..#.##. +#..#... +..#.... +....### +....### +..#.... +#..#... +..#.##. +.#.#.#. +#..##.# +.#..... +..#...# +..#...# + +.#.#.##.#.#...# +.#..####..#.... +##..#..#..##.## +##........##... +##........##... +##..#..#..##.## +.#..####..#.... +.#.#.##.#.#...# +...######...... +##...##...##... +#.#..##..#.##.. +.####...###..## +##.##..##.##### +###.#..#.###..# +..###..###..#.. +##.#.##.#.##... +.##.####.##.### + +#..#..#..## +###.##.###. +#..####..## +..#....#..# +.########.. +.########.. +..#....#..# +#..####..## +###.##.###. +#..#..#..## +....#...... + +#.#..#.#...#..#.. +##.##.##..#.#..#. +.#....#.#.###.### +.........##.####. +.........#...###. +###..###.#....### +###..###....#.##. +.##..##.##..#.... +...##.........### +#.#..#.#..#....#. +..####..##..##.## +#.#..#.#.##.....# +#.#..#.#.###....# + +.####.#..###. +.#..#.....### +.#..######.## +##..##.#..##. +........#.#.# +#.##.#.####.. +............# +............# +#.##.#.####.. +........#.#.# +##..##.#..##. + +.#..##..##. +.#.#.#.#### +#.####.##.# +####.###### +..###...##. +#.######### +..#.##.#### +#.#..#.#..# +#.#..###### +####.#.#### +####.#.#### +#.#..###### +#.#..#.#..# + +.##.###.##..... +##.##.#..#.#..# +#.##.##...#.##. +.#.....#.#.#### +.##...##.##.... +.##...##.##.... +.#.....###.#### + +.######..## +.........## +........#.. +########... +.##..##..#. +.##..##..#. +########... +........#.. +.........## +.######..## +..#..#..#.# +#.#..#.#.## +########... +#.####.##.# +##.##.##.## +..#..#..### +#.###..#..# + +#...##.###. +.#.#.#..### +##.#..#.### +..####.##.# +..####.#### +..#...##..# +#...####.#. +.##.###..## +.##.###..## +#...####.#. +..#...##..# +..####.#### +..####.##.# + +.####...... +.......##.. +......#..#. +#######..## +.####..##.. +#....##..## +.####.#..#. +##..##.##.. +#.##.###### +......#..#. +#....#....# +......####. +.#..#...... + +.....#.#.## +.....#####. +#####.####. +....#.####. +#..#....... +#####..#... +#..####.##. +#..#...#.#. +#..#...#.#. +#..####.##. +#####..#.#. +#..#....... +....#.####. +#####.####. +.....#####. + +.##.####.#.###.## +.##..###.#.###.## +..#...#.....##### +..#...#.....##### +.##..###.#.###.## +.##.####.#.###.## +.#.##....##..##.# +#.#####.##..#..## +.##.#..#.###.##.. +#..#.#.##...#.... +###...#.#.#.#.... +###.##..#..#.#..# +..#.#.##.....###. + +.##.#........ +##.#..#...##. +.#.....#..... +.###.####.... +#...##.#..... +###....###### +...#.#...#.## +#...#.##..... +##.#.#...#### +....#.####..# +#..#.#.###..# +####.##...... +####.##...... + +###........## +..#...##...#. +..#...##...#. +....#.##.#... +..#.######.#. +.....#..#.... +..#..####..#. +..###.##.###. +...#..##..##. +...#......#.. +...#.####.#.. +##.#......#.# +###..####..## +...###..###.. +....#.##.#... + +#####.# +#####.# +.#.##.# +###.##. +##.#.#. +##.##.# +..#...# + +..#...#.# +...#.#... +..##.#... +##.#..### +##..#.#.# +######..# +....####. +..#.#.### +..#.##### +....####. +######..# +##..#.#.# +##.#..### + +###.#.##.##.##.#. +...#..#.####.#..# +...#..#.####.#..# +###.#.##.##.##.#. +#....#.######.#.. +#.#.......#...... +....#....##....#. +##.#.....##.....# +#..##.##....##.## +.#..#.#.####.#.#. +#..#..#.####.#..# +#..#.##########.# +.##.##..#..#..##. +..###..#.##.#..## +.....#...##...#.. + +..##....##... +...#....#.... +.###.##.###.. +###.####.#### +...##..##.... +##..#..#..### +#...#..#...#. +....####..... +#...####...## + +##.#..##. +####...#. +.####.##. +..####..# +###...... +..#....## +####.#... +####.#... +..#....## + +####....#.# +##..#..#..# +...######.. +###.####.## +..########. +.....##.... +..###..###. +###..##..## +#####..#### + +#....#.#.###. +.#..####.#### +..#...###...# +#....####.### +.##.#..#.###. +####.###..#.# +####.###..#.# +.##.#..#.###. +#....####.### +..#...###...# +.#..####.###. +#....#.#.###. +...#.##.#.#.. +...#.##.#.#.. +#....#.#.###. + +##.#.##.# +..##....# +.....##.. +..####### +#.####### +#.####### +..####### +.....##.. +..##....# +####.##.# +#..#.##.# + +##..##. +.####.. +.####.. +##..##. +..####. +###..#. +.##.#.# +....### +#.#.... +###.#.. +..#...# +..####. +#.##... +#.#.... +..####. + +#...##...#......# +.##....##..#..#.. +#.######.#..##..# +##########.#..#.# +##.#..#.###....## +..##..##..#.##.#. +####..####......# +#..####..###..### +....##.....#..#.. +####..####.####.# +..#....#..##...#. +.###..###..####.. +#.######.#.#..#.# + +.#..#.#.. +....#.#.. +.#####..# +.#####..# +....#.#.. +.#..#.#.. +.####.### +#.#.###.. +##.##.#.# +.#...#... +.#.####.# + +##.####.####. +##.#..#.##.#. +..##..##....# +..........#.# +..##..##..##. +..##..##..##. +...#..#...#.# +..##..##....# +##.#..#.##.#. +##.####.####. +..##..##..#.. +..#....#....# +####..######. +#.#.##.#.##.# +...####....## + +..#..#.###..###.. +.###.#..#.....### +...#..##..###.... +##...##..#.####.. +#.#.#.#.#..###### +#......###.....## +##.###.#...####.# +###.#.....#.#.... +.#..#...##..###.. +.#.###########.## +.##.###.##.#..#.. +#.##..##..#..#... +.....#######..### +.....#######..### +#.##..##..#..#... + +#.#......#..##. +...####...##..# +...#..#.....##. +............##. +.##....##...##. +#.#.##.#.#..##. +#...##...###### + +#......#.#. +########... +########... +#......#.## +..#..#..##. +##.##.####. +##.##.###.# +#..##..##.# +.######.##. + +.#....... +#..#.#### +###.#.### +#..#.#.## +.....##.. +###.#.### +.#..##### +#.##.##.. +##.##..## +#.#...### +#.#.#.### + +####.#...###### +##..##....#..## +..#...##.##...# +..#.###..##.##. +..###...##..... +..###...##..... +..#.###..##.##. +..#...##.##...# +##..##....#..## +####.#...###### +..#..##..##...# +.........###..# +.#.##.#....#... + +#.####.###.#... +#.#..#.###...#. +#.####.#.####.. +#.#..#.#.#..##. +.######.###.### +###..###....#.# +#.##.#.#.#..#.. +..#..#....####. +.######..####.# +###..#####.#.#. +##....##.....## +........##.##.# +........##.##.# + +#........#..#.. +.#.#..#.#.##.#. +..........##... +..######......# +#..####..####.. +.###..####..### +#.######.#..#.# +#.######.####.# +...#..#...##... +..##..##......# +####..######### +..#....#......# +#.#....#.####.# + +#.###....###.#..# +.##........##.##. +###..####..###..# +#.#..#..#..#.#### +.#..##..##..#.##. +###.##..##.###### +#.#..#..#..#.#### +####.#..#.####..# +.#.##....##.##### +.#...#..#...#.##. +#.##......##.#..# +#..##....##..#### +.....#..#........ +#.....##.....#### +.###......###.... + +####..##.######## +#..#.#....#..#### +#..#.#....##.#### +####..##.######## +..#.##..#.###.... +#####.##..###.#.# +.......#...#####. +#..#.#....#.##.#. +#####....#...##.# +#..######..###.## +.####.#..#..#.#.. +#.#........#...## +#.#........#...## +.####.#..#..#.#.. +#..######..###.## + +#....#.#### +#...##..... +......##..# +######..##. +#....##.... +##..##..##. +.......#..# + +...##..##..## +...##..##..## +..#.....#.### +..##.......## +####.#....#.# +.##.........# +##..#####...# +..#####...... +####..###...# +...#.##..#..# +...#..#.#.##. +..#####..##.# +..####..##### +###..#.###### +...#.###..#.. + +..##### +#..#..# +.#.##.. +.#.##.. +#.....# +..##### +##..### +##..### +..##### + +..##..##. +.#..##..# +####..### +##.####.# +###.##.## +###.##.## +#.######. +....##... +.#.#..#.# +##.####.# +....##... +....##... +##.#..#.# +.#.#..#.# +....##... + +..#.#...# +..#.#...# +###.#..## +####..#.. +..#..#.## +...#..##. +#...##... + +..####..######..# +.######...##...## +...##...#....#... +#.####.###.####.# +#......#......#.. +.######..####..## +#......##....##.. +#.#..#.###..###.# +...##...##..##... +..####...####...# +.#.##.#.#.##.#.#. +##....###....###. +#.#..#.##....##.# + +......####...###. +####...#.#..##### +#..#..#..#..#.... +....##.#.#..#.... +#..#..#...#..###. +.....##..#.##.### +....##.###......# +.##.##...#....##. +#..##.#.....#..## +.##.#.....#.#.#.# +..#.......###.#.# +.##..#..##.##..#. +#..####.#..#..##. +#####..#.###.###. +#####..#.###.###. +#..####.#..#..##. +.##..#..##.##..#. + +..#.### +##....# +##...#. +#..#.## +#.##..# +#.##..# +#..#.## +.#...#. +##....# +##....# +.#...#. +#..#.## +#.##..# +#.##..# +#..#.## +##...#. +##....# + +#..##.#.###.### +#..##.#.##..### +.##.....###..## +.....#.#.##.#.. +####.##.##.##.. +.....#..##.##.. +....#.##..#.##. +#..##..#...##.. +####...#..#.##. +#####.....##.## +.......##....#. + +.####..#..# +#.#.#...... +#..##...##. +#..######## +##.##...##. +.#####.#..# +#...#.##... +##...#.#### +#.......... +..#........ +..###...... +##..#.##### +##..#.##### +..###...... +..#........ + +....##..##.## +#......##..## +.#.#..#..#.#. +..#....#.##.# +##.#.#####.#. +####.#####.#. +..#....#.##.# +.#.#..#..#.#. +#......##..## +....##..##.## +...##...#.... +........#..## +.##.#####..#. +.#.#..#.##.## +.#.#..#.##.## + +.......#. +..##..### +.#..#.### +#######.. +........# +##..##... +..##..### +.......#. +##..##... + +####.#.#### +##...####.. +#....#..### +#....#..### +##...##.#.. +####.#.#### +#.#####.#.. +.#.###.#.## +#..###.##.# +#...#.#.##. +#...#.#.##. + +#####..## +...###..# +..#.####. +..#.#...# +.####..#. +#..#.#### +#..#.#### +.####..#. +....#...# +..#.####. +...###..# +#####..## +#####..## +...###..# +..#.####. +....#...# +.####..#. + +#.####..##..# +.#####..#.#.# +.#####..#.#.# +######..##..# +.##.####.#.#. +##.#####...#. +####.#..#.### +........#...# +.###...##...# +..##......#.# +.##.#####.#.. +###.##..##..# +#.##.##.#..## +#.##.##.#..## +###.##..##..# + +##.##..##.##### +#.########.#### +.....##.....##. +.##.####.##.##. +.#.######.#.##. +....#..#....... +##...##...##### +.####..####.... +.##..##..##.... +.##......#..... +..#.####.#..... + +#..#.##.# +.###.##.# +####.##.# +.#.##..## +#.#.#..#. +..#.####. +##...##.. +.#.##..## +#...#..#. +#...####. +.#...##.. +.#.#....# +#....##.. +....####. +....####. +#....##.. +.###....# + +.#...##...#.. +.#.#.##.#.#.. +#.########.## +###.#..#.#### +..########... +...##..##.... +...##..##.... +....####..... +##..#.##..### +.###.##.###.. +##..#..#..### +.#........#.. +.##########.. + +..####. +..###.. +.##...# +.#..### +#..#..# +#..#..# +#..#..# +#..#..# +.#..### +.##...# +..###.. + +#...#.#.# +...##.#.# +##.#..### +..#..#... +..#...... +##..#.##. +.##.##### +.##.#.##. +.##.#.##. +.##.##### +##..#.##. +..#...... +..#..#... + +..#####..#. +##...##.##. +.....#.##.. +.#....#.#.# +#..##.##... +...#.##.##. +...#.##.##. +#..##.##... +.#....#.#.# +.......##.. +##...##.##. +..#####..#. +..#####..#. +##...##.##. +.......##.. + +####........### +...##########.. +##..###..###..# +...#..#..#..#.. +##.####..####.# +##.#.#....#.#.# +...##..##..##.. +...#.######.#.. +#####.#..#.#### +##.##.#..#..#.# +##.##......##.# + +##..###.. +######.## +..##...## +.####.... +..##..### +.#....... +.......## + +#..##..#.#..#..#. +#####..#.....##.. +.##.####.#.###### +####...##.###..## +####...#.#.###### +.##.##..#...#..#. +####.##.....####. +.........##...... +######.##.##.##.# +.###.######.####. +#..#######.#....# + +....#.. +.##.#.# +#..#..# +.##..#. +####... +######. +#..##.# +#..##.# +######. +####... +.##..#. +#..#.## +.##.#.# +....#.. +#####.# +####... +.##..## + +######.##.##. +.#..#..#.#... +.####..#...## +#.##.####.##. +..##...#....# +#.##.#....... +.##.#.###..## +#.##.###....# +##..###..#.## +##..###..#.## +#.##.###....# + +#..#####..# +....####### +.#.##..#..# +.########## +...#....##. +.##...##..# +..#..#.#### +.#..#..#### +#..####.... +##.####.... +.#..#..#### +..#..#.#### +.##...##..# + +..#..#.#.##.#.# +..#..#.#.##.#.# +.#..#.#..##..#. +...###.######.# +.##............ +##.####......## +.###.#..#..##.# + +##..##. +###.##. +##.#... +####.## +##.#.#. +..###.# +...#.#. +##.#... +..#.### +....#.. +..#..## +####..# +..#..## +..####. +.....## +..##..# +####..# + +.#.#.##.### +#.#.##.#.## +##...###.## +.##.####... +.##.####... +###..###.## +#.#.##.#.## +.#.#.##.### +##.#...#.## +#...####.## +##...###### + +#.#.#.####.#.#.## +####..#..#.###### +##.##......##.### +###.#..##..#.#### +.#####.##.#####.. +......#..#....... +.###.#....#.###.. + +.####.##. +#.##.#### +######..# +#.##.#### +.....#### +#....#..# +#.##.#### +#.##.#### +.#..#.##. +.#..#.##. +..##..... +.#..#.... +.####.##. +#....#..# +.#..#.... + +###...##......##. +..####..######..# +..#.#..#......#.. +########.####.### +#####..#####.##.. +.###.#.##....##.# +.##.####.#..#.### +#...####.####.### +#....#..#....#..# +##.#.####.##.#### +...#.#..........# +#.#.#.#.#....#.#. +.##.#.#...##...#. +.##.#.#...##...#. +#.#.#.#.#....#.#. + +.##.##.###..#.# +#..##..##.....# +#####.###.####. +####...######.# +#..#..####..##. +####..###.#.##. +......#...#.... +#..#.##..##.#.# +.##...#.#.##### +......##....... +#..#.#####..... +.##....#####..# +#..#...##....#. +#..#...##....#. +.##....#####..# +#..#.#####..... +......##....#.. + +...######....## +#..#....#..##.# +#..#....#..##.# +...######....## +#.#..##..#.#.#. +#.#.#..#.#.#... +#####..#######. +#....##....###. +#...#..#...##.. +#.#..###.#.#.#. +.#.#....#.#.#.# + +.#..#.#.. +#.#...#.. +#.....#.. +....##### +#.####.#. +#.####.#. +....##### +#.....#.. +#.#...#.. + +##..###.#.# +##...##.#.# +##.#.#.#..# +..#..#.###. +##.##.##.#. +#####.....# +##.#....... +....##..##. +##..###.#.. +......#.##. +##.###.#... + +#.##..#.##.#..# +.#...####.##.#. +###........#..# +####.#...#..... +.####.#.....##. +.####.#.#...##. +####.#...#..... +###........#..# +.#...####.##.#. +#.##..#.##.#..# +##....##.#...## +.##..###.#...#. +..##..#.###.### +..#.#.##....#.# +..#.#.##....#.# + +.####.##.####.. +.#..##..##..#.# +.#..##..##..#.. +.####.##.####.. +.#.#.####.#.#.# +.##.#....#.##.. +.#.##.##.##.#.# +##..#.##.#..### +...###..###.... +.....####.....# +###.#.##.#.#### +...#..##..#.... +##..........### \ No newline at end of file diff --git a/src/input/day13_test1 b/src/input/day13_test1 index e69de29..f226414 100644 --- a/src/input/day13_test1 +++ b/src/input/day13_test1 @@ -0,0 +1,15 @@ +#.##..##. +..#.##.#. +##......# +##......# +..#.##.#. +..##..##. +#.#.##.#. + +#...##..# +#....#..# +..##..### +#####.##. +#####.##. +..##..### +#....#..# \ No newline at end of file diff --git a/src/input/day13_test2 b/src/input/day13_test2 index e69de29..f226414 100644 --- a/src/input/day13_test2 +++ b/src/input/day13_test2 @@ -0,0 +1,15 @@ +#.##..##. +..#.##.#. +##......# +##......# +..#.##.#. +..##..##. +#.#.##.#. + +#...##..# +#....#..# +..##..### +#####.##. +#####.##. +..##..### +#....#..# \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index 9eb9c0d..a72290a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -20,7 +20,7 @@ async fn main() -> Result<(), Box> { Box::new(day10::Day10 {}), Box::new(day11::Day11 {}), Box::new(day12::Day12 {}), - // Box::new(day13::Day13 {}), + Box::new(day13::Day13 {}), // Box::new(day14::Day14 {}), // Box::new(day15::Day15 {}), // Box::new(day16::Day16 {}), diff --git a/src/solutions/day13.rs b/src/solutions/day13.rs index f0b82de..cc83a8e 100644 --- a/src/solutions/day13.rs +++ b/src/solutions/day13.rs @@ -1,3 +1,5 @@ +use itertools::Itertools; + use super::Solution; pub struct Day13 {} @@ -5,16 +7,28 @@ pub struct Day13 {} impl Solution for Day13 { fn part1( &self, - _input: &mut Vec, + input: &mut Vec, ) -> Result, Box> { - Ok(Box::new("Ready")) + let binding = input.clone().iter().join("\n"); + let grids = binding + .split("\n\n") + .map(|s| s.split("\n").map(|l| l.as_bytes()).collect::>()) + .collect::>(); + + Ok(Box::new(self.solve(&grids, 0))) } fn part2( &self, - _input: &mut Vec, + input: &mut Vec, ) -> Result, Box> { - Ok(Box::new("Ready")) + let binding = input.clone().iter().join("\n"); + let grids = binding + .split("\n\n") + .map(|s| s.split("\n").map(|l| l.as_bytes()).collect::>()) + .collect::>(); + + Ok(Box::new(self.solve(&grids, 1))) } fn get_day(&self) -> u8 { @@ -22,7 +36,53 @@ impl Solution for Day13 { } } -impl Day13 {} +impl Day13 { + // Finds the index of the column where the reflection is located + fn find_col_reflection(&self, grid: &[&[u8]], limit: usize) -> Option { + (0..grid[0].len() - 1).find(|&c| { + let incorrect = (0..=c.min(grid[0].len() - c - 2)) + .map(|dc| { + let a = c - dc; + let b = c + 1 + dc; + (0..grid.len()) + .filter(|&r| grid[r][a] != grid[r][b]) + .count() + }) + .sum::(); + incorrect == limit + }) + } + + // Finds the index of the row where the reflection is located + fn find_row_reflection(&self, grid: &[&[u8]], limit: usize) -> Option { + (0..grid.len() - 1).find(|&r| { + let incorrect = (0..=r.min(grid.len() - r - 2)) + .map(|dr| { + let a = r - dr; + let b = r + 1 + dr; + (0..grid[0].len()) + .filter(|&c| grid[a][c] != grid[b][c]) + .count() + }) + .sum::(); + incorrect == limit + }) + } + + // Gets the given score for a reflection + // where limit is the index of the reflection you want to find in each image + fn solve(&self, grids: &[Vec<&[u8]>], limit: usize) -> usize { + grids + .iter() + .map(|grid| { + self.find_row_reflection(grid, limit) + .map(|r| (r + 1) * 100) + .or_else(|| self.find_col_reflection(grid, limit).map(|c| c + 1)) + .unwrap() + }) + .sum() + } +} /// Test from puzzle input #[cfg(test)] @@ -44,7 +104,7 @@ mod test { .unwrap() .to_string(); - assert_eq!(answer, "Ready"); + assert_eq!(answer, "405"); } #[test] @@ -61,6 +121,6 @@ mod test { .unwrap() .to_string(); - assert_eq!(answer, "Ready"); + assert_eq!(answer, "400"); } -} \ No newline at end of file +}