60 lines
1.9 KiB
Python
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)}")
|