Solve day 20

This commit is contained in:
hal8174 2024-12-20 20:44:27 +01:00
parent d2d8a02bbc
commit b05a0cfc7f
3 changed files with 305 additions and 0 deletions

15
input/20-0.in Normal file
View file

@ -0,0 +1,15 @@
###############
#...#...#.....#
#.#.#.#.#.###.#
#S#...#.#.#...#
#######.#.#.###
#######.#.#...#
#######.#.###.#
###..E#...#...#
###.#######.###
#...###...#...#
#.#####.#.###.#
#.#...#.#.#...#
#.#.#.#.#.#.###
#...#...#...###
###############

141
input/20-1.in Normal file
View file

@ -0,0 +1,141 @@
#############################################################################################################################################
#...........###...#...........###...###...#.....#...#...###.......#.....#.......#...#.......###...#...#.....#...#...#...###...#.............#
#.#########.###.#.#.#########.###.#.###.#.#.###.#.#.#.#.###.#####.#.###.#.#####.#.#.#.#####.###.#.#.#.#.###.#.#.#.#.#.#.###.#.#.###########.#
#.#...#...#...#.#.#.........#.#...#.#...#.#...#.#.#.#.#.#...#...#.#.#...#.....#.#.#.#.....#...#.#.#.#.#...#...#.#.#.#.#...#.#...#...#.......#
#.#.#.#.#.###.#.#.#########.#.#.###.#.###.###.#.#.#.#.#.#.###.#.#.#.#.#######.#.#.#.#####.###.#.#.#.#.###.#####.#.#.#.###.#.#####.#.#.#######
#...#...#...#.#.#...#.....#.#.#...#.#...#...#.#.#.#.#.#.#.#...#...#.#.#...###.#.#.#.#...#...#...#...#.#...#.....#.#...#...#...#...#...#.....#
###########.#.#.###.#.###.#.#.###.#.###.###.#.#.#.#.#.#.#.#.#######.#.#.#.###.#.#.#.#.#.###.#########.#.###.#####.#####.#####.#.#######.###.#
#...........#.#.#...#...#.#.#.#...#...#.#...#.#.#.#.#.#...#.#...###.#.#.#.#...#...#...#...#.#.........#...#.....#...#...#.....#.....#...#...#
#.###########.#.#.#####.#.#.#.#.#####.#.#.###.#.#.#.#.#####.#.#.###.#.#.#.#.#############.#.#.###########.#####.###.#.###.#########.#.###.###
#...........#.#.#.#.....#.#.#.#.....#.#.#.#...#...#...#...#.#.#.....#...#.#.#...#.......#...#...###...###.#...#.#...#...#...#...#...#...#.###
###########.#.#.#.#.#####.#.#.#####.#.#.#.#.###########.#.#.#.###########.#.#.#.#.#####.#######.###.#.###.#.#.#.#.#####.###.#.#.#.#####.#.###
#.....#.....#...#.#.....#.#.#.###...#.#.#.#...#.........#...#.#...........#...#...#...#.....#...#...#.#...#.#...#.....#.....#.#...#...#.#...#
#.###.#.#########.#####.#.#.#.###.###.#.#.###.#.#############.#.###################.#.#####.#.###.###.#.###.#########.#######.#####.#.#.###.#
#...#.#.........#.#...#.#.#.#...#.#...#.#.#...#.....#...###...#...........###.......#.....#.#.#...#...#...#...###...#.#.......#...#.#.#...#.#
###.#.#########.#.#.#.#.#.#.###.#.#.###.#.#.#######.#.#.###.#############.###.###########.#.#.#.###.#####.###.###.#.#.#.#######.#.#.#.###.#.#
###.#.#...#...#.#.#.#.#.#.#...#.#.#...#.#...#.......#.#.#...#.............#...#.........#.#.#...#...#...#...#.#...#...#...#.....#.#.#...#.#.#
###.#.#.#.#.#.#.#.#.#.#.#.###.#.#.###.#.#####.#######.#.#.###.#############.###.#######.#.#.#####.###.#.###.#.#.#########.#.#####.#.###.#.#.#
#...#...#...#...#.#.#.#.#.###.#.#.#...#.....#.#...###.#.#...#.#...#...#...#...#.#.......#...#.....###.#.....#...#.........#.#.....#.#...#.#.#
#.###############.#.#.#.#.###.#.#.#.#######.#.#.#.###.#.###.#.#.#.#.#.#.#.###.#.#.###########.#######.###########.#########.#.#####.#.###.#.#
#.#...#.........#...#...#.#...#...#.#...#...#...#...#.#.#...#...#.#.#.#.#...#...#...........#...#...#.........#...###...###.#.......#.....#.#
#.#.#.#.#######.#########.#.#######.#.#.#.#########.#.#.#.#######.#.#.#.###.###############.###.#.#.#########.#.#####.#.###.###############.#
#...#...#...###.........#.#...#.....#.#...#.........#.#.#...#.....#.#.#.#...#.........#...#.#...#.#...###...#.#.....#.#.#...#...............#
#########.#.###########.#.###.#.#####.#####.#########.#.###.#.#####.#.#.#.###.#######.#.#.#.#.###.###.###.#.#.#####.#.#.#.###.###############
#.....#...#.......#.....#.#...#...###.....#.....#...#.#.#...#.#...#.#.#.#...#.......#...#.#.#.###.#...#...#.#.#.....#.#.#...#.###.......#...#
#.###.#.#########.#.#####.#.#####.#######.#####.#.#.#.#.#.###.#.#.#.#.#.###.#######.#####.#.#.###.#.###.###.#.#.#####.#.###.#.###.#####.#.#.#
#...#.#.........#.#.....#.#.....#.......#.#.....#.#.#.#.#...#.#.#.#.#.#...#...#...#.....#...#...#.#...#...#.#.#.....#.#.#...#...#...#...#.#.#
###.#.#########.#.#####.#.#####.#######.#.#.#####.#.#.#.###.#.#.#.#.#.###.###.#.#.#####.#######.#.###.###.#.#.#####.#.#.#.#####.###.#.###.#.#
#...#.........#.#.......#.....#.#.......#.#.....#.#.#.#.#...#.#.#.#.#...#.#...#.#.#...#.#.......#...#...#.#.#.#.....#.#...#...#.....#.....#.#
#.###########.#.#############.#.#.#######.#####.#.#.#.#.#.###.#.#.#.###.#.#.###.#.#.#.#.#.#########.###.#.#.#.#.#####.#####.#.#############.#
#...........#...#.....#.....#...#...###...#.....#.#.#.#.#...#...#.#...#...#.#...#.#.#.#.#.###...###...#...#.#.#.....#.#.....#.#...#.........#
###########.#####.###.#.###.#######.###.###.#####.#.#.#.###.#####.###.#####.#.###.#.#.#.#.###.#.#####.#####.#.#####.#.#.#####.#.#.#.#########
#...#.......#.....###...###...#...#.#...#...#...#.#...#...#.#.....###...#...#...#.#.#...#...#.#.#...#.#.....#.....#...#.....#...#...#.......#
#.#.#.#######.###############.#.#.#.#.###.###.#.#.#######.#.#.#########.#.#####.#.#.#######.#.#.#.#.#.#.#########.#########.#########.#####.#
#.#.#.........#...#...#...###...#.#.#...#.###.#.#.#.......#.#.#...#...#.#.#...#.#.#.....#...#.#.#.#.#.#.###...###...#.....#.#.....###.#.....#
#.#.###########.#.#.#.#.#.#######.#.###.#.###.#.#.#.#######.#.#.#.#.#.#.#.#.#.#.#.#####.#.###.#.#.#.#.#.###.#.#####.#.###.#.#.###.###.#.#####
#.#.............#...#...#.........#...#.#.#...#.#.#.#...#...#.#.#...#.#.#.#.#.#.#.#...#.#.#...#.#.#.#.#...#.#.#...#.#.###...#.#...#...#...###
#.###################################.#.#.#.###.#.#.#.#.#.###.#.#####.#.#.#.#.#.#.#.#.#.#.#.###.#.#.#.###.#.#.#.#.#.#.#######.#.###.#####.###
#...............................#...#...#...###.#.#...#.#...#.#...#...#.#...#.#.#.#.#...#.#...#.#.#...###...#...#.#.#...#...#.#.....#...#...#
###############################.#.#.###########.#.#####.###.#.###.#.###.#####.#.#.#.#####.###.#.#.###############.#.###.#.#.#.#######.#.###.#
#...#...###...#.................#.#.#...#.....#.#.#.....#...#.#...#...#...#...#.#.#...###.#...#.#.#...............#.#...#.#.#.#.......#.....#
#.#.#.#.###.#.#.#################.#.#.#.#.###.#.#.#.#####.###.#.#####.###.#.###.#.###.###.#.###.#.#.###############.#.###.#.#.#.#############
#.#.#.#.#...#...#...#.............#...#...#...#...#.....#.#...#.....#...#.#...#.#...#...#.#...#...#.......#.........#.....#...#...#.....#...#
#.#.#.#.#.#######.#.#.#####################.###########.#.#.#######.###.#.###.#.###.###.#.###.###########.#.#####################.#.###.#.#.#
#.#.#.#.#...#.....#...#...................#.....#.......#.#.#...#...#...#...#.#.###...#.#.....#...........#...#.....#.....#.......#.#...#.#.#
#.#.#.#.###.#.#########.#################.#####.#.#######.#.#.#.#.###.#####.#.#.#####.#.#######.#############.#.###.#.###.#.#######.#.###.#.#
#.#...#.....#.#.........#...#...#.......#...#...#...#...#.#.#.#.#.###.#...#.#...#.....#...#...#.....#.........#...#.#.#...#.........#...#.#.#
#.###########.#.#########.#.#.#.#.#####.###.#.#####.#.#.#.#.#.#.#.###.#.#.#.#####.#######.#.#.#####.#.###########.#.#.#.###############.#.#.#
#.#...#...#...#...#.....#.#.#.#...#...#...#...#...#.#.#.#.#.#.#.#.#...#.#.#.....#.......#...#.....#...#.....#.....#.#.#...#...#...#...#...#.#
#.#.#.#.#.#.#####.#.###.#.#.#.#####.#.###.#####.#.#.#.#.#.#.#.#.#.#.###.#.#####.#######.#########.#####.###.#.#####.#.###.#.#.#.#.#.#.#####.#
#...#...#...#.....#.#...#.#...#...#.#...#.......#.#.#.#.#.#.#.#.#.#...#.#.#...#.#.......#...#.....#...#...#.#.....#.#.###.#.#.#.#.#.#.#.....#
#############.#####.#.###.#####.#.#.###.#########.#.#.#.#.#.#.#.#.###.#.#.#.#.#.#.#######.#.#.#####.#.###.#.#####.#.#.###.#.#.#.#.#.#.#.#####
#.....###...#.....#.#...#.#.....#.#...#.#.........#...#...#...#...###...#.#.#...#.......#.#.#...#...#.....#.......#...#...#.#.#.#.#.#.#.#...#
#.###.###.#.#####.#.###.#.#.#####.###.#.#.###############################.#.###########.#.#.###.#.#####################.###.#.#.#.#.#.#.#.#.#
#...#.....#.#.....#.###...#.....#.....#...###############...###...........#...#.........#.#.#...#.....#.......#...#...#...#.#.#.#...#.#...#.#
###.#######.#.#####.###########.#########################.#.###.#############.#.#########.#.#.#######.#.#####.#.#.#.#.###.#.#.#.#####.#####.#
###.......#.#.......#...#...###.........###############...#...#.#...#...#...#.#.#...#...#.#.#.#.......#.#.....#.#.#.#.###...#...#...#.....#.#
#########.#.#########.#.#.#.###########.###############.#####.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#######.#.#####.#.#.#.###########.#.#####.#.#
#.........#.....#.....#...#.............###############...#...#...#...#.#.#.#.#...#...#...#...#.........#.....#.#...#.............#.....#.#.#
#.#############.#.#######################################.#.###########.#.#.#.###############################.#.#######################.#.#.#
#...#.........#.#.......................###############...#.........###...#...#.....###...#...#...............#.#.................#.....#...#
###.#.#######.#.#######################.###############.###########.###########.###.###.#.#.#.#.###############.#.###############.#.#########
###...#.......#.......................#...#############S#.....#.....#...#...###...#.....#.#.#.#.................#.............###.#.........#
#######.#############################.###.###############.###.#.#####.#.#.#.#####.#######.#.#.###############################.###.#########.#
#.......#...#...................#####.....#######.........###...###...#...#...###.......#.#.#.#...###...#.....#...#...#.....#...#.#.....#...#
#.#######.#.#.#################.#################.#################.#########.#########.#.#.#.#.#.###.#.#.###.#.#.#.#.#.###.###.#.#.###.#.###
#...#.....#...#.................#################...........#.....#.#...#...#...#.......#...#.#.#.#...#...###...#...#.#...#.#...#.#...#.#...#
###.#.#########.###########################################.#.###.#.#.#.#.#.###.#.###########.#.#.#.#################.###.#.#.###.###.#.###.#
###.#.#.......#...#...#.........#E#...................#...#...#...#.#.#...#...#...#.........#...#.#...#.............#.#...#...###...#.#.....#
###.#.#.#####.###.#.#.#.#######.#.#.#################.#.#.#####.###.#.#######.#####.#######.#####.###.#.###########.#.#.###########.#.#######
#...#.#.....#...#...#...###...#...#.................#...#.....#...#...#.....#...#...#...###.....#.....#.#...........#...#.........#.#.#.....#
#.###.#####.###.###########.#.#####################.#########.###.#####.###.###.#.###.#.#######.#######.#.###############.#######.#.#.#.###.#
#.....#...#...#.............#.................#...#.......###...#.....#...#.###...#...#.........#...#...#...#.......#...#.#.......#...#...#.#
#######.#.###.###############################.#.#.#######.#####.#####.###.#.#######.#############.#.#.#####.#.#####.#.#.#.#.#############.#.#
#.......#...#.......#.......................#...#.......#.....#.#.....#...#.#.......#...#.....#...#...###...#.....#...#...#.....#...#...#.#.#
#.#########.#######.#.#####################.###########.#####.#.#.#####.###.#.#######.#.#.###.#.#########.#######.#############.#.#.#.#.#.#.#
#.#.......#.......#.#.#.........###...#...#.....###...#.......#...#...#.#...#.........#.#...#.#.#.........#...###.#.............#.#...#.#.#.#
#.#.#####.#######.#.#.#.#######.###.#.#.#.#####.###.#.#############.#.#.#.#############.###.#.#.#.#########.#.###.#.#############.#####.#.#.#
#.#.#...#.....#...#...#.#.....#.....#...#.....#.#...#.............#.#.#.#...###...#...#.....#...#...........#.....#.....#...#...#...#...#.#.#
#.#.#.#.#####.#.#######.#.###.###############.#.#.###############.#.#.#.###.###.#.#.#.#################################.#.#.#.#.###.#.###.#.#
#.#.#.#.......#...#...#...###...............#...#...#.............#.#.#.#...#...#...#.#.......###...#.............#.....#.#...#.....#.#...#.#
#.#.#.###########.#.#.#####################.#######.#.#############.#.#.#.###.#######.#.#####.###.#.#.###########.#.#####.###########.#.###.#
#.#.#...........#.#.#.#...#...#...#.......#.....###.#.#.....###...#.#.#.#...#.......#...#.....#...#.#.....###...#...###...#.........#...#...#
#.#.###########.#.#.#.#.#.#.#.#.#.#.#####.#####.###.#.#.###.###.#.#.#.#.###.#######.#####.#####.###.#####.###.#.#######.###.#######.#####.###
#.#.#.......###.#...#...#...#...#.#...#...#...#.....#.#...#.#...#...#.#.#...#.......#...#.......#...#...#.....#...###...#...#...###.#.....###
#.#.#.#####.###.#################.###.#.###.#.#######.###.#.#.#######.#.#.###.#######.#.#########.###.#.#########.###.###.###.#.###.#.#######
#.#.#.#...#.#...#.......#.......#.....#.....#.#.....#...#.#...#.......#.#...#.........#...#.....#.....#.........#...#.#...#...#...#...#...###
#.#.#.#.#.#.#.###.#####.#.#####.#############.#.###.###.#.#####.#######.###.#############.#.###.###############.###.#.#.###.#####.#####.#.###
#.#.#...#.#.#...#...###...#.....#...........#.#.###.....#.#.....###...#.#...#.........###...###.#.............#...#...#.###...#...#.....#...#
#.#.#####.#.###.###.#######.#####.#########.#.#.#########.#.#######.#.#.#.###.#######.#########.#.###########.###.#####.#####.#.###.#######.#
#.#.#.....#.....#...#.......#...#.#.........#...#...#.....#...#...#.#.#.#.###...#.....#.......#...#...........###.....#.......#.....#...#...#
#.#.#.###########.###.#######.#.#.#.#############.#.#.#######.#.#.#.#.#.#.#####.#.#####.#####.#####.#################.###############.#.#.###
#...#...#...#...#...#.....#...#.#.#.#...###.......#.#.....#...#.#.#.#.#.#.....#.#.#...#.....#.......#...............#.#.....#...#.....#...###
#######.#.#.#.#.###.#####.#.###.#.#.#.#.###.#######.#####.#.###.#.#.#.#.#####.#.#.#.#.#####.#########.#############.#.#.###.#.#.#.###########
#.......#.#...#.....#...#...###...#...#...#.#...#...#...#.#...#.#.#.#.#...#...#.#.#.#.#...#.....#...#.#.............#...###.#.#.#...........#
#.#######.###########.#.#################.#.#.#.#.###.#.#.###.#.#.#.#.###.#.###.#.#.#.#.#.#####.#.#.#.#.###################.#.#.###########.#
#...#...#...#.........#...###.............#.#.#...#...#...#...#.#.#.#.....#.....#.#.#.#.#.###...#.#...#...................#.#.#...#.....#...#
###.#.#.###.#.###########.###.#############.#.#####.#######.###.#.#.#############.#.#.#.#.###.###.#######################.#.#.###.#.###.#.###
###...#.....#...........#...#.............#.#.....#.......#.###.#.#.......#.......#.#.#.#...#.....###...#.............#...#...#...#.###...###
#######################.###.#############.#.#####.#######.#.###.#.#######.#.#######.#.#.###.#########.#.#.###########.#.#######.###.#########
#...................###...#...............#.....#...#.....#...#.#.#...#...#.....#...#...#...###...#...#...#.....#...#...###...#...#.....#...#
#.#################.#####.#####################.###.#.#######.#.#.#.#.#.#######.#.#######.#####.#.#.#######.###.#.#.#######.#.###.#####.#.#.#
#.................#.#...#...........#.....#...#.#...#.....#...#.#.#.#.#.#.......#.......#.#...#.#.#.......#...#...#.........#...#.....#...#.#
#################.#.#.#.###########.#.###.#.#.#.#.#######.#.###.#.#.#.#.#.#############.#.#.#.#.#.#######.###.#################.#####.#####.#
#...#...#...#...#.#...#.......#.....#.#...#.#.#.#.#...###.#.###.#.#.#.#.#.#...###...###.#.#.#.#.#.#...###.....#...#...........#.....#.....#.#
#.#.#.#.#.#.#.#.#.###########.#.#####.#.###.#.#.#.#.#.###.#.###.#.#.#.#.#.#.#.###.#.###.#.#.#.#.#.#.#.#########.#.#.#########.#####.#####.#.#
#.#...#...#...#.#...........#.#.....#.#.#...#.#.#.#.#.#...#...#.#.#.#.#.#.#.#...#.#.#...#...#...#.#.#.#.......#.#.#.........#.#...#.#.....#.#
#.#############.###########.#.#####.#.#.#.###.#.#.#.#.#.#####.#.#.#.#.#.#.#.###.#.#.#.###########.#.#.#.#####.#.#.#########.#.#.#.#.#.#####.#
#.......#.....#.#...........#.......#.#.#...#.#.#.#.#...#.....#.#...#.#.#.#.#...#.#.#.......#.....#.#.#...###.#.#.#.....#...#...#...#.#...#.#
#######.#.###.#.#.###################.#.###.#.#.#.#.#####.#####.#####.#.#.#.#.###.#.#######.#.#####.#.###.###.#.#.#.###.#.###########.#.#.#.#
#.......#.#...#.#...................#.#.#...#.#.#...#.....#...#.....#.#.#.#.#...#.#...#.....#...#...#.#...#...#.#.#...#...#.....#...#.#.#.#.#
#.#######.#.###.###################.#.#.#.###.#.#####.#####.#.#####.#.#.#.#.###.#.###.#.#######.#.###.#.###.###.#.###.#####.###.#.#.#.#.#.#.#
#.#.......#...#.....................#.#.#...#.#.#.....#.....#...#...#.#.#...#...#...#.#.#.......#...#.#.###...#.#.#...#...#.#...#.#.#.#.#.#.#
#.#.#########.#######################.#.###.#.#.#.#####.#######.#.###.#.#####.#####.#.#.#.#########.#.#.#####.#.#.#.###.#.#.#.###.#.#.#.#.#.#
#...#.........#.......#.....#...#...#.#...#.#...#.....#...#.....#.###.#.#...#.#.....#.#.#...#...#...#.#.....#...#.#.....#...#...#.#.#...#...#
#####.#########.#####.#.###.#.#.#.#.#.###.#.#########.###.#.#####.###.#.#.#.#.#.#####.#.###.#.#.#.###.#####.#####.#############.#.#.#########
#...#.........#.#...#...###.#.#...#...###.#.........#.....#.....#.#...#.#.#...#.....#...###...#.#...#...#...#.....#.....#.....#...#...#.....#
#.#.#########.#.#.#.#######.#.###########.#########.###########.#.#.###.#.#########.###########.###.###.#.###.#####.###.#.###.#######.#.###.#
#.#...#.......#.#.#.........#...#.........#.........###...#.....#.#...#.#...#.......#...........#...#...#...#.......#...#...#...#...#...#...#
#.###.#.#######.#.#############.#.#########.###########.#.#.#####.###.#.###.#.#######.###########.###.#####.#########.#####.###.#.#.#####.###
#...#.#...#.....#.#...#...#...#.#.........#...........#.#...#.....###...###.#.....#...#.......#...#...#...#.........#.#.....#...#.#.....#...#
###.#.###.#.#####.#.#.#.#.#.#.#.#########.###########.#.#####.#############.#####.#.###.#####.#.###.###.#.#########.#.#.#####.###.#####.###.#
#...#.#...#.....#...#.#.#.#.#...#.........#...#.......#.#...#...###.........#.....#...#.#...#.#.###...#.#...#.....#.#.#...###...#...#...#...#
#.###.#.#######.#####.#.#.#.#####.#########.#.#.#######.#.#.###.###.#########.#######.#.#.#.#.#.#####.#.###.#.###.#.#.###.#####.###.#.###.###
#...#...#.....#.#.....#.#.#.#...#.....#...#.#.#.....###...#...#.#...#.....#...#...###...#.#...#.....#.#.#...#...#...#.....#...#...#.#...#...#
###.#####.###.#.#.#####.#.#.#.#.#####.#.#.#.#.#####.#########.#.#.###.###.#.###.#.#######.#########.#.#.#.#####.###########.#.###.#.###.###.#
#...#...#...#.#.#.#...#.#.#.#.#.......#.#.#.#.#...#.........#.#.#...#.#...#.....#.....#...#...#.....#.#.#.#...#...###...#...#...#.#.#...#...#
#.###.#.###.#.#.#.#.#.#.#.#.#.#########.#.#.#.#.#.#########.#.#.###.#.#.#############.#.###.#.#.#####.#.#.#.#.###.###.#.#.#####.#.#.#.###.###
#.....#.#...#.#.#...#.#.#.#.#.#.....#...#.#.#.#.#.#...#.....#.#...#...#.#...#...#...#.#...#.#.#.....#.#.#.#.#...#.....#...#.....#...#...#...#
#######.#.###.#.#####.#.#.#.#.#.###.#.###.#.#.#.#.#.#.#.#####.###.#####.#.#.#.#.#.#.#.###.#.#.#####.#.#.#.#.###.###########.###########.###.#
#.......#...#...###...#.#.#.#.#.###...###.#.#...#.#.#.#...###.#...#...#.#.#.#.#.#.#...###...#.#...#.#.#.#.#...#.#...#.....#.......#...#...#.#
#.#########.#######.###.#.#.#.#.#########.#.#####.#.#.###.###.#.###.#.#.#.#.#.#.#.###########.#.#.#.#.#.#.###.#.#.#.#.###.#######.#.#.###.#.#
#.....#.....#.......#...#...#...#.........#.....#.#.#...#...#.#.....#.#...#...#.#.#...###.....#.#.#.#.#.#.#...#...#.#...#.#.......#.#.#...#.#
#####.#.#####.#######.###########.#############.#.#.###.###.#.#######.#########.#.#.#.###.#####.#.#.#.#.#.#.#######.###.#.#.#######.#.#.###.#
#.....#.#...#.#...#...###.......#.......#...#...#.#...#...#.#.#...#...#.........#...#...#.....#.#...#...#.#.......#.#...#.#.........#.#...#.#
#.#####.#.#.#.#.#.#.#####.#####.#######.#.#.#.###.###.###.#.#.#.#.#.###.###############.#####.#.#########.#######.#.#.###.###########.###.#.#
#...#...#.#...#.#...#.....#...#.........#.#.#...#...#.#...#.#.#.#.#.###.....#...#...#...#.....#.......###.#.....#.#.#.###.....#.....#...#.#.#
###.#.###.#####.#####.#####.#.###########.#.###.###.#.#.###.#.#.#.#.#######.#.#.#.#.#.###.###########.###.#.###.#.#.#.#######.#.###.###.#.#.#
#...#.#...#...#...#...#...#.#...#.....#...#.#...#...#.#...#.#.#.#.#...#.....#.#.#.#.#...#.#...#...#...#...#...#.#.#.#.......#.#...#.#...#.#.#
#.###.#.###.#.###.#.###.#.#.###.#.###.#.###.#.###.###.###.#.#.#.#.###.#.#####.#.#.#.###.#.#.#.#.#.#.###.#####.#.#.#.#######.#.###.#.#.###.#.#
#.....#.....#.....#.....#...###...###...###...###.....###...#...#.....#.......#...#.....#...#...#...###.......#...#.........#.....#...###...#
#############################################################################################################################################

