Files
pyAOC/main.py
T

60 lines
1.9 KiB
Python

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)}")