import argparse import importlib import pathlib import pytest import util.reader as reader FIRST_EVENT = 2015 LAST_EVENT = 2015 def main(day: int, event: int, part: int, output_format: str, test: bool = False) -> str: if test: pytest_args = [f"tests/{event}/test_day{day}.py"] exit_code = pytest.main(pytest_args) return f"Pytest exited with code {exit_code}" else: solution = importlib.import_module(f"solution.ev{event}") data_path = pathlib.Path(f"input/{event}/Day{day}") data = reader.parse_datafile(data_file=data_path, output_format=output_format) func_name = f"{day}" if func_name in solution.function_map: return solution.function_map[func_name](data=data, part=part) else: return f"Function {func_name} not found" if __name__ == "__main__": parser = argparse.ArgumentParser( description='Advent of Code Event 2015 Python solutions' ) parser.add_argument("-t", "--test", action="store_true") parser.add_argument( "-d", "--day", type=int, choices=range(1, 26), help="Integer day number to solve for (1-25)." ) parser.add_argument( "-e", "--event", type=int, choices=range(FIRST_EVENT, LAST_EVENT + 1) ) parser.add_argument( "-f", "--format", type=str, choices=['string', 'list', 'int_list'], default='string', required=False, ) args = parser.parse_args() if not args.test: print(f"Part 1: {main(day=args.day, event=args.event, part=1, output_format=args.format, test=args.test)}") print(f"Part 2: {main(day=args.day, event=args.event, part=2, output_format=args.format, test=args.test)}") else: print(f"{main(day=args.day, event=args.event, part=0, output_format=args.format, test=args.test)}")