summaryrefslogtreecommitdiffstats
path: root/aoc
diff options
context:
space:
mode:
authorGravatar Tom van der Lee <t0m.vd.l33@gmail.com>2022-12-11 13:48:39 +0100
committerGravatar Tom van der Lee <t0m.vd.l33@gmail.com>2022-12-11 13:49:10 +0100
commitd60f6dc50ea3ea7066fc5e267076276939e2cbc2 (patch)
tree08544e7b3c880d65fb279ad749ab6769372e797b /aoc
parent43c89839d73a4da4a14e0853f161f7f5362e5638 (diff)
download2022-d60f6dc50ea3ea7066fc5e267076276939e2cbc2.tar.gz
2022-d60f6dc50ea3ea7066fc5e267076276939e2cbc2.tar.bz2
2022-d60f6dc50ea3ea7066fc5e267076276939e2cbc2.zip
Day 9 [WIP]
Diffstat (limited to 'aoc')
-rw-r--r--aoc/__main__.py58
-rw-r--r--aoc/template/__init__.py16
-rw-r--r--aoc/template/example.txt0
-rw-r--r--aoc/template/input.txt0
4 files changed, 57 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 @@
2import argparse 2import argparse
3import importlib 3import importlib
4import os 4import os
5from pathlib import Path
6from shutil import copytree
5from time import perf_counter 7from time import perf_counter
6from typing import List 8from typing import List, Callable
7 9
8 10
9def day(assignment_part: str) -> str: 11def 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
22def 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
42def 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
20parser = argparse.ArgumentParser(description="Advent of Code") 54parser = argparse.ArgumentParser(description="Advent of Code")
21 55
56parser.add_argument("command", type=str, choices=["run", "new"])
22parser.add_argument("day", type=str, help="Assignment day") 57parser.add_argument("day", type=str, help="Assignment day")
23parser.add_argument( 58parser.add_argument(
24 "-p", 59 "-p",
@@ -34,20 +69,9 @@ parser.add_argument("kwargs", type=kwargs, nargs="*")
34 69
35if __name__ == "__main__": 70if __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"}')
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 @@
1# -*- coding: utf-8 -*-
2from abc import ABC
3
4from aoc import BaseAssignment
5
6
7class Assignment(BaseAssignment, ABC):
8 pass
9
10
11class AssignmentOne(Assignment):
12 pass
13
14
15class AssignmentTwo(Assignment):
16 pass
diff --git a/aoc/template/example.txt b/aoc/template/example.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/aoc/template/example.txt
diff --git a/aoc/template/input.txt b/aoc/template/input.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/aoc/template/input.txt