149
src/bin/20.rs Normal file
View file

@ -0,0 +1,149 @@
use std::collections::HashMap;
use itertools::Itertools;
static DIRECTIONS: [(isize, isize); 4] = [(0, -1), (1, 0), (0, 1), (-1, 0)];
static CHEATPOS1: [(isize, isize); 8] = [
(0, 2),
(1, 1),
(2, 0),
(1, -1),
(0, -2),
(-1, -1),
(-2, 0),
(-1, 1),
];
fn main() {
let text = std::fs::read_to_string("input/20-1.in").unwrap();
let mut startx = 0;
let mut starty = 0;
let map = text
.lines()
.enumerate()
.map(|(y, l)| {
l.chars()
.enumerate()
.map(|(x, c)| match c {
'#' => false,
'.' => true,
'S' => {
startx = x;
starty = y;
true
}
'E' => true,
_ => unreachable!(),
})
.collect::<Vec<_>>()
})
.collect::<Vec<_>>();
let mut path = vec![(startx, starty)];
while let Some((x, y)) = DIRECTIONS
.iter()
.filter_map(|&(dx, dy)| {
let &(lastx, lasty) = path.last()?;
let nx = lastx.checked_add_signed(dx)?;
let ny = lasty.checked_add_signed(dy)?;
if path
.last_chunk::<2>()
.is_some_and(|&[(px, py), _]| px == nx && py == ny)
{
return None;
}
if map[ny][nx] {
Some((nx, ny))
} else {
None
}
})
.next()
{
path.push((x, y));
}
let path_map = path
.iter()
.enumerate()
.map(|(i, &d)| (d, i))
.collect::<HashMap<_, _>>();
let t = path
.iter()
.cartesian_product(CHEATPOS1)
.filter_map(|(&(sx, sy), (dx, dy))| {
let endx = sx.checked_add_signed(dx)?;
let endy = sy.checked_add_signed(dy)?;
if endx < map[0].len() && endy < map.len() && map[endy][endx] {
if path_map[&(endx, endy)] > 2 + path_map[&(sx, sy)] {
Some((
(sx, sy),
(endx, endy),
path_map[&(endx, endy)] - 2 - path_map[&(sx, sy)],
))
} else {
None
}
} else {
None
}
})
.map(|(_, _, c)| c)
.filter(|&c| c >= 100)
.count();
println!("{t}");
let duration = 20isize;
let cheatpos2 = (-duration..=duration)
.cartesian_product(-duration..=duration)
.filter(|&(dx, dy)| dx.abs() + dy.abs() <= duration)
.collect::<Vec<_>>();
let t = path
.iter()
.cartesian_product(cheatpos2)
.filter_map(|(&(sx, sy), (dx, dy))| {
let endx = sx.checked_add_signed(dx)?;
let endy = sy.checked_add_signed(dy)?;
let len = (dx.abs() + dy.abs()) as usize;
if endx < map[0].len() && endy < map.len() && map[endy][endx] {
if path_map[&(endx, endy)] > len + path_map[&(sx, sy)] {
Some((
(sx, sy),
(endx, endy),
path_map[&(endx, endy)] - len - path_map[&(sx, sy)],
))
} else {
None
}
} else {
None
}
})
// .inspect(|d| {
// if d.0 .0 == 1 && d.0 .1 == 3 {
// dbg!(d);
// }
// })
.map(|(_, _, c)| c)
// .filter(|&c| c >= 50)
// .counts();
.filter(|&c| c >= 100)
.count();
// let mut t = t.iter().collect::<Vec<_>>();
// t.sort();
// dbg!(t);
println!("{t}");
}