Powered by AppSignal & Oban Pro
Would you like to see your link here? Contact us

Advent of Code 2023 - Day 13

day13.livemd

Advent of Code 2023 - Day 13

Sample

sample = """
#.##..##.
..#.##.#.
##......#
##......#
..#.##.#.
..##..##.
#.#.##.#.

#...##..#
#....#..#
..##..###
#####.##.
#####.##.
..##..###
#....#..#
"""
"#.##..##.\n..#.##.#.\n##......#\n##......#\n..#.##.#.\n..##..##.\n#.#.##.#.\n\n#...##..#\n#....#..#\n..##..###\n#####.##.\n#####.##.\n..##..###\n#....#..#\n"

Input

input = """
##.####.######.##
.#.#..#.#....#.#.
...#..#...##...#.
###....########..
#..#..#..####..#.
.#.#..#.#.##.#.#.
...####...##...##
..##..##......##.
##.#..#.######.#.
..#....#....#.#..
..#....#......#..
#...##...####...#
#.######.####.###
..##..##......##.
#........####....

.##......
###.####.
##.##...#
..###..##
...##..##
#..#.##.#
..#......
.##..##..
.##..##..

.......####..##..
.####.##.#.#....#
.####...#.#.####.
######.##.#######
........#..#....#
.####....########
......###.###..##
#....##.###......
.####...#.###..##
#....####.##....#
........##..#####
##..##.####.####.
######..#....##..
#....#..####....#
.####.##.#.######

..####...####
..####...####
#...###...###
...##########
#.#..#..##.##
#.#.##.#..#..
.#.#..##..#..
##..###....##
#.###...##.#.

#....##..
#.###..##
##...##..
#..######
##.#....#
#.#......
#####..##
##.######
.#.######
##...##..
..#......
.#.##..##
.##......
#.#......
#####..##
...######
.####..##

..##.##...###
##.#.####.#..
...#######.##
###..##.####.
#####.....###
######...###.
..##..##...##
..#..###..##.
####.##...#.#
...#.#..#..##
..##.#.#.####
###..###....#
###....#.####
..##.##.##...
..##.##..#...

....#...####..#
.###.....####.#
###.#.##..#.#..
#.#.######...#.
#.#####.#..#.#.
...#......#.##.
####....#......
#.#..#..#####.#
##..#.##...#.##
...#.#.###.###.
..####.##...#.#
..####.##...#.#
...#.#..##.###.
...#.#..##.###.
..####.##...#.#
..####.##...#.#
...#.#.###.###.

#...#...#...##.#.
....#...#...##.#.
..##.###.##..###.
#.#.#.#.#.###..#.
......##.#.#.##.#
.#..#..#...#..#..
##.##.....####..#
####.##...#.###..
####.##...#.###..
##.##.....####..#
.#..#..#...#..#..
......##.#.#.##.#
#.#.#.#.#.###..#.

..##....#.#.##.#.
..#......#..#.#..
##.###.#..##..##.
.#.###....##.##..
#....##.#...##.##
#.#..##.#.####.##
#.#..##.#.####..#
#....##.#...##.##
.#.###....##.##..
##.###.#..##..##.
..#......#..#.#..
..##....#.#.##.#.
..##....#.#.##.#.

.#..#.#...##.
#....#.#.....
.......##..##
......###....
.#..#.#...##.
.#..#.#......
..##..#.####.
......#..#.##
........#..#.
#....###.####
#....##..####

#................
#...####...#..#..
.#.######.#.##.#.
.#.######.#....#.
..#.####.#..##..#
#..######..####..
.....##.....##...

#...#.#####
##.#..#.##.
##.........
#..#...#.##
..#.##.#...
##..#.###..
##..#.###..

...#.#...#..#.#
#....##.....#.#
..#..#..#####.#
.##....#...#...
##..........###
......#...####.
####.#.#.##.###
..#.#..##..####
..#.#..##.#####
..#.#..##.#####
..#.#..##..####

###.#......
.#.#.##..##
.###..##...
##...######
##.#####.##
#####.#.#..
..###.##.##
.#######.##
.#.##..#...
#....#.#...
.#..####.##
##.###..#..
##.#.##...#
#.##.##....
..##.#.#...
.#..#.##.##
.#..#.##.##

.......##....
..#.#..##..#.
..#....##....
..#..##..##..
...##......##
..#..##..##..
##.###....###
......#..#...
#######..###.

####..##.
.#..#...#
###..####
###..#.##
.#..#...#
####..##.
#####.#..
.#.#...#.
.####.#.#
#.#.#...#
..##.###.
##..##..#
...#.###.
...#.###.
##..##..#

#.###..####
.#..##...##
##.##.#.#..
.#..#...###
.##..#..###
####.##.###
####.#..###

#######..##
######....#
.####......
#....#.##.#
######....#
#....##..##
#######..##
.####......
.........#.
.####......
.####.#..#.
#.##.######
######.##.#
##..##.##.#
..##..####.
#....#.##.#
.####......

#.#..#..##.
#####.###..
##.##.##...
##.##.##...
#####.###..
#.#..#..##.
###...#.#.#
.#.#....###
.#.#....###
###...#...#
#.#..#..##.

#####.#..#.
#.###.####.
#..###.##.#
.##.###..##
....#..##..
#..##.#..#.
......####.

##.#.######
.#.#.#.##.#
..###.##.#.
##..#######
#.##.######
.####......
..#....##..
#.###......
.#..#.####.
..#..#....#
.#.###....#
.#.###....#
..#..#....#

##.#.####.#.###
.##...##...##..
.############..
...########...#
#....#..#....##
....#....#.....
..#.#.##.#.#...

.#.#...#..#...#.#
.#.#...#..#...#.#
###.###.##.###.##
#....##....##....
#.#..##.##.##..#.
#.#.###....#####.
###.##########.##
#..#.#.#..#.#.#..
#.#...#.##.#...#.
..##.#.####.#.##.
#####.######.####

.#..####..#..#.
.##.#...#.#...#
##.####.###.###
.#.#####..####.
..##..##..#.###
..##..##..#.###
.#.#####..####.
##.####.###.###
.##.#...#.#...#
.#..####..#..#.
.#.###..#######
##.##.####.#...
##.##.####.#...
.#.###..#######
.#..####..#..#.
.##.....#.#...#
##.####.###.###

.##.##..##.
....######.
#####....##
....#.##.#.
.##.##.###.
#..#......#
#..##....##
.##.######.
.##.##..##.
....##..##.
#..###..###
.##.#....#.
....#....#.
....#.##.#.
######..###

#.#.###
...#...
...#..#
#.#.#.#
##..#.#
###.#.#
#.#.#.#
...#..#
...#...
#.#.###
######.
..#####
#.##.##
#.##.##
..#####

....#.#..
....#.#..
.##.#####
###......
#.#..####
#........
#...#..##
.###...##
.#.....##
#...#..##
#.###.#..
#..#.#...
..##.###.
##.###.##
.###.####
...##.###
#..####..

#.#.#..
#.#.#..
##..#..
####...
....###
..#..##
.#####.
.#####.
..#...#

#.#...###.####...
######.##..#..##.
.#.#.####.#..#..#
..#..####.##...##
..###.#....##...#
..###.#....##...#
..#..####.##...##
.#.#.####.#..#..#
######.##..#..##.
#.#...###.####...
..####...##.##.#.
##..#...#.#..#...
#.###....##...#..
.#.##.#..#.#.#...
##.#.#..##.##.##.
##.###.....##.#..
##.####....##.#..

###..######..##
........###..##
##.##.###.####.
##....##..#..#.
#..##..#.......
#..#...#..####.
.#.##.#.#..##..
..####..#.#..#.
.######........
#.####.##.#..#.
##########....#
.######.#......
.######.#..##..

#.#.###
..#..##
..#..##
#.#..##
..#####
....###
.######
.##..##
.###.##
##.#...
##..#..

###....#...
#.##..#.#..
..##..#.#..
###....#...
##..###.#..
...#..####.
...###.####
...###.####
...#..####.
##..###.#..
###....#...
..##..#.#..
#.##..#.#..
###....#...
.####.###..

#.##.##.##.#..#
...#....#...##.
#..........##..
.#..####..#....
...#.##.#...#..
##.##..##.###.#
..#.####.#..##.
..##.##.##..#..
..#..##..#...##
##.##..##.###..
##.##..##.###.#

##...#.#.#...
##.####.#.#..
#####..###.##
..#....##.#..
.#####..##.##
......##.##..
###.###.#.#..
###..######..
####.#####...

.##.###.##.......
.#..#.....#..###.
.#.#######.##.##.
......##.##..#..#
.##.#####..#.#..#
..##.#.....#.####
#...#..##...#.##.
#.##.#####.###..#
#.##.#####.###..#
#...#..##...#.##.
..##.#.....#.####

..#.####.#.......
...#.#..#...#....
..#.#..#.#..##..#
.##.#..#.##.#....
#.#.####.#.#.....
....####.........
..#.#..#.#..#....
.#.######.#..####
##.##..##.###....
############.....
..#..##..#...####
.###.##.###.#.##.
#.#.#..#.#.#.####
.#..####..#......
.####..####..#..#

.#.##.#......
..####..#..##
.##..##.#..#.
.#.##.#..##..
..#..#.......
..#..#...##..
..####..#..#.
###..###....#
.#.##.#.####.
...##....##..
#.####.#....#

..#########
.#..#.##.#.
..###....##
##.###..###
#.###...###
.#####..###
##.#......#
#.###.##.##
..#..#..#..
#.#.#.##.#.
....######.
..##......#
.##..####..
.#.#..##..#
.#.###..###
#.....##...
#.....##...

.##....
.###...
..#....
##..##.
##..##.
..#....
.###...
.##....
.##..##
.....##
...####

.##..##...####...
.###...#.#.#..#..
##.......###...#.
#...#..##....##.#
#.##########.##..
...######..#.##.#
#......#..#.##...
#......#..#.##...
...######..#.##.#
#.########.#.##..
#...#..##....##.#
##.......###...#.
.###...#.#.#..#..
.##..##...####...
.##..##...####...

#........####..
#.#....#.####.#
#.#.##.#.#..#.#
#..#..#..#..#..
##......######.
.###..###....##
#...##...####..
.##....##.##.##
#.#.####.#..#.#

###....
##.####
..#####
.#.....
.#.....
..#####
##..##.

.#.##.#.##.#.##.#
.#.##.#.##.#.##.#
..#.#.#....#.#.#.
##...########...#
###.#...##.#.#.##
.#..#...##...#..#
.#.#..........#.#
.####.######.####
...#.#.#..#.#.#..

.....###....#
......##.##.#
...#..##.##.#
.....###....#
##...#.######
.##.##...##..
#..###..#..#.
....#........
.#..###.#..#.

..#.##..###.###.#
..#.##..###.###.#
###..###....#.##.
....#.####.#.###.
##.##.#..#..#.#..
###.###.#..#.####
..#.#..#.##..#.##
###....#..#.#.#.#
.#.###.#.##.#.#.#

#....#.....#.
#.#.##..#..#.
###.##.###...
.#.##...#.###
..#..###.....
.###..#...##.
..##..#...##.
..#..###.....
.#.##...#.###
###.##.###...
#.#.##..#..#.
#....#.....#.
#....#.....#.

#.####..#
#####.##.
...##....
...##....
#####.##.
..####..#
..###....
#...#.##.
#.##.#..#

#..####
##..#..
..#..#.
#..####
#..###.
..#..#.
##..#..
#..####
.#..##.
.#..##.
#..####

.#.#...##...#
.#.##......##
##...##..##..
.####.#.##.##
###.##....##.
.###..####..#
#..#........#
..#.#.#..#.#.
..#.#.#..#.#.

###.#####
###.#.###
#.#.###..
#..##.###
.###.##..
##..#....
.......##
...######
.......##
##.##....
.#..#####
.##.#.###
#..#.....
#.#.#....
#.#..#.##

.####.#
#....##
.#..#.#
.#..#.#
#....##
.####..
#.##.#.
#....##
#.##.#.
######.
##..##.

.###...##
.....#.##
..#..##..
...####..
..#.##...
#.#######
#.####.##

###..#..#..##
#..#.#..#.#..
.....####....
####.#..#.###
...#.####.#..
#..#.#..#.#..
#.....##.....
#.##########.
######..#####
.###.#..#.###
.#####..#####
.....####....
######..#####

..#####..
..##.....
#.#...#..
.#.######
.#.#####.
..##.#.#.
..##.#.#.
.#.#####.
.#.######

#..####
#..#..#
#..#..#
.##....
....#.#
.##.#..
######.
....#.#
....#..

##..##.##.#..#..#
###.#.#.....#....
###.#.#.....#....
##..##.##.#..#..#
....####.....####
##.#..#.######..#
.#.#######...#..#
.##.#.#.#.#.....#
..##......#...###
.#.######.#######
.#.######.#######
..##......#...###
.##.#.#.#.#.....#
.#.#.#####...#..#
##.#..#.######..#
....####.....####
##..##.##.#..#..#

.....#.##.##.#.
.....#..#.##.#.
#####...#.#..##
.##.#..##.#...#
#..##..##..#..#
.....###.###.##
#####.#....#.#.
#####..####..##
.##..#...#..#.#
#####..#.#.####
......##.###.#.
####.##.....###
####.###.##...#

.############...#
.############...#
###........###.#.
####.#..#.####..#
.###..##..###.##.
.##.######.##..##
##..######..####.
.####.##.####...#
.#.#..##..#.#.##.
##..#######.##..#
#..###..###..#...

.#...#..######.
#..#####.####.#
....#.###.##.##
#.###.##.#..#.#
#.....###.##.##
#...#.###.##.##
#.###.##.#..#.#

#.#..#.###..#
...##.....##.
.######......
..#..#.......
#.#..#.#.####
.######.#####
###..###.#..#
.######......
#.#..####....
.#....#.#####
#..##..#.....
...##...##..#
.##..##..#..#

###...####...
....########.
####.#.##.#.#
######.##.###
##.#.######.#
###..........
##.##########
..##...##...#
##.#.######.#
###..#.##....
..#.#.####.#.
####..####..#
##...#....#..
###..#.##.#..
###..#....#..
..#.#..##..#.
..#....##....

..#.#..#.#..##..#
#.#......#.##..#.
..########..##...
..########..##...
.##.####.##.####.
.#..#..#..#.#.#..
...######....###.
...######....###.
.#..#..#..#.#.#..
.##.####.##..###.
..########..##...

#..#..##......##.
#..#..##......##.
####..##......##.
.##.##.########.#
..#....#.#..#.#..
.#.#..#.##..##.##
#.#.#.##......##.

####.##.##.##
.#####..#..##
.#....#.#.#..
..#..#.#.#.##
.#...####....
#.#.###..#.##
..####.....##
..####.....##
#.#.###..#.##
.#...####....
..#..#.#.#.##
.#....#.###..
.#####..#..##
####.##.##.##
##.#...#.....

#..#.#...##
.##.######.
####.##.#.#
.##.##..#.#
.##.##..#.#
####.##.#..
.##.######.
#..#.#...##
####....#.#

.....##.#
.......#.
....#.##.
.....#...
.....##.#
####..###
........#
####.....
.##.#.#..
....#####
#####.###
####...#.
....##.#.
....##.##
####.#...

.#..#.....##.
##..##.#..##.
#.##.###.#..#
##..##.######
#.##.#....##.
#.##.#.##....
######.######
.####..#.....
..##....#####
#######.....#
.......######
######.##....
......#.##..#
#....########
##..###......

#.#.##..#.#
.##.#....##
####.##..#.
.#..####.#.
.#..####.#.
####.##..#.
.##.#....##
#.#.###.#.#
.....####..
#.....#####
##..#.####.
#####.####.
########.#.
########.#.
#####.####.

.#.....#.
.#....##.
##....#.#
####.#.#.
##....#.#
####.#.##
..#.##...
#.#.##.##
..####..#
##.#.#.#.
.#...#.#.
#.##....#
#.##.###.
##...##..
##...##..
#.##.###.
#.##....#

..##.....#...#...
......##.######..
.........####.#..
........####.###.
.####...#..#..#.#
.......#..#.##...
##..#####...#.#.#

..##....#
..##....#
#.#......
..##.##.#
#...#..#.
..####.##
.###....#

.######.#..#.##.#
##.##.##..#.#..#.
#..##..##.#.#..#.
.#.##.#.#########
.#....#.#.#.####.
.##..##.##..#.##.
.........####..##
#########.##....#
#......#.#..####.

#.##.#....#.##.##
##..##....##..###
..##........##..#
.####......####..
.#..#.####.#..#.#
.##.#.####.#.##..
################.
......####.......
#....######....##
#######..#######.
.......##.......#
..##...##...##...
......####.......
#....#.##.#....#.
.####..##..####.#

.#.#.##..#.######
.##....#.#.......
#.#...##.#.###..#
#.#.##.##.###....
.#.#..#.##.#.....
#..##.####.......
..###..##...#....
...#..#...#.#.##.
......###...##..#
.#..#.#...#.##..#
##.####.##..##..#
##.#..#.#.#.#.##.
.#.#.....#..#....
.###..#.#...##..#
...#.##.######..#
...#.##..#####..#
.###..#.#...##..#

###...#..##.##.
.#..###.##.#..#
##.....#..##..#
....#.#........
#..####.#..####
.####..#..##..#
#####.#.#######
#...#..########
.##......#.#..#
.######.#...###
...##.#.#.#####
..#.....##.....
.....###...####
......#.##.....
......#.##.....

#........###.....
....##.......#.##
....##.......#.##
#........###..#..
.###..###..###...
.#.####.#.#.#..#.
##.####.##..#...#

####.#......#.#
....#.......##.
####..#....#..#
##..#..####..#.
..#.#........#.
##.##.#.##.#.##
.......####....
##.#.########.#
##.##..####..##
...#.###..###.#
.....########..

...#.#..##.###.
...#..#...#..#.
...#..###..###.
###......#.#..#
####....####.##
..#....####..#.
...##....##..#.
..#..##..#.#...
##..###..####.#
..#..#.#..#.#.#
##.....##..##..
##....##.#..##.
##.....##.##.##
..#.##.#.##..#.
###..##.##.###.
###.###.##.###.
..#.##.#.##..#.

#..#.##..
#..#.#.##
#####.###
.##..####
..#.#####
#..#.##..
....#....
#..##..##
#..#.####
.....####
####.####
.##..#.##
#####.###
.##..#...
.##.##.##

..##.###.#.##..
..#..##.#.##..#
##.......#..#..
##..##...####.#
##..##...####.#
##.......#..#..
..#..##.#.##..#
..##.###.#.##..
..#..##....#.#.
#....##.#......
##.#..###.....#
##.#..###.....#
#..#.##.#......

##.##.##..####..#
#......#........#
###..#####....###
.#....#.#.####.#.
###..###.#....#.#
.##..##...####...
..#..#..#..##..#.
.##..##...#..#...
#......##..##..##
##....###.####.##
#......#..#..#..#
###..####..##..##
#......####..####
##.##.###......##
###..####.####.##
.######..######..
.#######..#..#..#

####..#..#..#
.##.#..#...#.
#..#.#....#.#
....########.
#..#.#.##.#.#
....##.##.##.
.....#....#..

..##.#.#.
......###
..#.##.##
###..####
.#.######
#.....###
....#.#..
....#.#..
#.....###
.#.######
###..####

..#.##.####
#.#.##.#.#.
#.##..#....
.##.##...#.
.###.#.##.#
#.#.###...#
.#.#..#####
......#.###
......#..##
......#..##
......#.###

.#.##....
####.####
##.###..#
.....####
..##.####
#..#..##.
#######.#
#...##..#
..#.#....
#.##.....
###.#.##.
#....#..#
#...##..#
###......
#..######
#..######
###......

.#....#.####.##
.#....#.####.##
#...#......##.#
##.....#.#.#.##
.###.......##.#
...##.###.##.##
#####....#..#..
#....#..#.###..
#....#..#.####.

###...##..#.##.
...##.#..##..#.
##.#.#..#..#..#
##.#.#..#..#..#
...##.#..##..#.
###...##..#.##.
.#..##..#..#..#

.##..##
#..###.
.##...#
.....##
.....##
.##...#
#..#.#.

###......
.#.##.##.
.#.##.##.
###......
..####..#
#.##.###.
.##.#.##.
.#.#..#..
.#.#..#..
.##.#.##.
#.##..##.

###.#.##.
##..####.
##......#
##....#.#
###.#..#.
.#.#.#.#.
###.##.##
..#..#.#.
..#..#.#.

..#.#...#.#..##
..#.#...#.#..##
.#...#####.#..#
...###....#..#.
.#..####..#.#.#
.#..#..##.####.
#######.##.##..
..#####.####..#
#.####.##...##.
.##...####....#
##.###.#..#####
#..###........#
.#.#######..#.#
...#......#..##
..........#..##

.#.##.##.#####.
.#..##..##..##.
.#...#.#####.#.
#......#..##...
.#....##...#.##
#....######..#.
..#..#.#..##...
..#..#.#..##...
#....######..#.
.#....##...####
#......#..##...
.#...#.#####.#.
.#..##..##..##.
.#.##.##.#####.
.#.##.##.#####.
.#..##..##..##.
.#...#.#####.#.

.....###.####.###
.#...###.####.###
.#...####....####
#.##.....####....
#.#...###....###.
#....##.##..##.##
#..#..##.####.##.
.#.##.....##.....
#####.##......##.
##.#.............
#.###.#.######.#.

...##.##.##.#.#
###.#.#...#####
.#..##...##..#.
.#..##...##..#.
###.#.#....####
...##.##.##.#.#
.###.##......#.
.###.##......#.
...##.##.##.#.#
###.#.#....####
.#..##...##..#.
.#..##...##..#.
###.#.#...#####
...##.##.##.#.#
#.##.#..##..#..

##...#..#...#
..##.#..#.##.
...###..###..
..#..#..#..#.
..###.##.###.
..###...####.
#####....####

.#...#.####
.#..#..####
.###.#..##.
.###.#..##.
.#..#.#####
.#...#.####
.##.#......
#.#...#.##.
...#.###..#
.#..#.##..#
..##.###..#
#.#..#.....
####.###..#

..#....########
..#....########
.#.##.#...##...
.###.#.###.####
#...#...#.##.#.
##..####.####.#
##..##.##.##.##
#...#.####..###
##.#.###.#..#.#

#####.#..###.
...#...####..
...#...####..
#####.#..###.
...##..##...#
#..#.#.##.#..
###.####.###.
##.#...##..#.
###.###...#.#

..#..#.###.#.##
.....#...#.#.##
.....#...#.#.##
..#..#.###.#.##
##.#..##....##.
..#.###.#.#....
#####....#.##..
..#...#....#..#
##..##.######.#
...#..#..#####.
##..#..#.##....
...##.#####...#
.#.###....##..#

#..#..#..##..#.
...#..##.##.#..
###.#.########.
##.#...##..##..
#.####...##...#
.####.#.####.#.
##.##..######..
.####..#....#..
.##.##.##..##.#
..#.##...##...#
#.#.#.##.##.##.
#####.#.#..#.#.
...##...####...
#.#..##.#..#.##
.####.#.####.#.
.####.#.####.#.
#.#..##.#..#.##
"""
"##.####.######.##\n.#.#..#.#....#.#.\n...#..#...##...#.\n###....########..\n#..#..#..####..#.\n.#.#..#.#.##.#.#.\n...####...##...##\n..##..##......##.\n##.#..#.######.#.\n..#....#....#.#..\n..#....#......#..\n#...##...####...#\n#.######.####.###\n..##..##......##.\n#........####....\n\n.##......\n###.####.\n##.##...#\n..###..##\n...##..##\n#..#.##.#\n..#......\n.##..##..\n.##..##..\n\n.......####..##..\n.####.##.#.#....#\n.####...#.#.####.\n######.##.#######\n........#..#....#\n.####....########\n......###.###..##\n#....##.###......\n.####...#.###..##\n#....####.##....#\n........##..#####\n##..##.####.####.\n######..#....##..\n#....#..####....#\n.####.##.#.######\n\n..####...####\n..####...####\n#...###...###\n...##########\n#.#..#..##.##\n#.#.##.#..#..\n.#.#..##..#..\n##..###....##\n#.###...##.#.\n\n#....##..\n#.###..##\n##...##..\n#..######\n##.#....#\n#.#......\n#####..##\n##.######\n.#.######\n##...##..\n..#......\n.#.##..##\n.##......\n#.#......\n#####..##\n...######\n.####..##\n\n..##.##...###\n##.#.####.#..\n...#######.##\n###..##.####.\n#####.....###\n######...###.\n..##..##...##\n..#..###..##.\n####.##...#.#\n...#.#..#..##\n..##.#.#.####\n###..###....#\n###....#.####\n..##.##.##...\n..##.##..#...\n\n....#...####..#\n.###.....####.#\n###.#.##..#.#..\n#.#.######...#.\n#.#####.#..#.#.\n...#......#.##.\n####....#......\n#.#..#..#####.#\n##..#.##...#.##\n...#.#.###.###.\n..####.##...#.#\n..####.##...#.#\n...#.#..##.###.\n...#.#..##.###.\n..####.##...#.#\n..####.##...#.#\n...#.#.###.###.\n\n#...#...#...##.#.\n....#...#...##.#.\n..##.###.##..###.\n#.#.#.#.#.###..#.\n......##.#.#.##.#\n.#..#..#...#..#..\n##.##.....####..#\n####.##...#.###..\n####.##...#.###..\n##.##.....####..#\n.#..#..#...#..#..\n......##.#.#.##.#\n#.#.#.#.#.###..#.\n\n..##....#.#.##.#.\n..#......#..#.#..\n##.###.#..##..##.\n.#.###....##.##..\n#....##.#...##.##\n#.#..##.#.####.##\n#.#..##.#.####..#\n#....##.#...##.##\n.#.###....##.##..\n##.###.#..##..##.\n..#......#..#.#..\n..##....#.#.##.#.\n..##....#.#.##.#.\n\n.#..#.#...##.\n#....#.#.....\n.......##..##\n......###....\n.#..#.#...##.\n.#..#.#......\n..##..#.####.\n......#..#.##\n........#..#.\n#....###.####\n#....##..####\n\n#................\n#...####...#..#..\n.#.######.#.##.#.\n.#.######.#....#.\n..#.####.#..##..#\n#..######..####..\n.....##.....##...\n\n#...#.#####\n##.#..#.##.\n##.........\n#..#...#.##\n..#.##.#...\n##..#.###..\n##..#.###..\n\n...#.#...#..#.#\n#....##.....#.#\n..#..#..#####.#\n.##....#...#...\n##..........###\n......#...####.\n####.#.#.##.###\n..#.#..##..####\n..#.#..##.#####\n..#.#..##.#####\n..#.#..##..####\n\n###.#......\n.#.#.##..##\n.###..##...\n##...######\n##.#####.##\n#####.#.#..\n..###.##.##\n.#######.##\n.#.##..#...\n#....#.#...\n.#..####.##\n##.###..#..\n##.#.##...#\n#.##.##....\n..##.#.#...\n.#..#.##.##\n.#..#.##.##\n\n.......##....\n..#.#..##..#.\n..#....##....\n..#..##..##..\n...##......##\n..#..##..##..\n##.###....###\n......#..#...\n#######..###.\n\n####..##.\n.#..#...#\n###..####\n###..#.##\n.#..#...#\n####..##.\n#####.#..\n.#.#...#.\n.####.#.#\n#.#.#...#\n..##.###.\n##..##..#\n...#.###.\n...#.###.\n##..##..#\n\n#.###..####\n.#..##...##\n##.##.#.#..\n.#..#...###\n.##..#..###\n####.##.###\n####.#..###\n\n#######..##\n######....#\n.####......\n#....#.##.#\n######....#\n#....##..##\n#######..##\n.####......\n.........#.\n.####......\n.####.#..#.\n#.##.######\n######.##.#\n##..##.##.#\n..##..####.\n#....#.##.#\n.####......\n\n#.#..#..##.\n#####.###..\n##.##.##...\n##.##.##...\n#####.###..\n#.#..#..##.\n###...#.#.#\n.#.#....###\n.#.#....###\n###...#...#\n#.#..#..##.\n\n#####.#..#.\n#.###.####.\n#..###.##.#\n.##.###..##\n....#..##..\n#..##.#..#.\n......####.\n\n##.#.######\n.#.#.#.##.#\n..###.##.#.\n##..#######\n#.##.######\n.####......\n..#....##..\n#.###......\n.#..#.####.\n..#..#....#\n.#.###....#\n.#.###....#\n..#..#....#\n\n##.#.####.#.###\n.##...##...##..\n.############..\n...########...#\n#....#..#....##\n....#....#.....\n..#.#.##.#.#...\n\n.#.#...#..#...#.#\n.#.#...#..#...#.#\n###.###.##.###.##\n#....##....##....\n#.#..##.##.##..#.\n#.#.###....#####.\n###.##########.##\n#..#.#.#..#.#.#..\n#.#...#.##.#...#.\n..##.#.####.#.##.\n#####.######.####\n\n.#..####..#..#.\n.##.#...#.#...#\n##.####.###.###\n.#.#####..####.\n..##..##..#.###\n..##..##..#.###\n.#.#####..####.\n##.####.###.###\n.##.#...#.#...#\n.#..####..#..#.\n.#.###..#######\n##.##.####.#...\n##.##.####.#..." <> ...

