From d60f6dc50ea3ea7066fc5e267076276939e2cbc2 Mon Sep 17 00:00:00 2001 From: Tom van der Lee Date: Sun, 11 Dec 2022 13:48:39 +0100 Subject: Day 9 [WIP] --- aoc/__main__.py | 58 ++++++++++++++++++++++++++++++++++-------------- aoc/template/__init__.py | 16 +++++++++++++ aoc/template/example.txt | 0 aoc/template/input.txt | 0 4 files changed, 57 insertions(+), 17 deletions(-) create mode 100644 aoc/template/__init__.py create mode 100644 aoc/template/example.txt create mode 100644 aoc/template/input.txt (limited to 'aoc') 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 @@ import argparse import importlib import os +from pathlib import Path +from shutil import copytree from time import perf_counter -from typing import List +from typing import List, Callable def day(assignment_part: str) -> str: @@ -17,8 +19,41 @@ def kwargs(kwarg: str) -> List: return kwarg.split("=") +def run(args: argparse.Namespace): + assignment_day = importlib.import_module(args.day) + + Assignment = getattr(assignment_day, f"Assignment{args.part}") + assignment = Assignment( + path=os.path.dirname(assignment_day.__file__), **dict(args.kwargs) + ) + + start = perf_counter() + print( + assignment.run( + input=assignment.read_input(example=args.example), + ) + ) + end = perf_counter() + delta = end - start + print() + print(f'{(delta if delta > 1 else delta * 1000):.3f}{"s" if delta > 1 else "ms"}') + + +def new(args: argparse.Namespace): + self = importlib.import_module(".", package="aoc") + path = Path(self.__file__) + template = path.parent.joinpath("template") + target = path.parent.parent.joinpath(args.day) + + try: + copytree(template, target) + except FileExistsError: + print(f"{args.day} already exists") + + parser = argparse.ArgumentParser(description="Advent of Code") +parser.add_argument("command", type=str, choices=["run", "new"]) parser.add_argument("day", type=str, help="Assignment day") parser.add_argument( "-p", @@ -34,20 +69,9 @@ parser.add_argument("kwargs", type=kwargs, nargs="*") if __name__ == "__main__": args = parser.parse_args() - assignment_day = importlib.import_module(args.day) - - Assignment = getattr(assignment_day, f"Assignment{args.part}") - assignment = Assignment( - path=os.path.dirname(assignment_day.__file__), **dict(args.kwargs) - ) - start = perf_counter() - print( - assignment.run( - input=assignment.read_input(example=args.example), - ) - ) - end = perf_counter() - delta = end - start - print() - print(f'{(delta if delta > 1 else delta * 1000):.3f}{"s" if delta > 1 else "ms"}') + match args.command: + case "run": + run(args) + case "new": + new(args) diff --git a/aoc/template/__init__.py b/aoc/template/__init__.py new file mode 100644 index 0000000..05b2b45 --- /dev/null +++ b/aoc/template/__init__.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +from abc import ABC + +from aoc import BaseAssignment + + +class Assignment(BaseAssignment, ABC): + pass + + +class AssignmentOne(Assignment): + pass + + +class AssignmentTwo(Assignment): + pass diff --git a/aoc/template/example.txt b/aoc/template/example.txt new file mode 100644 index 0000000..e69de29 diff --git a/aoc/template/input.txt b/aoc/template/input.txt new file mode 100644 index 0000000..e69de29 -- cgit v1.2.3