- commit
- 3853c442c3a187d57ae07d48d3c1130454d35111
- parent
- 511459df2a9ea55e2a3831d06c784046a4efab55
- Author
- Tobias Bengfort <tobias.bengfort@posteo.de>
- Date
- 2023-12-25 22:05
2023-12-23
Diffstat
A | 2023/23/input.txt | 141 | ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
A | 2023/23/solution.rs | 126 | ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
A | 2023/23/test.txt | 23 | +++++++++++++++++++++++ |
3 files changed, 290 insertions, 0 deletions
diff --git a/2023/23/input.txt b/2023/23/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 #.#.#v###.###.#####.#########.#.#.#####.###.#.#######.#.#.#######.#.#.#.#.#.#.#v#.###.#.#.#.#.#.#########.#.###.#.#.#.#####.#########.#.#.### -1 14 #...#.>.#...#.#...#.......#...#.#.#...#.#...#.....#...#.#.###...#.#...#...#.#.#.#...#.#.#.#.#.#.#.....#...#.>.>.#.#.#.#...#...#####...#...### -1 15 #####v#.###.#.#.#.#######.#.###.#.#.#.#.#.#######.#.###.#.###.#.#.#########.#.#.###.#.#.#.#.#.#.#.###.#.#####v###.#.#.#.#.###.#####.######### -1 16 #.....#...#.#.#.#.#...#...#...#.#.#.#...#...#...#.#...#.#.#...#.#.........#.#.#...#...#.#.#...#.#.#...#...#...#...#.#.#.#...#.#.....#...#...# -1 17 #.#######.#.#.#.#.#.#.#.#####.#.#.#.#######.#.#.#.###.#.#.#.###.#########.#.#.###.#####.#.#####.#.#.#####.#.###.###.#.#.###.#.#.#####.#.#.#.# -1 18 #.......#.#.#.#.#.#.#.#.#.....#.#.#...#.....#.#.#...#.#.#.#.#...###.....#.#.#.#...#...#...#...#.#.#.#...#.#...#.....#.#...#.#.#.#.....#...#.# -1 19 #######.#.#.#.#.#.#.#.#.#.#####.#.###.#.#####.#.###.#.#.#.#.#.#####.###.#.#.#.#.###.#.#####.#.#.#.#.#.#.#.###.#######.###.#.#.#.#.#########.# -1 20 #.......#...#.#.#.#.#.#.#...#...#.>.>.#.#...#.#.#...#.#.#...#.>.>.#.#...#.#.#.#...#.#.......#.#...#...#.#.#...#...###...#.#...#...#.....#...# -1 21 #.###########.#.#.#.#.#.###.#.#####v###.#.#.#.#.#.###.#.#######v#.#.#.###.#.#.###.#.#########.#########.#.#.###.#.#####.#.#########.###.#.### -1 22 #.....#.....#.#.#.#.#...###...#.....###...#.#.#.#...#.#.#.......#...#.#...#.#.#...#.#.........###.....#...#.....#.....#.#.#.........###...### -1 23 #####.#.###.#.#.#.#.###########.###########.#.#.###.#.#.#.###########.#.###.#.#.###.#.###########.###.###############.#.#.#.################# -1 24 #.....#.#...#...#...#.........#...........#...#.#...#...#.........###...###...#...#.#.......#...#.#...#.........#.....#...#.................# -1 25 #.#####.#.###########.#######.###########.#####.#.###############.###############.#.#######.#.#.#.#.###.#######.#.#########################.# -1 26 #.......#.....#.....#.....#...#...........#...#...#.............#.........###...#...#...#...#.#.#.#...#.......#...#...#...#.......#.......#.# -1 27 #############.#.###.#####.#.###.###########.#.#####.###########.#########.###.#.#####.#.#.###.#.#.###.#######.#####.#.#.#.#.#####.#.#####.#.# -1 28 ###...........#.#...#...#.#.###.........###.#...###.....#.....#.#.........#...#.#.....#...#...#.#...#.#...#...#...#.#...#.#.....#...#...#...# -1 29 ###.###########.#.###.#.#.#.###########v###.###.#######.#.###.#.#.#########.###.#.#########.###.###.#.#.#.#v###.#.#.#####.#####.#####.#.##### -1 30 #...#.........#.#.....#.#.#...#.....#.>.>...#...#...###...#...#...#...#...#...#.#.....#...#...#...#.#.#.#.>.>...#...#.....#####.#.....#.....# -1 31 #.###.#######.#.#######.#.###.#.###.#.#v#####.###.#.#######.#######.#.#.#.###.#.#####.#.#.###.###.#.#.#.###v#########.#########.#.#########.# -1 32 #...#.#.......#.....#...#...#.#...#.#.#...#...###.#.###...#...#.....#...#...#.#.....#.#.#...#.#...#.#.#.#...#.........###...#...#.#.........# -1 33 ###.#.#.###########.#.#####.#.###.#.#.###.#.#####.#.###.#.###.#.###########.#.#####.#.#.###.#.#.###.#.#.#.###.###########.#.#.###.#.######### -1 34 #...#.#.#...#...#...#...#...#.#...#...#...#.....#.#...#.#.#...#.........#...#...#...#.#...#.#.#...#.#.#.#.###.#.........#.#.#.....#.......### -1 35 #.###.#.#.#v#.#.#.#####.#.###.#.#######.#######.#.###.#.#.#.###########.#.#####.#.###v###.#.#.###.#.#.#.#.###.#.#######.#.#.#############.### -1 36 #.#...#...#.>.#...###...#...#.#...#...#.......#.#...#...#.#.#...#...#...#...#...#.#.>.>...#...#...#.#...#...#.#.#.......#.#.#...###.....#...# -1 37 #.#.#######v#########.#####.#.###.#.#.#######.#.###.#####.#v#.#.#.#.#.#####.#.###.#.#v#########.###.#######.#.#.#.#######.#.#.#.###v###.###.# -1 38 #.#...#.....#.......#...#...#.#...#.#.........#.#...#...#.>.>.#.#.#.#...#...#.#...#.#.###...###...#...#.....#.#.#...#...#.#...#...>.###.#...# -1 39 #.###.#.#####.#####.###.#.###.#.###.###########.#.###.#.###v###.#.#.###.#.###.#.###.#.###.#.#####.###.#.#####.#.###.#.#.#.#########v###.#.### -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 #.###.#.#############.#.###.#################.#.#.#.#.#####.###.#####.###.###.#.#####v#######################.#.###.#######################.# -1 54 #.....#.............#.#...#.#.......#.........#...#.#...#...#...#...#...#.#...#...#.>.>.#...#...###...###.....#...#.###...#.....#...#.....#.# -1 55 ###################.#.###.#.#.#####.#.#############.###.#.###.###.#.###.#.#.#####.#.#v#.#.#.#.#.###.#.###v#######.#.###.#.#v###.#.#.#.###.#.# -1 56 ###...#.............#.....#...#...#...#...........#.###...#...###.#...#.#...#.....#.#.#...#.#.#.#...#...>.>.#...#.#.#...#.>.#...#.#...###...# -1 57 ###.#.#.#######################.#.#####.#########.#.#######.#####.###.#.#####.#####.#.#####.#.#.#.#######v#.#.#.#.#.#.#####v#.###.########### -1 58 #...#...#...#.....#...#...#...#.#.#.....#...#...#...#.......#...#...#.#.....#.......#...#...#.#.#...#.....#...#...#.#.#.....#.....###...#...# -1 59 #.#######.#.#.###.#.#.#.#.#.#.#.#.#.#####.#.#.#.#####.#######.#.###.#.#####.###########.#.###.#.###.#.#############.#.#.#############.#.#.#.# -1 60 #.......#.#...#...#.#...#...#...#.#.......#...#...###.....#...#.....#...#...#.....#.....#...#.#...#.#.#.....#...###.#.#...............#...#.# -1 61 #######.#.#####v###.#############.###############.#######.#.###########.#.###.###.#.#######.#.###.#.#.#.###.#.#.###.#.#####################.# -1 62 #.....#...#...#.>.#.#.............#.....###.......#...#...#.........###.#.###...#.#.......#...###.#.#...###...#...#.#.#.....................# -1 63 #.###.#####.#.#v#.#.#.#############.###.###.#######.#.#.###########.###.#.#####.#.#######.#######.#.#############.#.#.#.##################### -1 64 #...#.#.....#...#.#.#...#.....#...#...#.#...###...#.#.#.#...###...#...#...#####.#.........#.....#...###...#.......#.#.#.....###...#...#...### -1 65 ###.#.#.#########.#.###.#.###.#.#.###.#.#.#####.#.#.#.#v#.#.###.#.###.#########.###########.###.#######.#.#.#######.#.#####.###.#.#.#.#.#.### -1 66 #...#...#.......#.#.#...#...#.#.#.###.#.#...###.#...#.>.>.#.....#.#...#...#.....#.........#...#.#.......#...###...#...#...#.....#...#...#...# -1 67 #.#######.#####.#.#.#.#####.#.#.#.###.#.###v###.#######v#########.#.###.#.#.#####.#######.###.#.#.#############.#.#####.#.#################.# -1 68 #.....#...#...#.#.#.#...#...#.#.#.#...#...>.>.#.#.......#####...#...###.#.#.......#.......#...#.#...#...........#...#...#...................# -1 69 #####.#.###.#.#.#.#.###.#.###.#.#.#.#######v#.#.#.###########.#.#######.#.#########.#######.###.###.#.#############.#.####################### -1 70 #...#...#...#...#.#.#...#...#.#.#...#.......#.#.#.........#...#.......#.#...........###...#...#.###...#.......#.....#.......................# -1 71 #.#.#####.#######.#.#.#####.#.#.#####.#######.#.#########.#.#########.#.###############.#.###.#.#######.#####.#.###########################.# -1 72 #.#.#.....#.....#...#.#.....#...#...#.....###...#...#...#.#...#.......#.#...#.........#.#...#.#.......#.....#.#.###...#...#.................# -1 73 #.#.#.#####.###.#####.#.#########.#.#####.#######.#.#.#.#.###.#.#######.#.#.#.#######.#.###.#.#######.#####.#.#.###.#.#.#.#.################# -1 74 #.#...#.....###.....#...###...#...#.#...#...#.....#.#.#.#...#.#.###...#.#.#.#.#.......#...#.#...#.....#...#.#...#...#.#.#.#...........#...### -1 75 #.#####.###########.#######.#.#.###.#.#.###.#.#####.#.#.###.#.#.###.#.#.#.#.#.#.#########.#.###.#.#####.#.#v#####.###.#.#.###########.#.#.### -1 76 #.......#...........###...#.#.#...#.#.#.#...#.....#.#.#.###...#...#.#.#...#...#...#.......#...#.#...#...#.>.>...#...#.#.#.#...#.....#...#...# -1 77 #########.#############.#.#.#.###.#.#.#.#.#######.#.#.#.#########v#.#.###########.#.#########.#.###.#.#####v###.###.#.#.#.#v#.#.###.#######.# -1 78 #####...#.........#.....#.#.#.#...#...#...#.......#.#.#...#...#.>.>.#.#...#...#...#...#.....#.#...#.#.....#...#...#.#...#.>.#...###.........# -1 79 #####.#.#########.#.#####.#.#.#.###########.#######.#.###.#.#.#.#v###.#.#.#.#.#.#####.#.###.#.###.#.#####.###.###.#.#######v################# -1 80 ###...#...........#.....#.#.#.#...#...#...#.......#.#.###...#...#...#.#.#.#.#.#...###...#...#...#.#.#.....###...#.#...#.....#...###...###...# -1 81 ###.###################.#.#.#.###.#.#.#.#.#######.#.#.#############.#.#.#.#.#.###.#######.#####.#.#.#.#########.#.###.#.#####.#.###.#.###.#.# -1 82 #...#...#...#...###.....#.#.#.....#.#.#.#.#.......#...#.............#...#...#.#...#...#...###...#.#.#.#.........#.....#.......#.....#.....#.# -1 83 #.###.#.#.#.#.#v###.#####.#.#######.#.#.#.#.###########.#####################.#.###.#.#.#####.###.#.#.#.###################################.# -1 84 #.....#...#...#.>.#.....#.#...#.....#...#.#.###.......#...#.............#.....#.###.#...#...#...#.#.#.#.#.............###.................#.# -1 85 ###############v#.#####.#.###.#.#########.#.###.#####.###.#.###########.#.#####v###.#####.#.###.#.#.#.#.#.###########.###.###############.#.# -1 86 #.......#...#...#...###.#.###.#.......#...#.....#...#.#...#.#...........#.....>.>.#.......#...#.#.#.#.#.#.#...........#...#.............#...# -1 87 #.#####.#.#.#.#####.###.#.###v#######.#.#########.#.#.#.###.#.#################v#.###########.#.#.#.#.#.#.#.###########.###.###########.##### -1 88 #.....#.#.#...#####...#.#...>.>.......#.....#.....#.#.#.....#.........#.........#.............#.#.#.#.#...#.....#######.....#...........#...# -1 89 #####.#.#.###########.#.#####v#############.#.#####.#.###############.#.#######################.#.#.#.#########.#############.###########.#.# -1 90 #.....#...#...###.....#.....#...#...#####...#...###...#...............#...#...#...###...###...#...#...#.....###.......#.......###...#...#.#.# -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 #.#############.#.#.#.#.#.#############.#.#.#.#.#.#.#####.#####.###########.#####.#.#.#####.#.#######.#.#.###.###.#.#.#.#.###v###.#.###.#.### -1 104 #.#...#...#...#...#.#.#.#.###...#.....#.#.#...#.#.#.#...#...#...#...........#...#...#.#...#.#.....###...#...#.....#.#.#...#.>.###.#.#...#...# -1 105 #.#.#.#.#.#.#v#####.#.#.#.###.#.#.###.#.#.#####.#.#.#.#.###.#.###.###########.#.#####.#.#.#.#####.#########.#######.#.#####.#v###.#.#.#####.# -1 106 #...#...#...#.>.###.#.#.#.###.#.#...#...#.....#.#.#.#.#.....#...#.......#...#.#.......#.#.#.#.....#...#####.....#...#.#...#.#...#.#.#.#.....# -1 107 #############v#.###.#.#.#.###.#.###v#########.#.#.#.#.#########.#######.#.#.#.#########.#.#.#.#####.#.#########.#.###.#.#.#.###.#.#.#.#.##### -1 108 #.............#...#.#.#.#...#.#.#.>.>.#...###.#.#.#.#.......#...###.....#.#.#.....#...#.#.#.#.....#.#...#...#...#.###.#.#.#.#...#.#.#.#.#...# -1 109 #.###############.#.#.#.###.#.#.#.#v#.#.#.###.#.#.#.#######.#.#####v#####.#.#####v#.#.#.#.#.#####.#.###.#.#.#.###.###.#.#.#.#.###.#.#.#.#.#.# -1 110 #...#...#.......#.#.#.#...#...#.#.#.#...#.#...#.#.#...#...#.#...#.>.>.....#.#...>.>.#.#.#.#.#.....#.#...#.#.#...#...#.#.#.#.#.#...#...#...#.# -1 111 ###.#.#.#.#####.#.#.#.###.#####.#.#.#####.#.###.#.###.#.#.#.###.#.#v#######.#.###v###.#.#.#.#.#####.#.###.#.###v###.#.#.#.#.#.#.###########.# -1 112 #...#.#.#.#.....#...#.#...#.....#.#...###.#...#.#.#...#.#.#.###.#.#.###...#...#...###...#...#.#...#.#.#...#.#.>.>.#.#.#.#...#...###.....#...# -1 113 #.###.#.#.#.#########.#.###.#####.###.###.###.#.#.#.###.#.#.###.#.#.###.#.#####.#############.#.#.#.#.#.###.#.#v#.#.#.#.###########.###.#.### -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 #####.#.#.#########.###.###.#.###.#.#.#.#.###.#.###.#.#.#.#.#.###v#.#.#.#.#.###.#.#.#.#######.#.#####################.#.#.#####.#.#########.# -1 130 ###...#...#...#...#.###...#.#.###.#.#.#.#...#.#.#...#.#.#.#.#.#.>.>.#.#.#.#.#...#.#.#.....###...###...#...............#.#.#...#.#.......#...# -1 131 ###.#######.#.#.#.#.#####.#.#.###.#.#.#.###.#.#.#.###.#.#.#.#.#.#####.#.#.#.#.###.#.#####.#########.#.#.###############.#.#.#.#.#######.#.### -1 132 #...#.....#.#...#.#...###...#...#.#.#...###...#.#...#.#.#.#.#.#.#####.#.#...#.#...#.....#...#.....#.#.#.......###...###.#.#.#.#.....###...### -1 133 #.###.###.#.#####.###.#########.#.#.###########.###.#.#.#.#.#.#.#####.#.#####.#.#######.###.#.###.#.#.#######.###.#.###.#.#.#.#####v######### -1 134 #...#.#...#...#...#...#...#.....#.#.....#...#...#...#.#.#...#.#.#.....#.#.....#.#.......#...#.#...#.#.#...#...#...#...#.#...#.#...>.#...#...# -1 135 ###.#.#.#####.#.###.###.#.#.#####.#####.#.#.#.###.###.#.#####.#.#.#####.#.#####.#.#######v###.#.###.#.#.#.#v###.#####.#.#####.#.###v#.#.#.#.# -1 136 #...#.#...#...#...#.#...#...#...#.#...#...#.#...#...#.#.#...#...#.....#.#...#...#.#...#.>.>.#.#...#.#.#.#.>.>.#.###...#.###...#...#.#.#...#.# -1 137 #.###.###.#.#####.#.#.#######.#.#v#.#.#####.###.###.#.#.#.#.#########.#.###.#.###.#.#.#.###.#.###.#.#.#.#####.#.###.###.###.#####.#.#.#####.# -1 138 #...#.#...#.#.....#.#...#...#.#.>.>.#.#...#.#...#...#.#...#.....#.....#.#...#.###.#.#.#...#.#.#...#.#.#...#...#.#...#...#...#...#.#.#...#...# -1 139 ###.#.#.###.#.#####.###.#.#.#.#######.#.#.#.#.###.###.#########.#.#####.#.###.###.#.#.###.#.#.#.###.#.###.#.###.#.###.###.###.#.#.#.###.#.### -1 140 ###...#.....#.......###...#...#######...#...#.....###...........#.......#.....###...#.....#...#.....#.....#.....#.....###.....#...#.....#...# -1 141 ###########################################################################################################################################.#
diff --git a/2023/23/solution.rs b/2023/23/solution.rs
@@ -0,0 +1,126 @@ -1 1 use std::collections::HashMap; -1 2 -1 3 #[path = "../lib.rs"] -1 4 mod lib; -1 5 -1 6 fn parse_input() -> Vec<Vec<u8>> { -1 7 return lib::iter_input().map(|line| { -1 8 return line.bytes().collect(); -1 9 }).collect(); -1 10 } -1 11 -1 12 fn get_neighbors(map: &Vec<Vec<u8>>, x0: usize, y0: usize, sloped: bool) -> Vec<(usize, usize, usize)> { -1 13 let mut result = vec![]; -1 14 let mut queue = vec![]; -1 15 queue.push((x0, y0, x0, y0, 0)); -1 16 -1 17 while let Some((px, py, x, y, steps)) = queue.pop() { -1 18 if y == 0 { -1 19 if steps == 0 { -1 20 queue.push((x, y, x, 1, 1)); -1 21 } -1 22 } else if y == map.len() - 1 { -1 23 result.push((x, y, steps)); -1 24 } else { -1 25 let mut neighbors = vec![]; -1 26 for (nx, ny, b) in [ -1 27 (x + 1, y, b'>'), -1 28 (x - 1, y, b'<'), -1 29 (x, y + 1, b'v'), -1 30 (x, y - 1, b'^'), -1 31 ] { -1 32 if (nx, ny) != (px, py) -1 33 && (!sloped || map[y][x] == b'.' || map[y][x] == b) -1 34 && map[ny][nx] != b'#' -1 35 { -1 36 neighbors.push((nx, ny)); -1 37 } -1 38 } -1 39 if (x, y) == (x0, y0) || neighbors.len() == 1 { -1 40 for (nx, ny) in neighbors { -1 41 queue.push((x, y, nx, ny, steps + 1)); -1 42 } -1 43 } else if neighbors.len() > 0 { -1 44 result.push((x, y, steps)); -1 45 } -1 46 } -1 47 } -1 48 return result; -1 49 } -1 50 -1 51 fn map2vec(map: &HashMap<(usize, usize), Vec<(usize, usize, usize)>>) -> Vec<Vec<(usize, usize)>> { -1 52 let mut result: Vec<Vec<(usize, usize)>> = vec![]; -1 53 let mut indices = HashMap::new(); -1 54 -1 55 let mut keys: Vec<&(usize, usize)> = map.keys().collect(); -1 56 keys.sort_by_key(|(x, y)| (y, x)); -1 57 -1 58 for (x, y) in keys.iter() { -1 59 indices.insert((x, y), result.len()); -1 60 result.push(vec![]); -1 61 } -1 62 -1 63 for ((x, y), n) in map.iter() { -1 64 let i = indices.get(&(x, y)).unwrap(); -1 65 for (nx, ny, steps) in n { -1 66 let j = indices.get(&(nx, ny)).unwrap(); -1 67 result[*i].push((*j, *steps)); -1 68 } -1 69 } -1 70 -1 71 return result; -1 72 } -1 73 -1 74 fn get_graph(map: &Vec<Vec<u8>>, sloped: bool) -> Vec<Vec<(usize, usize)>> { -1 75 let mut queue = vec![]; -1 76 let mut graph = HashMap::new(); -1 77 -1 78 let y0 = 0; -1 79 let x0 = map[y0].iter().position(|b| *b != b'#').unwrap(); -1 80 queue.push((x0, y0)); -1 81 -1 82 while let Some((x, y)) = queue.pop() { -1 83 if graph.contains_key(&(x, y)) { -1 84 continue; -1 85 } -1 86 -1 87 let n = get_neighbors(map, x, y, sloped); -1 88 for (nx, ny, _steps) in n.iter() { -1 89 queue.push((*nx, *ny)); -1 90 } -1 91 graph.insert((x, y), n); -1 92 } -1 93 -1 94 return map2vec(&graph); -1 95 } -1 96 -1 97 fn get_longest_path(graph: &Vec<Vec<(usize, usize)>>) -> usize { -1 98 assert!(graph.len() < 64); -1 99 -1 100 let mut queue = vec![]; -1 101 queue.push((0, 1u64, 0)); -1 102 -1 103 let mut result = 0; -1 104 -1 105 while let Some((i, history, steps)) = queue.pop() { -1 106 if i == graph.len() - 1 { -1 107 result = result.max(steps); -1 108 } else { -1 109 for (j, s) in graph[i].iter() { -1 110 let h = history | (1 << *j); -1 111 if h != history { -1 112 queue.push((*j, h, steps + *s)); -1 113 } -1 114 } -1 115 } -1 116 } -1 117 -1 118 return result; -1 119 } -1 120 -1 121 fn main() { -1 122 let map = parse_input(); -1 123 -1 124 println!("part1: {}", get_longest_path(&get_graph(&map, true))); -1 125 println!("part2: {}", get_longest_path(&get_graph(&map, false))); -1 126 }
diff --git a/2023/23/test.txt b/2023/23/test.txt
@@ -0,0 +1,23 @@ -1 1 #.##################### -1 2 #.......#########...### -1 3 #######.#########.#.### -1 4 ###.....#.>.>.###.#.### -1 5 ###v#####.#v#.###.#.### -1 6 ###.>...#.#.#.....#...# -1 7 ###v###.#.#.#########.# -1 8 ###...#.#.#.......#...# -1 9 #####.#.#.#######.#.### -1 10 #.....#.#.#.......#...# -1 11 #.#####.#.#.#########v# -1 12 #.#...#...#...###...>.# -1 13 #.#.#v#######v###.###v# -1 14 #...#.>.#...>.>.#.###.# -1 15 #####v#.#.###v#.#.###.# -1 16 #.....#...#...#.#.#...# -1 17 #.#########.###.#.#.### -1 18 #...###...#...#...#.### -1 19 ###.###.#.###v#####v### -1 20 #...#...#.#.>.>.#.>.### -1 21 #.###.###.#.###.#.#v### -1 22 #.....###...###...#...# -1 23 #####################.#