From d7e30321ae6ae4c82a8ab7455f6ce33afd719c67 Mon Sep 17 00:00:00 2001 From: Tom van der Lee Date: Sun, 19 Nov 2023 16:55:03 +0100 Subject: Initial commit --- aoc/__main__.py | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 aoc/__main__.py (limited to 'aoc/__main__.py') diff --git a/aoc/__main__.py b/aoc/__main__.py new file mode 100644 index 0000000..596abee --- /dev/null +++ b/aoc/__main__.py @@ -0,0 +1,72 @@ +# -*- coding: utf-8 -*- +import enum +import typing +import importlib +import os +from pathlib import Path +from shutil import copytree +from time import perf_counter +from typing import List, Callable +import typer + +app = typer.Typer() + + +class AssignmentPart(str, enum.Enum): + One = "1" + Two = "2" + + +def day(assignment_part: str) -> str: + return AssignmentPart(assignment_part).name + + +def kwargs(kwarg: str) -> List: + return kwarg.split("=") + + +@app.command() +def run( + day: str, + part: str = typer.Option( + "1", "--part", help="Assignment part. Defaults to 'One'.", show_choices=True + ), + example: bool = typer.Option(False, "--example", help="Use an example input file"), + kwargs: List[str] = typer.Argument(None), +): + assignment_day = importlib.import_module(day) + + Assignment = getattr(assignment_day, f"Assignment{AssignmentPart(part).name}") + assignment = Assignment( + path=os.path.dirname(assignment_day.__file__), **dict(kwargs) + ) + + start = perf_counter() + typer.echo( + assignment.run( + input=assignment.read_input(example=example), + ) + ) + end = perf_counter() + delta = end - start + typer.secho( + f'\n{(delta if delta > 1 else delta * 1000):.3f}{"s" if delta > 1 else "ms"}', + fg="green", + ) + + +@app.command() +def new(day: str): + self = importlib.import_module(".", package="aoc") + path = Path(self.__file__) + template = path.parent.joinpath("template") + target = path.parent.parent.joinpath(day) + + try: + copytree(template, target) + except FileExistsError: + typer.secho(f"{day} already exists", fg="red") + + +if __name__ == "__main__": + app() -- cgit v1.2.3