Part 1

defmodule Part1 do
  defp parse_one(input) do
    rows = String.split(input, "\n", trim: true)
    chars = rows |> Enum.map(&amp;String.graphemes/1)

    cols =
      0..(length(List.first(chars)) - 1)
      |> Enum.map(fn n ->
        chars
        |> Enum.map(&amp;Enum.at(&amp;1, n))
        |> Enum.join("")
      end)

    {rows, cols}
  end

  def parse(input) do
    String.split(input, "\n\n", trim: true)
    |> Enum.map(&amp;parse_one/1)
  end

  def is_mirror_at?(rows, n) when n > length(rows) / 2 do
    is_mirror_at?(Enum.reverse(rows), length(rows) - n)
  end

  def is_mirror_at?(rows, n) do
    Enum.slice(rows, 0..(n - 1)) == Enum.reverse(Enum.slice(rows, n..(2 * n - 1)))
  end

  defp find_reflection(items) do
    1..(length(items) - 1)
    |> Enum.filter(&amp;is_mirror_at?(items, &amp;1))
    |> List.first(0)
  end

  def find_reflections(rows, cols) do
    find_reflection(rows) * 100 + find_reflection(cols)
  end
end

Part1.parse(input)
|> Enum.map(fn {rows, cols} ->
  Part1.find_reflections(rows, cols)
end)
|> Enum.sum()
35210

