From b05a0cfc7ffb8d6c986e5ba35ebf048507dbf1c5 Mon Sep 17 00:00:00 2001 From: hal8174 Date: Fri, 20 Dec 2024 20:44:27 +0100 Subject: [PATCH] Solve day 20 --- input/20-0.in | 15 +++++ input/20-1.in | 141 +++++++++++++++++++++++++++++++++++++++++++++++ src/bin/20.rs | 149 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 305 insertions(+) create mode 100644 input/20-0.in create mode 100644 input/20-1.in create mode 100644 src/bin/20.rs diff --git a/input/20-0.in b/input/20-0.in new file mode 100644 index 0000000..c097dae --- /dev/null +++ b/input/20-0.in @@ -0,0 +1,15 @@ +############### +#...#...#.....# +#.#.#.#.#.###.# +#S#...#.#.#...# +#######.#.#.### +#######.#.#...# +#######.#.###.# +###..E#...#...# +###.#######.### +#...###...#...# +#.#####.#.###.# +#.#...#.#.#...# +#.#.#.#.#.#.### +#...#...#...### +############### diff --git a/input/20-1.in b/input/20-1.in new file mode 100644 index 0000000..94dae89 --- /dev/null +++ b/input/20-1.in @@ -0,0 +1,141 @@ +############################################################################################################################################# +#...........###...#...........###...###...#.....#...#...###.......#.....#.......#...#.......###...#...#.....#...#...#...###...#.............# +#.#########.###.#.#.#########.###.#.###.#.#.###.#.#.#.#.###.#####.#.###.#.#####.#.#.#.#####.###.#.#.#.#.###.#.#.#.#.#.#.###.#.#.###########.# +#.#...#...#...#.#.#.........#.#...#.#...#.#...#.#.#.#.#.#...#...#.#.#...#.....#.#.#.#.....#...#.#.#.#.#...#...#.#.#.#.#...#.#...#...#.......# +#.#.#.#.#.###.#.#.#########.#.#.###.#.###.###.#.#.#.#.#.#.###.#.#.#.#.#######.#.#.#.#####.###.#.#.#.#.###.#####.#.#.#.###.#.#####.#.#.####### +#...#...#...#.#.#...#.....#.#.#...#.#...#...#.#.#.#.#.#.#.#...#...#.#.#...###.#.#.#.#...#...#...#...#.#...#.....#.#...#...#...#...#...#.....# +###########.#.#.###.#.###.#.#.###.#.###.###.#.#.#.#.#.#.#.#.#######.#.#.#.###.#.#.#.#.#.###.#########.#.###.#####.#####.#####.#.#######.###.# +#...........#.#.#...#...#.#.#.#...#...#.#...#.#.#.#.#.#...#.#...###.#.#.#.#...#...#...#...#.#.........#...#.....#...#...#.....#.....#...#...# +#.###########.#.#.#####.#.#.#.#.#####.#.#.###.#.#.#.#.#####.#.#.###.#.#.#.#.#############.#.#.###########.#####.###.#.###.#########.#.###.### +#...........#.#.#.#.....#.#.#.#.....#.#.#.#...#...#...#...#.#.#.....#...#.#.#...#.......#...#...###...###.#...#.#...#...#...#...#...#...#.### +###########.#.#.#.#.#####.#.#.#####.#.#.#.#.###########.#.#.#.###########.#.#.#.#.#####.#######.###.#.###.#.#.#.#.#####.###.#.#.#.#####.#.### +#.....#.....#...#.#.....#.#.#.###...#.#.#.#...#.........#...#.#...........#...#...#...#.....#...#...#.#...#.#...#.....#.....#.#...#...#.#...# +#.###.#.#########.#####.#.#.#.###.###.#.#.###.#.#############.#.###################.#.#####.#.###.###.#.###.#########.#######.#####.#.#.###.# +#...#.#.........#.#...#.#.#.#...#.#...#.#.#...#.....#...###...#...........###.......#.....#.#.#...#...#...#...###...#.#.......#...#.#.#...#.# +###.#.#########.#.#.#.#.#.#.###.#.#.###.#.#.#######.#.#.###.#############.###.###########.#.#.#.###.#####.###.###.#.#.#.#######.#.#.#.###.#.# +###.#.#...#...#.#.#.#.#.#.#...#.#.#...#.#...#.......#.#.#...#.............#...#.........#.#.#...#...#...#...#.#...#...#...#.....#.#.#...#.#.# +###.#.#.#.#.#.#.#.#.#.#.#.###.#.#.###.#.#####.#######.#.#.###.#############.###.#######.#.#.#####.###.#.###.#.#.#########.#.#####.#.###.#.#.# +#...#...#...#...#.#.#.#.#.###.#.#.#...#.....#.#...###.#.#...#.#...#...#...#...#.#.......#...#.....###.#.....#...#.........#.#.....#.#...#.#.# +#.###############.#.#.#.#.###.#.#.#.#######.#.#.#.###.#.###.#.#.#.#.#.#.#.###.#.#.###########.#######.###########.#########.#.#####.#.###.#.# +#.#...#.........#...#...#.#...#...#.#...#...#...#...#.#.#...#...#.#.#.#.#...#...#...........#...#...#.........#...###...###.#.......#.....#.# +#.#.#.#.#######.#########.#.#######.#.#.#.#########.#.#.#.#######.#.#.#.###.###############.###.#.#.#########.#.#####.#.###.###############.# +#...#...#...###.........#.#...#.....#.#...#.........#.#.#...#.....#.#.#.#...#.........#...#.#...#.#...###...#.#.....#.#.#...#...............# +#########.#.###########.#.###.#.#####.#####.#########.#.###.#.#####.#.#.#.###.#######.#.#.#.#.###.###.###.#.#.#####.#.#.#.###.############### +#.....#...#.......#.....#.#...#...###.....#.....#...#.#.#...#.#...#.#.#.#...#.......#...#.#.#.###.#...#...#.#.#.....#.#.#...#.###.......#...# +#.###.#.#########.#.#####.#.#####.#######.#####.#.#.#.#.#.###.#.#.#.#.#.###.#######.#####.#.#.###.#.###.###.#.#.#####.#.###.#.###.#####.#.#.# +#...#.#.........#.#.....#.#.....#.......#.#.....#.#.#.#.#...#.#.#.#.#.#...#...#...#.....#...#...#.#...#...#.#.#.....#.#.#...#...#...#...#.#.# +###.#.#########.#.#####.#.#####.#######.#.#.#####.#.#.#.###.#.#.#.#.#.###.###.#.#.#####.#######.#.###.###.#.#.#####.#.#.#.#####.###.#.###.#.# +#...#.........#.#.......#.....#.#.......#.#.....#.#.#.#.#...#.#.#.#.#...#.#...#.#.#...#.#.......#...#...#.#.#.#.....#.#...#...#.....#.....#.# +#.###########.#.#############.#.#.#######.#####.#.#.#.#.#.###.#.#.#.###.#.#.###.#.#.#.#.#.#########.###.#.#.#.#.#####.#####.#.#############.# +#...........#...#.....#.....#...#...###...#.....#.#.#.#.#...#...#.#...#...#.#...#.#.#.#.#.###...###...#...#.#.#.....#.#.....#.#...#.........# +###########.#####.###.#.###.#######.###.###.#####.#.#.#.###.#####.###.#####.#.###.#.#.#.#.###.#.#####.#####.#.#####.#.#.#####.#.#.#.######### +#...#.......#.....###...###...#...#.#...#...#...#.#...#...#.#.....###...#...#...#.#.#...#...#.#.#...#.#.....#.....#...#.....#...#...#.......# +#.#.#.#######.###############.#.#.#.#.###.###.#.#.#######.#.#.#########.#.#####.#.#.#######.#.#.#.#.#.#.#########.#########.#########.#####.# +#.#.#.........#...#...#...###...#.#.#...#.###.#.#.#.......#.#.#...#...#.#.#...#.#.#.....#...#.#.#.#.#.#.###...###...#.....#.#.....###.#.....# +#.#.###########.#.#.#.#.#.#######.#.###.#.###.#.#.#.#######.#.#.#.#.#.#.#.#.#.#.#.#####.#.###.#.#.#.#.#.###.#.#####.#.###.#.#.###.###.#.##### +#.#.............#...#...#.........#...#.#.#...#.#.#.#...#...#.#.#...#.#.#.#.#.#.#.#...#.#.#...#.#.#.#.#...#.#.#...#.#.###...#.#...#...#...### +#.###################################.#.#.#.###.#.#.#.#.#.###.#.#####.#.#.#.#.#.#.#.#.#.#.#.###.#.#.#.###.#.#.#.#.#.#.#######.#.###.#####.### +#...............................#...#...#...###.#.#...#.#...#.#...#...#.#...#.#.#.#.#...#.#...#.#.#...###...#...#.#.#...#...#.#.....#...#...# +###############################.#.#.###########.#.#####.###.#.###.#.###.#####.#.#.#.#####.###.#.#.###############.#.###.#.#.#.#######.#.###.# +#...#...###...#.................#.#.#...#.....#.#.#.....#...#.#...#...#...#...#.#.#...###.#...#.#.#...............#.#...#.#.#.#.......#.....# +#.#.#.#.###.#.#.#################.#.#.#.#.###.#.#.#.#####.###.#.#####.###.#.###.#.###.###.#.###.#.#.###############.#.###.#.#.#.############# +#.#.#.#.#...#...#...#.............#...#...#...#...#.....#.#...#.....#...#.#...#.#...#...#.#...#...#.......#.........#.....#...#...#.....#...# +#.#.#.#.#.#######.#.#.#####################.###########.#.#.#######.###.#.###.#.###.###.#.###.###########.#.#####################.#.###.#.#.# +#.#.#.#.#...#.....#...#...................#.....#.......#.#.#...#...#...#...#.#.###...#.#.....#...........#...#.....#.....#.......#.#...#.#.# +#.#.#.#.###.#.#########.#################.#####.#.#######.#.#.#.#.###.#####.#.#.#####.#.#######.#############.#.###.#.###.#.#######.#.###.#.# +#.#...#.....#.#.........#...#...#.......#...#...#...#...#.#.#.#.#.###.#...#.#...#.....#...#...#.....#.........#...#.#.#...#.........#...#.#.# +#.###########.#.#########.#.#.#.#.#####.###.#.#####.#.#.#.#.#.#.#.###.#.#.#.#####.#######.#.#.#####.#.###########.#.#.#.###############.#.#.# +#.#...#...#...#...#.....#.#.#.#...#...#...#...#...#.#.#.#.#.#.#.#.#...#.#.#.....#.......#...#.....#...#.....#.....#.#.#...#...#...#...#...#.# +#.#.#.#.#.#.#####.#.###.#.#.#.#####.#.###.#####.#.#.#.#.#.#.#.#.#.#.###.#.#####.#######.#########.#####.###.#.#####.#.###.#.#.#.#.#.#.#####.# +#...#...#...#.....#.#...#.#...#...#.#...#.......#.#.#.#.#.#.#.#.#.#...#.#.#...#.#.......#...#.....#...#...#.#.....#.#.###.#.#.#.#.#.#.#.....# +#############.#####.#.###.#####.#.#.###.#########.#.#.#.#.#.#.#.#.###.#.#.#.#.#.#.#######.#.#.#####.#.###.#.#####.#.#.###.#.#.#.#.#.#.#.##### +#.....###...#.....#.#...#.#.....#.#...#.#.........#...#...#...#...###...#.#.#...#.......#.#.#...#...#.....#.......#...#...#.#.#.#.#.#.#.#...# +#.###.###.#.#####.#.###.#.#.#####.###.#.#.###############################.#.###########.#.#.###.#.#####################.###.#.#.#.#.#.#.#.#.# +#...#.....#.#.....#.###...#.....#.....#...###############...###...........#...#.........#.#.#...#.....#.......#...#...#...#.#.#.#...#.#...#.# +###.#######.#.#####.###########.#########################.#.###.#############.#.#########.#.#.#######.#.#####.#.#.#.#.###.#.#.#.#####.#####.# +###.......#.#.......#...#...###.........###############...#...#.#...#...#...#.#.#...#...#.#.#.#.......#.#.....#.#.#.#.###...#...#...#.....#.# +#########.#.#########.#.#.#.###########.###############.#####.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#######.#.#####.#.#.#.###########.#.#####.#.# +#.........#.....#.....#...#.............###############...#...#...#...#.#.#.#.#...#...#...#...#.........#.....#.#...#.............#.....#.#.# +#.#############.#.#######################################.#.###########.#.#.#.###############################.#.#######################.#.#.# +#...#.........#.#.......................###############...#.........###...#...#.....###...#...#...............#.#.................#.....#...# +###.#.#######.#.#######################.###############.###########.###########.###.###.#.#.#.#.###############.#.###############.#.######### +###...#.......#.......................#...#############S#.....#.....#...#...###...#.....#.#.#.#.................#.............###.#.........# +#######.#############################.###.###############.###.#.#####.#.#.#.#####.#######.#.#.###############################.###.#########.# +#.......#...#...................#####.....#######.........###...###...#...#...###.......#.#.#.#...###...#.....#...#...#.....#...#.#.....#...# +#.#######.#.#.#################.#################.#################.#########.#########.#.#.#.#.#.###.#.#.###.#.#.#.#.#.###.###.#.#.###.#.### +#...#.....#...#.................#################...........#.....#.#...#...#...#.......#...#.#.#.#...#...###...#...#.#...#.#...#.#...#.#...# +###.#.#########.###########################################.#.###.#.#.#.#.#.###.#.###########.#.#.#.#################.###.#.#.###.###.#.###.# +###.#.#.......#...#...#.........#E#...................#...#...#...#.#.#...#...#...#.........#...#.#...#.............#.#...#...###...#.#.....# +###.#.#.#####.###.#.#.#.#######.#.#.#################.#.#.#####.###.#.#######.#####.#######.#####.###.#.###########.#.#.###########.#.####### +#...#.#.....#...#...#...###...#...#.................#...#.....#...#...#.....#...#...#...###.....#.....#.#...........#...#.........#.#.#.....# +#.###.#####.###.###########.#.#####################.#########.###.#####.###.###.#.###.#.#######.#######.#.###############.#######.#.#.#.###.# +#.....#...#...#.............#.................#...#.......###...#.....#...#.###...#...#.........#...#...#...#.......#...#.#.......#...#...#.# +#######.#.###.###############################.#.#.#######.#####.#####.###.#.#######.#############.#.#.#####.#.#####.#.#.#.#.#############.#.# +#.......#...#.......#.......................#...#.......#.....#.#.....#...#.#.......#...#.....#...#...###...#.....#...#...#.....#...#...#.#.# +#.#########.#######.#.#####################.###########.#####.#.#.#####.###.#.#######.#.#.###.#.#########.#######.#############.#.#.#.#.#.#.# +#.#.......#.......#.#.#.........###...#...#.....###...#.......#...#...#.#...#.........#.#...#.#.#.........#...###.#.............#.#...#.#.#.# +#.#.#####.#######.#.#.#.#######.###.#.#.#.#####.###.#.#############.#.#.#.#############.###.#.#.#.#########.#.###.#.#############.#####.#.#.# +#.#.#...#.....#...#...#.#.....#.....#...#.....#.#...#.............#.#.#.#...###...#...#.....#...#...........#.....#.....#...#...#...#...#.#.# +#.#.#.#.#####.#.#######.#.###.###############.#.#.###############.#.#.#.###.###.#.#.#.#################################.#.#.#.#.###.#.###.#.# +#.#.#.#.......#...#...#...###...............#...#...#.............#.#.#.#...#...#...#.#.......###...#.............#.....#.#...#.....#.#...#.# +#.#.#.###########.#.#.#####################.#######.#.#############.#.#.#.###.#######.#.#####.###.#.#.###########.#.#####.###########.#.###.# +#.#.#...........#.#.#.#...#...#...#.......#.....###.#.#.....###...#.#.#.#...#.......#...#.....#...#.#.....###...#...###...#.........#...#...# +#.#.###########.#.#.#.#.#.#.#.#.#.#.#####.#####.###.#.#.###.###.#.#.#.#.###.#######.#####.#####.###.#####.###.#.#######.###.#######.#####.### +#.#.#.......###.#...#...#...#...#.#...#...#...#.....#.#...#.#...#...#.#.#...#.......#...#.......#...#...#.....#...###...#...#...###.#.....### +#.#.#.#####.###.#################.###.#.###.#.#######.###.#.#.#######.#.#.###.#######.#.#########.###.#.#########.###.###.###.#.###.#.####### +#.#.#.#...#.#...#.......#.......#.....#.....#.#.....#...#.#...#.......#.#...#.........#...#.....#.....#.........#...#.#...#...#...#...#...### +#.#.#.#.#.#.#.###.#####.#.#####.#############.#.###.###.#.#####.#######.###.#############.#.###.###############.###.#.#.###.#####.#####.#.### +#.#.#...#.#.#...#...###...#.....#...........#.#.###.....#.#.....###...#.#...#.........###...###.#.............#...#...#.###...#...#.....#...# +#.#.#####.#.###.###.#######.#####.#########.#.#.#########.#.#######.#.#.#.###.#######.#########.#.###########.###.#####.#####.#.###.#######.# +#.#.#.....#.....#...#.......#...#.#.........#...#...#.....#...#...#.#.#.#.###...#.....#.......#...#...........###.....#.......#.....#...#...# +#.#.#.###########.###.#######.#.#.#.#############.#.#.#######.#.#.#.#.#.#.#####.#.#####.#####.#####.#################.###############.#.#.### +#...#...#...#...#...#.....#...#.#.#.#...###.......#.#.....#...#.#.#.#.#.#.....#.#.#...#.....#.......#...............#.#.....#...#.....#...### +#######.#.#.#.#.###.#####.#.###.#.#.#.#.###.#######.#####.#.###.#.#.#.#.#####.#.#.#.#.#####.#########.#############.#.#.###.#.#.#.########### +#.......#.#...#.....#...#...###...#...#...#.#...#...#...#.#...#.#.#.#.#...#...#.#.#.#.#...#.....#...#.#.............#...###.#.#.#...........# +#.#######.###########.#.#################.#.#.#.#.###.#.#.###.#.#.#.#.###.#.###.#.#.#.#.#.#####.#.#.#.#.###################.#.#.###########.# +#...#...#...#.........#...###.............#.#.#...#...#...#...#.#.#.#.....#.....#.#.#.#.#.###...#.#...#...................#.#.#...#.....#...# +###.#.#.###.#.###########.###.#############.#.#####.#######.###.#.#.#############.#.#.#.#.###.###.#######################.#.#.###.#.###.#.### +###...#.....#...........#...#.............#.#.....#.......#.###.#.#.......#.......#.#.#.#...#.....###...#.............#...#...#...#.###...### +#######################.###.#############.#.#####.#######.#.###.#.#######.#.#######.#.#.###.#########.#.#.###########.#.#######.###.######### +#...................###...#...............#.....#...#.....#...#.#.#...#...#.....#...#...#...###...#...#...#.....#...#...###...#...#.....#...# +#.#################.#####.#####################.###.#.#######.#.#.#.#.#.#######.#.#######.#####.#.#.#######.###.#.#.#######.#.###.#####.#.#.# +#.................#.#...#...........#.....#...#.#...#.....#...#.#.#.#.#.#.......#.......#.#...#.#.#.......#...#...#.........#...#.....#...#.# +#################.#.#.#.###########.#.###.#.#.#.#.#######.#.###.#.#.#.#.#.#############.#.#.#.#.#.#######.###.#################.#####.#####.# +#...#...#...#...#.#...#.......#.....#.#...#.#.#.#.#...###.#.###.#.#.#.#.#.#...###...###.#.#.#.#.#.#...###.....#...#...........#.....#.....#.# +#.#.#.#.#.#.#.#.#.###########.#.#####.#.###.#.#.#.#.#.###.#.###.#.#.#.#.#.#.#.###.#.###.#.#.#.#.#.#.#.#########.#.#.#########.#####.#####.#.# +#.#...#...#...#.#...........#.#.....#.#.#...#.#.#.#.#.#...#...#.#.#.#.#.#.#.#...#.#.#...#...#...#.#.#.#.......#.#.#.........#.#...#.#.....#.# +#.#############.###########.#.#####.#.#.#.###.#.#.#.#.#.#####.#.#.#.#.#.#.#.###.#.#.#.###########.#.#.#.#####.#.#.#########.#.#.#.#.#.#####.# +#.......#.....#.#...........#.......#.#.#...#.#.#.#.#...#.....#.#...#.#.#.#.#...#.#.#.......#.....#.#.#...###.#.#.#.....#...#...#...#.#...#.# +#######.#.###.#.#.###################.#.###.#.#.#.#.#####.#####.#####.#.#.#.#.###.#.#######.#.#####.#.###.###.#.#.#.###.#.###########.#.#.#.# +#.......#.#...#.#...................#.#.#...#.#.#...#.....#...#.....#.#.#.#.#...#.#...#.....#...#...#.#...#...#.#.#...#...#.....#...#.#.#.#.# +#.#######.#.###.###################.#.#.#.###.#.#####.#####.#.#####.#.#.#.#.###.#.###.#.#######.#.###.#.###.###.#.###.#####.###.#.#.#.#.#.#.# +#.#.......#...#.....................#.#.#...#.#.#.....#.....#...#...#.#.#...#...#...#.#.#.......#...#.#.###...#.#.#...#...#.#...#.#.#.#.#.#.# +#.#.#########.#######################.#.###.#.#.#.#####.#######.#.###.#.#####.#####.#.#.#.#########.#.#.#####.#.#.#.###.#.#.#.###.#.#.#.#.#.# +#...#.........#.......#.....#...#...#.#...#.#...#.....#...#.....#.###.#.#...#.#.....#.#.#...#...#...#.#.....#...#.#.....#...#...#.#.#...#...# +#####.#########.#####.#.###.#.#.#.#.#.###.#.#########.###.#.#####.###.#.#.#.#.#.#####.#.###.#.#.#.###.#####.#####.#############.#.#.######### +#...#.........#.#...#...###.#.#...#...###.#.........#.....#.....#.#...#.#.#...#.....#...###...#.#...#...#...#.....#.....#.....#...#...#.....# +#.#.#########.#.#.#.#######.#.###########.#########.###########.#.#.###.#.#########.###########.###.###.#.###.#####.###.#.###.#######.#.###.# +#.#...#.......#.#.#.........#...#.........#.........###...#.....#.#...#.#...#.......#...........#...#...#...#.......#...#...#...#...#...#...# +#.###.#.#######.#.#############.#.#########.###########.#.#.#####.###.#.###.#.#######.###########.###.#####.#########.#####.###.#.#.#####.### +#...#.#...#.....#.#...#...#...#.#.........#...........#.#...#.....###...###.#.....#...#.......#...#...#...#.........#.#.....#...#.#.....#...# +###.#.###.#.#####.#.#.#.#.#.#.#.#########.###########.#.#####.#############.#####.#.###.#####.#.###.###.#.#########.#.#.#####.###.#####.###.# +#...#.#...#.....#...#.#.#.#.#...#.........#...#.......#.#...#...###.........#.....#...#.#...#.#.###...#.#...#.....#.#.#...###...#...#...#...# +#.###.#.#######.#####.#.#.#.#####.#########.#.#.#######.#.#.###.###.#########.#######.#.#.#.#.#.#####.#.###.#.###.#.#.###.#####.###.#.###.### +#...#...#.....#.#.....#.#.#.#...#.....#...#.#.#.....###...#...#.#...#.....#...#...###...#.#...#.....#.#.#...#...#...#.....#...#...#.#...#...# +###.#####.###.#.#.#####.#.#.#.#.#####.#.#.#.#.#####.#########.#.#.###.###.#.###.#.#######.#########.#.#.#.#####.###########.#.###.#.###.###.# +#...#...#...#.#.#.#...#.#.#.#.#.......#.#.#.#.#...#.........#.#.#...#.#...#.....#.....#...#...#.....#.#.#.#...#...###...#...#...#.#.#...#...# +#.###.#.###.#.#.#.#.#.#.#.#.#.#########.#.#.#.#.#.#########.#.#.###.#.#.#############.#.###.#.#.#####.#.#.#.#.###.###.#.#.#####.#.#.#.###.### +#.....#.#...#.#.#...#.#.#.#.#.#.....#...#.#.#.#.#.#...#.....#.#...#...#.#...#...#...#.#...#.#.#.....#.#.#.#.#...#.....#...#.....#...#...#...# +#######.#.###.#.#####.#.#.#.#.#.###.#.###.#.#.#.#.#.#.#.#####.###.#####.#.#.#.#.#.#.#.###.#.#.#####.#.#.#.#.###.###########.###########.###.# +#.......#...#...###...#.#.#.#.#.###...###.#.#...#.#.#.#...###.#...#...#.#.#.#.#.#.#...###...#.#...#.#.#.#.#...#.#...#.....#.......#...#...#.# +#.#########.#######.###.#.#.#.#.#########.#.#####.#.#.###.###.#.###.#.#.#.#.#.#.#.###########.#.#.#.#.#.#.###.#.#.#.#.###.#######.#.#.###.#.# +#.....#.....#.......#...#...#...#.........#.....#.#.#...#...#.#.....#.#...#...#.#.#...###.....#.#.#.#.#.#.#...#...#.#...#.#.......#.#.#...#.# +#####.#.#####.#######.###########.#############.#.#.###.###.#.#######.#########.#.#.#.###.#####.#.#.#.#.#.#.#######.###.#.#.#######.#.#.###.# +#.....#.#...#.#...#...###.......#.......#...#...#.#...#...#.#.#...#...#.........#...#...#.....#.#...#...#.#.......#.#...#.#.........#.#...#.# +#.#####.#.#.#.#.#.#.#####.#####.#######.#.#.#.###.###.###.#.#.#.#.#.###.###############.#####.#.#########.#######.#.#.###.###########.###.#.# +#...#...#.#...#.#...#.....#...#.........#.#.#...#...#.#...#.#.#.#.#.###.....#...#...#...#.....#.......###.#.....#.#.#.###.....#.....#...#.#.# +###.#.###.#####.#####.#####.#.###########.#.###.###.#.#.###.#.#.#.#.#######.#.#.#.#.#.###.###########.###.#.###.#.#.#.#######.#.###.###.#.#.# +#...#.#...#...#...#...#...#.#...#.....#...#.#...#...#.#...#.#.#.#.#...#.....#.#.#.#.#...#.#...#...#...#...#...#.#.#.#.......#.#...#.#...#.#.# +#.###.#.###.#.###.#.###.#.#.###.#.###.#.###.#.###.###.###.#.#.#.#.###.#.#####.#.#.#.###.#.#.#.#.#.#.###.#####.#.#.#.#######.#.###.#.#.###.#.# +#.....#.....#.....#.....#...###...###...###...###.....###...#...#.....#.......#...#.....#...#...#...###.......#...#.........#.....#...###...# +############################################################################################################################################# diff --git a/src/bin/20.rs b/src/bin/20.rs new file mode 100644 index 0000000..c3d328f --- /dev/null +++ b/src/bin/20.rs @@ -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::>() + }) + .collect::>(); + + 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::>(); + + 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::>(); + + 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::>(); + // t.sort(); + // dbg!(t); + println!("{t}"); +}