import sys from importlib import import_module from time import time from advent.errors import InvalidSessionIDError, PuzzleNotFoundError from advent.functions import get_puzzle_input def usage(): print("Usage: python solve.py ") def main(): if len(sys.argv) != 2: usage() sys.exit(1) try: day = int(sys.argv[1]) except ValueError: print("Day must be an integer") usage() sys.exit(1) try: print(f"Loading 2024, day {day} solver") mod = import_module(f"puzzles.{day}") except ModuleNotFoundError: print(f"Solver for day {day} not found") sys.exit(1) try: print("Testing part 1 solution...") test_input_p1 = getattr(mod, "test_input_p1", getattr(mod, "test_input", None)) start = time() assert mod.solve_p1(test_input_p1) == mod.test_solution_p1 print(f"Test passed in {time() - start:.3f} seconds") print("Testing part 2 solution...") test_input_p2 = getattr(mod, "test_input_p2", getattr(mod, "test_input", None)) start = time() assert mod.solve_p2(test_input_p2) == mod.test_solution_p2 print(f"Test passed in {time() - start:.3f} seconds") except AssertionError: print("Test failed") sys.exit(1) except Exception as exc: print("Error:", exc) sys.exit(1) try: print("Fetching puzzle input...") puzzle_input = get_puzzle_input(2024, int(day)) except (PuzzleNotFoundError, InvalidSessionIDError) as exc: print(exc) sys.exit(1) try: print("Solving part 1...") start = time() solution_p1 = mod.solve_p1(puzzle_input) print(f"Part 1 solution: {solution_p1} ({time() - start:.3f} seconds)") print("Solving part 2...") solution_p2 = mod.solve_p2(puzzle_input) print(f"Part 2 solution: {solution_p2} ({time() - start:.3f} seconds)") except NotImplementedError: print("Puzzle solver is incomplete. Exiting") sys.exit(1) except Exception as exc: print("Error:", exc) sys.exit(1) if __name__ == "__main__": main()