Part 2

defmodule Part2 do
  defp parse_one(input) do
    rows = String.split(input, "\n", trim: true)
    chars = rows |> Enum.map(&amp;String.graphemes/1)

    cols =
      0..(length(List.first(chars)) - 1)
      |> Enum.map(fn n ->
        chars
        |> Enum.map(&amp;Enum.at(&amp;1, n))
      end)

    {Enum.map(chars, &amp;to_int/1), Enum.map(cols, &amp;to_int/1)}
  end

  def to_int(string) do
    string
    |> Enum.with_index()
    |> Enum.map(fn {c, i} ->
      if c == "#" do
        2 ** (length(string) - i - 1)
      else
        0
      end
    end)
    |> Enum.sum()
  end

  def count_bits(n) do
    for(<>, do: bit) |> Enum.sum()
  end

  def parse(input) do
    String.split(input, "\n\n", trim: true)
    |> Enum.map(&amp;parse_one/1)
  end

  def is_mirror_at?(items, n) when n > length(items) / 2 do
    is_mirror_at?(Enum.reverse(items), length(items) - n)
  end

  def is_mirror_at?(items, n) do
    diffs =
      Enum.zip(Enum.slice(items, 0..(n - 1)), Enum.reverse(Enum.slice(items, n..(2 * n - 1))))
      |> Enum.map(fn {a, b} ->
        count_bits(Bitwise.bxor(a, b))
      end)

    Enum.all?(diffs, &amp;(&amp;1 < 2)) and Enum.count(diffs, &amp;(&amp;1 == 1)) == 1
  end

  defp find_reflection(items) do
    1..(length(items) - 1)
    |> Enum.filter(&amp;is_mirror_at?(items, &amp;1))
    |> List.first(0)
  end

  def find_reflections(rows, cols) do
    find_reflection(rows) * 100 + find_reflection(cols)
  end
end

Part2.parse(input)
|> Enum.map(fn {rows, cols} ->
  Part2.find_reflections(rows, cols)
end)
|> Enum.sum()
31974