diff options
| author | 2022-12-11 13:48:39 +0100 | |
|---|---|---|
| committer | 2022-12-11 13:49:10 +0100 | |
| commit | d60f6dc50ea3ea7066fc5e267076276939e2cbc2 (patch) | |
| tree | 08544e7b3c880d65fb279ad749ab6769372e797b /aoc/__main__.py | |
| parent | 43c89839d73a4da4a14e0853f161f7f5362e5638 (diff) | |
| download | 2022-d60f6dc50ea3ea7066fc5e267076276939e2cbc2.tar.gz 2022-d60f6dc50ea3ea7066fc5e267076276939e2cbc2.tar.bz2 2022-d60f6dc50ea3ea7066fc5e267076276939e2cbc2.zip | |
Day 9 [WIP]
Diffstat (limited to 'aoc/__main__.py')
| -rw-r--r-- | aoc/__main__.py | 58 |
1 files changed, 41 insertions, 17 deletions
diff --git a/aoc/__main__.py b/aoc/__main__.py index 337bdfe..e1b2a85 100644 --- a/aoc/__main__.py +++ b/aoc/__main__.py | |||
| @@ -2,8 +2,10 @@ | |||
| 2 | import argparse | 2 | import argparse |
| 3 | import importlib | 3 | import importlib |
| 4 | import os | 4 | import os |
| 5 | from pathlib import Path | ||
| 6 | from shutil import copytree | ||
| 5 | from time import perf_counter | 7 | from time import perf_counter |
| 6 | from typing import List | 8 | from typing import List, Callable |
| 7 | 9 | ||
| 8 | 10 | ||
| 9 | def day(assignment_part: str) -> str: | 11 | def day(assignment_part: str) -> str: |
| @@ -17,8 +19,41 @@ def kwargs(kwarg: str) -> List: | |||
| 17 | return kwarg.split("=") | 19 | return kwarg.split("=") |
| 18 | 20 | ||
| 19 | 21 | ||
| 22 | def run(args: argparse.Namespace): | ||
| 23 | assignment_day = importlib.import_module(args.day) | ||
| 24 | |||
| 25 | Assignment = getattr(assignment_day, f"Assignment{args.part}") | ||
| 26 | assignment = Assignment( | ||
| 27 | path=os.path.dirname(assignment_day.__file__), **dict(args.kwargs) | ||
| 28 | ) | ||
| 29 | |||
| 30 | start = perf_counter() | ||
| 31 | print( | ||
| 32 | assignment.run( | ||
| 33 | input=assignment.read_input(example=args.example), | ||
| 34 | ) | ||
| 35 | ) | ||
| 36 | end = perf_counter() | ||
| 37 | delta = end - start | ||
| 38 | print() | ||
| 39 | print(f'{(delta if delta > 1 else delta * 1000):.3f}{"s" if delta > 1 else "ms"}') | ||
| 40 | |||
| 41 | |||
| 42 | def new(args: argparse.Namespace): | ||
| 43 | self = importlib.import_module(".", package="aoc") | ||
| 44 | path = Path(self.__file__) | ||
| 45 | template = path.parent.joinpath("template") | ||
| 46 | target = path.parent.parent.joinpath(args.day) | ||
| 47 | |||
| 48 | try: | ||
| 49 | copytree(template, target) | ||
| 50 | except FileExistsError: | ||
| 51 | print(f"{args.day} already exists") | ||
| 52 | |||
| 53 | |||
| 20 | parser = argparse.ArgumentParser(description="Advent of Code") | 54 | parser = argparse.ArgumentParser(description="Advent of Code") |
| 21 | 55 | ||
| 56 | parser.add_argument("command", type=str, choices=["run", "new"]) | ||
| 22 | parser.add_argument("day", type=str, help="Assignment day") | 57 | parser.add_argument("day", type=str, help="Assignment day") |
| 23 | parser.add_argument( | 58 | parser.add_argument( |
| 24 | "-p", | 59 | "-p", |
| @@ -34,20 +69,9 @@ parser.add_argument("kwargs", type=kwargs, nargs="*") | |||
| 34 | 69 | ||
| 35 | if __name__ == "__main__": | 70 | if __name__ == "__main__": |
| 36 | args = parser.parse_args() | 71 | args = parser.parse_args() |
| 37 | assignment_day = importlib.import_module(args.day) | ||
| 38 | |||
| 39 | Assignment = getattr(assignment_day, f"Assignment{args.part}") | ||
| 40 | assignment = Assignment( | ||
| 41 | path=os.path.dirname(assignment_day.__file__), **dict(args.kwargs) | ||
| 42 | ) | ||
| 43 | 72 | ||
| 44 | start = perf_counter() | 73 | match args.command: |
| 45 | print( | 74 | case "run": |
| 46 | assignment.run( | 75 | run(args) |
| 47 | input=assignment.read_input(example=args.example), | 76 | case "new": |
| 48 | ) | 77 | new(args) |
| 49 | ) | ||
| 50 | end = perf_counter() | ||
| 51 | delta = end - start | ||
| 52 | print() | ||
| 53 | print(f'{(delta if delta > 1 else delta * 1000):.3f}{"s" if delta > 1 else "ms"}') | ||
