Contents:
main()
part1()
part2()
Maze
Maze.copy()
Maze.get_cell_branches()
Maze.grid
Maze.is_oob()
Maze.num_cols
Maze.num_rows
Path
Path.add()
Path.can_add()
Path.copy()
Path.flip()
Path.last()
Path.nodes
Path.overlay()
Path.route
Position
Position.col
Position.copy_modify()
Position.expand()
Position.row
Solver1
Solver1.expand_hill()
Solver1.expand_path()
Solver1.handle_hills
Solver1.maze
Solver1.solve()
generate_paths()
Edge
Edge.flip()
Edge.length
Edge.node1
Edge.node2
Edge.path
Node
Node.edges
Node.name
Node.position
Solver2
Solver2.build_nodes()
Solver2.calculate_edges()
Solver2.expand_path()
Solver2.get_nodes()
Solver2.input_maze
Solver2.solve()
solve2()
solve2_helper()
get_maze()
test_generate_paths()
test_maze()
test_path()
test_position()
test_solver1()
test_solver2()
test_part1()
test_part2()
test_solver()
test_get_maze()
Day23 solution.
Read data then solve part1/part2.
Solve part1 (maximal distance given one-ways).
Solve part2 (maximal distance, no one-ways).