adventofcode

git clone https://git.ce9e.org/adventofcode.git

commit
d94a3b4129af946d8981c9031efee339de9454c0
parent
adfcef78c31a3f0ffecaefd93f503d266492d43e
Author
Tobias Bengfort <tobias.bengfort@posteo.de>
Date
2024-12-21 10:22
2024-12-20

Diffstat

A 2024/20/input.txt 141 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A 2024/20/solution.rs 82 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A 2024/20/test.txt 15 +++++++++++++++

3 files changed, 238 insertions, 0 deletions


diff --git a/2024/20/input.txt b/2024/20/input.txt

@@ -0,0 +1,141 @@
   -1     1 #############################################################################################################################################
   -1     2 #.....#.......#...#...#...#.....#.......###...###.......#.......###.....#.....#.....#...###.....#...#...###.........#.......#...#...###.....#
   -1     3 #.###.#.#####.#.#.#.#.#.#.#.###.#.#####.###.#.###.#####.#.#####.###.###.#.###.#.###.#.#.###.###.#.#.#.#.###.#######.#.#####.#.#.#.#.###.###.#
   -1     4 #.#...#...#...#.#.#.#...#.#...#.#...#...#...#.....#...#.#.....#...#...#...#...#...#...#.#...#...#.#.#.#.#...#.......#.....#...#...#...#.#...#
   -1     5 #.#.#####.#.###.#.#.#####.###.#.###.#.###.#########.#.#.#####.###.###.#####.#####.#####.#.###.###.#.#.#.#.###.###########.###########.#.#.###
   -1     6 #.#...#...#.#...#.#.....#.....#.#...#...#...#.......#...#...#.#...###...#...#####.....#.#.#...#...#.#.#.#...#.....#.....#...#.........#.#...#
   -1     7 #.###.#.###.#.###.#####.#######.#.#####.###.#.###########.#.#.#.#######.#.###########.#.#.#.###.###.#.#.###.#####.#.###.###.#.#########.###.#
   -1     8 #...#.#.#...#...#...#...#.....#.#.....#.....#.....#...###.#.#.#.#...#...#.#...#...#...#.#.#...#...#.#.#.###.#.....#.#...#...#...###.....#...#
   -1     9 ###.#.#.#.#####.###.#.###.###.#.#####.###########.#.#.###.#.#.#.#.#.#.###.#.#.#.#.#.###.#.###.###.#.#.#.###.#.#####.#.###.#####.###.#####.###
   -1    10 #...#.#.#.#...#...#.#...#...#...#...#...#...#...#.#.#.#...#.#.#.#.#.#...#.#.#.#.#.#...#.#...#.###.#.#.#.....#...#...#.....#...#...#.#.....###
   -1    11 #.###.#.#.#.#.###.#.###.###.#####.#.###.#.#.#.#.#.#.#.#.###.#.#.#.#.###.#.#.#.#.#.###.#.###.#.###.#.#.#########.#.#########.#.###.#.#.#######
   -1    12 #...#...#...#...#.#.###...#...#...#...#.#.#.#.#...#.#...#...#.#.#.#.#...#...#.#.#...#.#.###.#...#.#.#.....#.....#.#.....#...#.....#.#.......#
   -1    13 ###.###########.#.#.#####.###.#.#####.#.#.#.#.#####.#####.###.#.#.#.#.#######.#.###.#.#.###.###.#.#.#####.#.#####.#.###.#.#########.#######.#
   -1    14 #...#.....#...#...#.....#.#...#...#...#...#.#...#...#...#.#...#.#.#.#.....#...#...#...#.....#...#.#.###...#.###...#...#.#.#...#...#.#.......#
   -1    15 #.###.###.#.#.#########.#.#.#####.#.#######.###.#.###.#.#.#.###.#.#.#####.#.#####.###########.###.#.###.###.###.#####.#.#.#.#.#.#.#.#.#######
   -1    16 #...#...#.#.#.........#...#.#.....#...#...#.#...#.....#.#.#...#.#.#...###.#.#...#.....#.......#...#...#...#...#...#...#...#.#.#.#.#.#...#...#
   -1    17 ###.###.#.#.#########.#####.#.#######.#.#.#.#.#########.#.###.#.#.###.###.#.#.#.#####.#.#######.#####.###.###.###.#.#######.#.#.#.#.###.#.#.#
   -1    18 #...#...#...###...###...#...#...#.....#.#.#.#.#...###...#.#...#.#.#...#...#...#.#.....#.......#.#...#...#...#.#...#.....#...#...#...#...#.#.#
   -1    19 #.###.#########.#.#####.#.#####.#.#####.#.#.#.#.#.###.###.#.###.#.#.###.#######.#.###########.#.#.#.###.###.#.#.#######.#.###########.###.#.#
   -1    20 #.....#...#.....#...###.#.#####.#.#.....#.#.#.#.#.#...#...#.#...#.#...#.#.....#.#.....#.......#...#.#...#...#.#.#.......#.#...........#...#.#
   -1    21 #######.#.#.#######.###.#.#####.#.#.#####.#.#.#.#.#.###.###.#.###.###.#.#.###.#.#####.#.###########.#.###.###.#.#.#######.#.###########.###.#
   -1    22 ###.....#.#.....#...#...#...#...#.#.....#.#.#.#.#.#...#.###.#...#...#.#...#...#.....#.#...#...###...#...#.#...#.#...#...#.#.#...###.....#...#
   -1    23 ###.#####.#####.#.###.#####.#.###.#####.#.#.#.#.#.###.#.###.###.###.#.#####.#######.#.###.#.#.###.#####.#.#.###.###.#.#.#.#.#.#.###.#####.###
   -1    24 #...#...#...#...#...#...#...#...#...#...#...#.#.#...#.#...#.#...#...#.....#...#...#...#...#.#...#.....#.#.#.###.#...#.#...#...#...#.#.....###
   -1    25 #.###.#.###.#.#####.###.#.#####.###.#.#######.#.###.#.###.#.#.###.#######.###.#.#.#####.###.###.#####.#.#.#.###.#.###.###########.#.#.#######
   -1    26 #...#.#...#...#...#...#.#...#...#...#.#.....#.#.#...#...#.#.#...#.#.......###...#.....#...#.#...#...#.#.#.#.#...#.....#.........#...#.....###
   -1    27 ###.#.###.#####.#.###.#.###.#.###.###.#.###.#.#.#.#####.#.#.###.#.#.#################.###.#.#.###.#.#.#.#.#.#.#########.#######.#########.###
   -1    28 ###...###...#...#...#...#...#.#...###...#...#.#.#...#...#.#.#...#.#.......#...#...###.#...#.#.#...#.#.#.#.#...#...#...#.......#.....#...#...#
   -1    29 ###########.#.#####.#####.###.#.#########.###.#.###.#.###.#.#.###.#######.#.#.#.#.###.#.###.#.#.###.#.#.#.#####.#.#.#.#######.#####.#.#.###.#
   -1    30 #.....###...#.#...#.#...#.....#.#...#...#...#.#.#...#...#.#.#.#...#.......#.#.#.#.....#.###.#.#...#...#.#.#.....#...#.#.....#.....#...#.#...#
   -1    31 #.###.###.###.#.#.#.#.#.#######.#.#.#.#.###.#.#.#.#####.#.#.#.#.###.#######.#.#.#######.###.#.###.#####.#.#.#########.#.###.#####.#####.#.###
   -1    32 #...#...#.....#.#.#...#...#...#.#.#.#.#.#...#...#.#.....#...#.#...#.#...#...#.#.....#...#...#...#.....#.#.#.#.....#...#...#.#...#.#...#.#...#
   -1    33 ###.###.#######.#.#######.#.#.#.#.#.#.#.#.#######.#.#########.###.#.#.#.#.###.#####.#.###.#####.#####.#.#.#.#.###.#.#####.#.#.#.#.#.#.#.###.#
   -1    34 ###...#.........#.###...#...#.#.#.#.#.#.#.......#.#...#.......###.#.#.#.#.#...#...#.#.###.#.....#...#.#.#.#...#...#.......#...#.#...#.#.....#
   -1    35 #####.###########.###.#.#####.#.#.#.#.#.#######.#.###.#.#########.#.#.#.#.#.###.#.#.#.###.#.#####.#.#.#.#.#####.###############.#####.#######
   -1    36 #...#...........#.#...#.......#...#...#...#...#.#.#...#.#.....#...#.#.#.#.#.#...#.#.#...#.#.....#.#.#.#...#...#...#...........#.......#.....#
   -1    37 #.#.###########.#.#.#####################.#.#.#.#.#.###.#.###.#.###.#.#.#.#.#.###.#.###.#.#####.#.#.#.#####.#.###.#.#########.#########.###.#
   -1    38 #.#.............#...#.....#.............#...#.#.#.#...#.#.#...#.#...#.#...#.#.###.#.#...#...###.#.#...#.....#.#...#.#...#.....#...#...#.#...#
   -1    39 #.###################.###.#.###########.#####.#.#.###.#.#.#.###.#.###.#####.#.###.#.#.#####.###.#.#####.#####.#.###.#.#.#.#####.#.#.#.#.#.###
   -1    40 #.....................###...#...###...#...#...#.#.....#.#.#...#.#...#...#...#...#.#.#.....#...#.#.....#.....#...###.#.#...#.....#...#...#...#
   -1    41 #############################.#.###.#.###.#.###.#######.#.###.#.###.###.#.#####.#.#.#####.###.#.#####.#####.#######.#.#####.###############.#
   -1    42 #.............................#.....#.....#...#.......#.#.###...###...#.#.#.....#...###...#...#.#.....###...###...#.#.#...#...#.............#
   -1    43 #.###########################################.#######.#.#.###########.#.#.#.###########.###.###.#.#######.#####.#.#.#.#.#.###.#.#############
   -1    44 #.#...................#...#...#.....###...###.....#...#.#.....#.......#.#.#.#.....#.....#...###.#.#.......#...#.#.#.#...#...#.#.............#
   -1    45 #.#.#################.#.#.#.#.#.###.###.#.#######.#.###.#####.#.#######.#.#.#.###.#.#####.#####.#.#.#######.#.#.#.#.#######.#.#############.#
   -1    46 #...#...###...#.......#.#.#.#...###.....#.......#.#.###.......#...#...#.#.#.#...#...#...#.###...#.#.........#...#...#.......#.#...........#.#
   -1    47 #####.#.###.#.#.#######.#.#.###################.#.#.#############.#.#.#.#.#.###.#####.#.#.###.###.###################.#######.#.#########.#.#
   -1    48 #.....#.....#.#.........#...###...........#.....#...#.....#.....#.#.#.#.#...###...#...#.#...#.....###.........#.....#.#...###.#.#...#...#...#
   -1    49 #.###########.#################.#########.#.#########.###.#.###.#.#.#.#.#########.#.###.###.#########.#######.#.###.#.#.#.###.#.#.#.#.#.#####
   -1    50 #...#...#...#...#...#...###...#.........#.#.#...#...#...#.#.#...#.#.#...#...###...#...#...#.#...#...#.......#.#...#.#...#.....#...#...#.....#
   -1    51 ###.#.#.#.#.###.#.#.#.#.###.#.#########.#.#.#.#.#.#.###.#.#.#.###.#.#####.#.###.#####.###.#.#.#.#.#.#######.#.###.#.#######################.#
   -1    52 #...#.#...#...#.#.#...#...#.#...........#.#...#...#.....#...#.###.#.#.....#.....#...#.#...#.#.#...#.#.......#.....#...#.....#...#...#.......#
   -1    53 #.###.#######.#.#.#######.#.#############.###################.###.#.#.###########.#.#.#.###.#.#####.#.###############.#.###.#.#.#.#.#.#######
   -1    54 #.....#...###.#...#.....#.#.........#...#...........#...#...#...#.#.#.#.......#...#...#.....#.....#.#...........#...#.#.###.#.#.#.#...#...###
   -1    55 #######.#.###.#####.###.#.#########.#.#.###########.#.#.#.#.###.#.#.#.#.#####.#.#################.#.###########.#.#.#.#.###.#.#.#.#####.#.###
   -1    56 #.....#.#.#...#...#.###.#.#...#...#...#...........#.#.#.#.#.#...#.#.#.#.#.....#.#...###...#...#...#.........#...#.#.#.#...#...#...###...#...#
   -1    57 #.###.#.#.#.###.#.#.###.#.#.#.#.#.###############.#.#.#.#.#.#.###.#.#.#.#.#####.#.#.###.#.#.#.#.###########.#.###.#.#.###.###########.#####.#
   -1    58 #...#.#.#.#.....#...#...#...#...#.................#.#.#...#.#.###...#.#.#...#...#.#.....#...#...#...#.....#.#.....#.#...#.....###...#.#.....#
   -1    59 ###.#.#.#.###########.#############################.#.#####.#.#######.#.###.#.###.###############.#.#.###.#.#######.###.#####.###.#.#.#.#####
   -1    60 ###.#...#.#...#.....#.............................#.#...#...#.......#...###...###.........#...#...#.#...#.#.........###.....#.....#...#.....#
   -1    61 ###.#####.#.#.#.###.#############################.#.###.#.#########.#####################.#.#.#.###.###.#.#################.###############.#
   -1    62 #...#...#.#.#.#...#...............#.....#.........#.....#...#...#...###...................#.#...###.....#.....###.........#...#...#...#.....#
   -1    63 #.###.#.#.#.#.###.###############.#.###.#.#################.#.#.#.#####.###################.#################.###.#######.###.#.#.#.#.#.#####
   -1    64 #...#.#.#...#.....#.............#.#.###...#...###...#.....#.#.#...#.....#...#.....#...#...#.#.........###...#.....#.......###...#.#.#.#.....#
   -1    65 ###.#.#.###########.###########.#.#.#######.#.###.#.#.###.#.#.#####.#####.#.#.###.#.#.#.#.#.#.#######.###.#.#######.#############.#.#.#####.#
   -1    66 ###...#.............###...#.....#.#.........#...#.#.#.#...#.#.....#.....#.#.#.#...#.#...#.#.#.......#.....#.........#...........#...#.......#
   -1    67 #######################.#.#.#####.#############.#.#.#.#.###.#####.#####.#.#.#.#.###.#####.#.#######.#################.#########.#############
   -1    68 #.......................#...#...#.....#.......#...#...#...#.#.....#.....#.#...#.....###...#.#.......#.................#.........#...#.....###
   -1    69 #.###########################.#.#####.#.#####.###########.#.#.#####.#####.#############.###.#.#######.#################.#########.#.#.###.###
   -1    70 #...................#...#...#.#.#...#...#...#.....#.......#...#...#.......#...#.........#...#...#...#.#.......#...#.....#...#.....#.#...#...#
   -1    71 ###################.#.#.#.#.#.#.#.#.#####.#.#####.#.###########.#.#########.#.#.#########.#####.#.#.#.#.#####.#.#.#.#####.#.#.#####.###.###.#
   -1    72 #.....#...........#.#.#.#.#.#.#...#.......#.....#.#.........#...#.#.....#...#.#.....#.....#####.#.#...#.....#...#...###...#...#.....###.#...#
   -1    73 #.###.#.#########.#.#.#.#.#.#.#################.#.#########.#.###.#.###.#.###.#####.#.#########.#.#########.###########.#######.#######.#.###
   -1    74 #...#.#.........#...#.#...#...#.................#.....#...#.#...#.#...#.#...#.......#.#...###...#.#.........#...###.....#.......#.......#...#
   -1    75 ###.#.#########.#####.#########.#####################.#.#.#.###.#.###.#.###.#########.#.#.###.###.#.#########.#.###.#####.#######.#########.#
   -1    76 #...#.......###.......#.......#.......#.........#...#.#.#.#.....#...#.#...#.....#...#.#.#.....#...#...........#.....#.....###...#.#.......#.#
   -1    77 #.#########.###########.#####.#######.#.#######.#.#.#.#.#.#########.#.###.#####.#.#.#.#.#######.#####################.#######.#.#.#.#####.#.#
   -1    78 #.#...#...#.............#...#.........#.#.......#.#.#...#.#...#.....#.#...#.....#.#.#.#...#...#.#...........#...#...#.........#...#...###...#
   -1    79 #.#.#.#.#.###############.#.###########.#.#######.#.#####.#.#.#.#####.#.###.#####.#.#.###.#.#.#.#.#########.#.#.#.#.#################.#######
   -1    80 #.#.#...#...#...#.....#...#.............#.......#.#.....#.#.#.#.#.....#...#.......#...###...#...#.....#...#.#.#...#.#.....#.....#...#.......#
   -1    81 #.#.#######.#.#.#.###.#.#######################.#.#####.#.#.#.#.#.#######.###########################.#.#.#.#.#####.#.###.#.###.#.#.#######.#
   -1    82 #.#...#...#...#...###...#.......................#.#.....#.#.#...#.....#...###.....#...........#...###...#.#.#...#...#...#...###.#.#.......#.#
   -1    83 #.###.#.#.###############.#######################.#.#####.#.#########.#.#####.###.#.#########.#.#.#######.#.###.#.#####.#######.#.#######.#.#
   -1    84 #...#.#.#.............###...................#...#.#.#...#...#.....#...#...#...#...#.........#.#.#.#...#...#.....#...#...#...#...#.......#.#.#
   -1    85 ###.#.#.#############.#####################.#.#.#.#.#.#.#####.###.#.#####.#.###.###########.#.#.#.#.#.#.###########.#.###.#.#.#########.#.#.#
   -1    86 ###...#.............#.......................#.#...#...#...#...#...#.#.....#...#.....#.......#...#...#.#...........#.#.....#.#...#.......#.#.#
   -1    87 ###################.#########################.###########.#.###.###.#.#######.#####.#.###############.###########.#.#######.###.#.#######.#.#
   -1    88 #...#...#...........#...#...#.......#...#...#.#...........#...#...#.#...#...#.#.....#.....#.........#.............#.#.......###.#.......#.#.#
   -1    89 #.#.#.#.#.###########.#.#.#.#.#####.#.#.#.#.#.#.#############.###.#.###.#.#.#.#.#########.#.#######.###############.#.#########.#######.#.#.#
   -1    90 #.#...#...#.......#...#...#...#.....#.#.#.#.#.#.###....S#...#...#.#.#...#.#...#.#.....###...#...#...#.............#.#.........#.#...#...#...#
   -1    91 #.#########.#####.#.###########.#####.#.#.#.#.#.###.#####.#.###.#.#.#.###.#####.#.###.#######.#.#.###.###########.#.#########.#.#.#.#.#######
   -1    92 #...#...#...#.....#.###...#...#.......#...#...#...#.#####.#...#.#...#.###.#.....#.#...#...#...#.#.#...###.........#.......#...#.#.#.#.......#
   -1    93 ###.#.#.#.###.#####.###.#.#.#.###################.#.#####.###.#.#####.###.#.#####.#.###.#.#.###.#.#.#####.###############.#.###.#.#.#######.#
   -1    94 #...#.#.#.#...#...#.#...#...#.....................#.#####...#.#...#...#...#...#...#...#.#.#...#.#...#...#.....#.......###...###...#...#.....#
   -1    95 #.###.#.#.#.###.#.#.#.#############################.#######.#.###.#.###.#####.#.#####.#.#.###.#.#####.#.#####.#.#####.###############.#.#####
   -1    96 #.....#...#.....#...#.......................#.......#####...#...#.#...#.#.....#.#.....#.#.#...#.#...#.#.....#...#.....#...........###.#.....#
   -1    97 ###########################################.#.###########.#####.#.###.#.#.#####.#.#####.#.#.###.#.#.#.#####.#####.#####.#########.###.#####.#
   -1    98 #.........###...........#...................#.###########.....#.#.#...#.#...#...#...#...#.#...#.#.#.#.....#.......#...#.#.........#...#...#.#
   -1    99 #.#######.###.#########.#.###################.###############.#.#.#.###.###.#.#####.#.###.###.#.#.#.#####.#########.#.#.#.#########.###.#.#.#
   -1   100 #.......#.....#...#...#.#...............#...#.#####.....#...#.#.#.#.###.#...#.#.....#...#.#...#...#.#...#.........#.#...#.........#.#...#.#.#
   -1   101 #######.#######.#.#.#.#.###############.#.#.#.#####.###.#.#.#.#.#.#.###.#.###.#.#######.#.#.#######.#.#.#########.#.#############.#.#.###.#.#
   -1   102 ###...#.........#...#.#.#...............#.#...#####...#.#.#...#.#.#...#.#.#...#...#...#.#.#.#...#...#.#...........#.#...........#.#...###.#.#
   -1   103 ###.#.###############.#.#.###############.###########.#.#.#####.#.###.#.#.#.#####.#.#.#.#.#.#.#.#.###.#############.#.#########.#.#######.#.#
   -1   104 #...#...........#.....#...#...#.....#...#.....#######.#.#...#...#.#...#.#.#...#...#.#.#.#.#...#.#.###...............#.........#.#.......#...#
   -1   105 #.#############.#.#########.#.#.###.#.#.#####.#######.#.###.#.###.#.###.#.###.#.###.#.#.#.#####.#.###########################.#.#######.#####
   -1   106 #.#.....#.....#...#.....#...#...###...#...#...#######.#...#.#...#.#...#.#.#...#.#...#.#.#.#...#.#.#...#...#...#...#...#...#...#.#.....#.#...#
   -1   107 #.#.###.#.###.#####.###.#.###############.#.#########.###.#.###.#.###.#.#.#.###.#.###.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.###.#.###.#.#.#.#
   -1   108 #...###...###.......###...###...#...#.....#...#######...#.#.#...#.#...#.#.#...#.#.###...#.#.#.#.#.#.#...#.#.#...#.#.#...#...###...#...#...#.#
   -1   109 #############################.#.#.#.#.#######.#########.#.#.#.###.#.###.#.###.#.#.#######.#.#.#.#.#.#####.#.#####.#.###############.#######.#
   -1   110 #.......#...#.........#...#...#...#...#...#...#######...#.#.#...#.#...#.#.#...#.#...###...#.#.#.#.#.....#.#.....#.#...............#.....#...#
   -1   111 #.#####.#.#.#.#######.#.#.#.###########.#.#.#########.###.#.###.#.###.#.#.#.###.###.###.###.#.#.#.#####.#.#####.#.###############.#####.#.###
   -1   112 #.....#.#.#...#.....#.#.#...#...#.....#.#.#...#..E###...#.#.#...#.#...#.#...###...#...#...#.#.#.#.#...#.#.#...#.#.#...#...........#...#...###
   -1   113 #####.#.#.#####.###.#.#.#####.#.#.###.#.#.###.#.#######.#.#.#.###.#.###.#########.###.###.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.###########.#.#######
   -1   114 #.....#...#...#.#...#...#...#.#.#.#...#.#.#...#.#...#...#...#.....#...#.###.......#...###.#.#.#.#...#.#.#...#.#.#.#.#.#.............#.......#
   -1   115 #.#########.#.#.#.#######.#.#.#.#.#.###.#.#.###.#.#.#.###############.#.###.#######.#####.#.#.#.#####.#.#####.#.#.#.#.#####################.#
   -1   116 #.#.........#...#...#...#.#.#.#.#.#...#.#...###...#.#...........#.....#...#.....#...#.....#.#.#...###.#.....#.#.#.#.#...#...................#
   -1   117 #.#.###############.#.#.#.#.#.#.#.###.#.###########.###########.#.#######.#####.#.###.#####.#.###.###.#####.#.#.#.#.###.#.###################
   -1   118 #...#.......#.......#.#.#.#...#.#.#...#...#.....#...#.....#...#.#.#.....#...###.#.###...#...#...#...#.#...#.#.#.#...###.#.........#.........#
   -1   119 #####.#####.#.#######.#.#.#####.#.#.#####.#.###.#.###.###.#.#.#.#.#.###.###.###.#.#####.#.#####.###.#.#.#.#.#.#.#######.#########.#.#######.#
   -1   120 ###...#...#.#.........#.#...#...#.#.#...#.#...#.#.#...###...#.#.#.#.#...#...#...#.....#...#.....#...#...#.#.#.#.......#...#...#...#.#.......#
   -1   121 ###.###.#.#.###########.###.#.###.#.#.#.#.###.#.#.#.#########.#.#.#.#.###.###.#######.#####.#####.#######.#.#.#######.###.#.#.#.###.#.#######
   -1   122 #...#...#.#.............#...#...#.#.#.#...#...#...#.........#.#.#...#...#...#...#.....#.....#...#.#.....#.#.#.#...#...###.#.#...###.#.....###
   -1   123 #.###.###.###############.#####.#.#.#.#####.###############.#.#.#######.###.###.#.#####.#####.#.#.#.###.#.#.#.#.#.#.#####.#.#######.#####.###
   -1   124 #...#...#.#.............#.#.....#.#.#.#.....#...#.....#.....#.#...#####...#.#...#.#.....#...#.#.#...#...#.#.#.#.#.#.#...#.#.........#...#...#
   -1   125 ###.###.#.#.###########.#.#.#####.#.#.#.#####.#.#.###.#.#####.###.#######.#.#.###.#.#####.#.#.#.#####.###.#.#.#.#.#.#.#.#.###########.#.###.#
   -1   126 #...#...#...###.........#.#.#...#.#.#.#...#...#.#...#.#.....#...#...#.....#.#.....#.#.....#.#.#...#...###...#.#.#.#...#.#...#.........#...#.#
   -1   127 #.###.#########.#########.#.#.#.#.#.#.###.#.###.###.#.#####.###.###.#.#####.#######.#.#####.#.###.#.#########.#.#.#####.###.#.###########.#.#
   -1   128 #.#...###.......#.....#...#.#.#.#.#.#.#...#...#.#...#.#.....#...#...#...#...###.....#.#.....#...#.#.........#.#.#.#...#.#...#.......#...#...#
   -1   129 #.#.#####.#######.###.#.###.#.#.#.#.#.#.#####.#.#.###.#.#####.###.#####.#.#####.#####.#.#######.#.#########.#.#.#.#.#.#.#.#########.#.#.#####
   -1   130 #...#...#.....#...#...#.###.#.#...#...#...#...#.#...#.#.....#...#.###...#.#.....#...#.#.#...#...#.#.........#.#.#.#.#.#.#.#...#...#...#.....#
   -1   131 #####.#.#####.#.###.###.###.#.###########.#.###.###.#.#####.###.#.###.###.#.#####.#.#.#.#.#.#.###.#.#########.#.#.#.#.#.#.#.#.#.#.#########.#
   -1   132 ###...#.......#...#...#.#...#...#...#...#.#.###.#...#.....#...#.#...#...#.#.....#.#.#.#...#.#.#...#.........#...#.#.#...#...#.#.#.......#...#
   -1   133 ###.#############.###.#.#.#####.#.#.#.#.#.#.###.#.#######.###.#.###.###.#.#####.#.#.#.#####.#.#.###########.#####.#.#########.#.#######.#.###
   -1   134 #...#.....#...#...#...#.#...#...#.#...#...#...#.#.###...#.....#.#...#...#.#.....#.#.#...###...#.#...#.....#.....#.#...#...###.#.......#.#...#
   -1   135 #.###.###.#.#.#.###.###.###.#.###.###########.#.#.###.#.#######.#.###.###.#.#####.#.###.#######.#.#.#.###.#####.#.###.#.#.###.#######.#.###.#
   -1   136 #...#.###...#.#...#...#.###.#.###.........#...#.#.....#.....###.#.###.....#...#...#...#.#.......#.#.#...#.#.....#.#...#.#...#...#.....#.....#
   -1   137 ###.#.#######.###.###.#.###.#.###########.#.###.###########.###.#.###########.#.#####.#.#.#######.#.###.#.#.#####.#.###.###.###.#.###########
   -1   138 #...#.#.......#...#...#.#...#...#.........#...#.#.....#...#...#.#.......#.....#.#.....#.#...#...#.#.#...#.#...#...#.....#...#...#...........#
   -1   139 #.###.#.#######.###.###.#.#####.#.###########.#.#.###.#.#.###.#.#######.#.#####.#.#####.###.#.#.#.#.#.###.###.#.#########.###.#############.#
   -1   140 #.....#.........###.....#.......#.............#...###...#.....#.........#.......#.......###...#...#...###.....#...........###...............#
   -1   141 #############################################################################################################################################

