summaryrefslogtreecommitdiffstats
path: root/aoc/__main__.py
diff options
context:
space:
mode:
authorGravatar Tom van der Lee <t0m.vd.l33@gmail.com>2022-11-28 13:52:27 +0100
committerGravatar Tom van der Lee <t0m.vd.l33@gmail.com>2022-11-28 13:52:27 +0100
commita3de698aa6b7e15e9d0974d32dc566676383bd28 (patch)
treed8d372b8adf7c7d2ab9b8d8b7d434945a88e7e9b /aoc/__main__.py
download2022-a3de698aa6b7e15e9d0974d32dc566676383bd28.tar.gz
2022-a3de698aa6b7e15e9d0974d32dc566676383bd28.tar.bz2
2022-a3de698aa6b7e15e9d0974d32dc566676383bd28.zip
Initial code
Diffstat (limited to 'aoc/__main__.py')
-rw-r--r--aoc/__main__.py47
1 files changed, 47 insertions, 0 deletions
diff --git a/aoc/__main__.py b/aoc/__main__.py
new file mode 100644
index 0000000..25a7026
--- /dev/null
+++ b/aoc/__main__.py
@@ -0,0 +1,47 @@
1import argparse
2import importlib
3import os
4from time import perf_counter
5from typing import List
6
7
8def day(assignment_part: str) -> str:
9 return {
10 '1': 'One',
11 '2': 'Two',
12 }[assignment_part]
13
14def kwargs(kwarg: str) -> List:
15 return kwarg.split('=')
16
17parser = argparse.ArgumentParser(description='Advent of Code')
18
19parser.add_argument('day', type=str, help='Assignment day')
20parser.add_argument(
21 '-p', '--part', type=day, nargs='?', default='1',
22 help='Assingment part. Defaults to one.'
23)
24parser.add_argument('--example', default=False, action='store_true')
25parser.add_argument('kwargs', type=kwargs, nargs='*')
26
27
28if __name__ == '__main__':
29 args = parser.parse_args()
30 assignment_day = importlib.import_module(args.day)
31
32 Assignment = getattr(assignment_day, f'Assignment{args.part}')
33 assignment = Assignment(
34 path=os.path.dirname(assignment_day.__file__),
35 **dict(args.kwargs)
36 )
37
38 start = perf_counter()
39 print(
40 assignment.run(
41 input=assignment.read_input(example=args.example),
42 )
43 )
44 end = perf_counter()
45 delta = end - start
46 print()
47 print(f'{(delta if delta > 1 else delta * 1000):.3f}{"s" if delta > 1 else "ms"}')