diff --git a/2024/20/solution.rs b/2024/20/solution.rs

@@ -0,0 +1,82 @@
   -1     1 #[path = "../lib.rs"]
   -1     2 mod lib;
   -1     3 
   -1     4 fn parse_input() -> Vec<(usize, usize)> {
   -1     5     let mut start = (0, 0);
   -1     6     let mut map = vec![];
   -1     7     for (y, line) in lib::iter_input().enumerate() {
   -1     8         let mut row = vec![];
   -1     9         for (x, c) in line.bytes().enumerate() {
   -1    10             row.push(match c {
   -1    11                 b'#' => false,
   -1    12                 b'.' => true,
   -1    13                 b'S' => {
   -1    14                     start = (x, y);
   -1    15                     true
   -1    16                 },
   -1    17                 b'E' => true,
   -1    18                 _ => unreachable!(),
   -1    19             });
   -1    20         }
   -1    21         map.push(row);
   -1    22     }
   -1    23 
   -1    24     let mut path = vec![];
   -1    25     let (mut x, mut y) = start;
   -1    26     loop {
   -1    27         path.push((x, y));
   -1    28         map[y][x] = false;
   -1    29         if map[y - 1][x] {
   -1    30             y -= 1;
   -1    31         } else if map[y + 1][x] {
   -1    32             y += 1;
   -1    33         } else if map[y][x - 1] {
   -1    34             x -= 1;
   -1    35         } else if map[y][x + 1] {
   -1    36             x += 1;
   -1    37         } else {
   -1    38             break;
   -1    39         }
   -1    40     }
   -1    41 
   -1    42     return path;
   -1    43 }
   -1    44 
   -1    45 fn main() {
   -1    46     let path = parse_input();
   -1    47     let mut count1 = 0;
   -1    48     let mut count2 = 0;
   -1    49 
   -1    50     for t1 in 0..path.len() {
   -1    51         let (x1, y1) = path[t1];
   -1    52 
   -1    53         for t2 in (t1 + 102)..(t1 + 121).min(path.len()) {
   -1    54             let (x2, y2) = path[t2];
   -1    55             let d = x1.abs_diff(x2) + y1.abs_diff(y2);
   -1    56             if t2 >= t1 + d + 100 {
   -1    57                 if d <= 2 {
   -1    58                     count1 += 1;
   -1    59                 }
   -1    60                 if d <= 20 {
   -1    61                     count2 += 1;
   -1    62                 }
   -1    63             }
   -1    64         }
   -1    65 
   -1    66         // perf: check t2 >= t1 + d + 100 if we already know it is true
   -1    67         // saves ~33%
   -1    68         for t2 in (t1 + 121)..path.len() {
   -1    69             let (x2, y2) = path[t2];
   -1    70             let d = x1.abs_diff(x2) + y1.abs_diff(y2);
   -1    71             if d <= 2 {
   -1    72                 count1 += 1;
   -1    73             }
   -1    74             if d <= 20 {
   -1    75                 count2 += 1;
   -1    76             }
   -1    77         }
   -1    78     }
   -1    79 
   -1    80     println!("part1: {}", count1);
   -1    81     println!("part2: {}", count2);
   -1    82 }

diff --git a/2024/20/test.txt b/2024/20/test.txt

@@ -0,0 +1,15 @@
   -1     1 ###############
   -1     2 #...#...#.....#
   -1     3 #.#.#.#.#.###.#
   -1     4 #S#...#.#.#...#
   -1     5 #######.#.#.###
   -1     6 #######.#.#...#
   -1     7 #######.#.###.#
   -1     8 ###..E#...#...#
   -1     9 ###.#######.###
   -1    10 #...###...#...#
   -1    11 #.#####.#.###.#
   -1    12 #.#...#.#.#...#
   -1    13 #.#.#.#.#.#.###
   -1    14 #...#...#...###
   -1    15 ###############