diff options
| author | 2022-11-28 13:52:27 +0100 | |
|---|---|---|
| committer | 2022-11-28 13:52:27 +0100 | |
| commit | a3de698aa6b7e15e9d0974d32dc566676383bd28 (patch) | |
| tree | d8d372b8adf7c7d2ab9b8d8b7d434945a88e7e9b /aoc/__main__.py | |
| download | 2022-a3de698aa6b7e15e9d0974d32dc566676383bd28.tar.gz 2022-a3de698aa6b7e15e9d0974d32dc566676383bd28.tar.bz2 2022-a3de698aa6b7e15e9d0974d32dc566676383bd28.zip | |
Initial code
Diffstat (limited to 'aoc/__main__.py')
| -rw-r--r-- | aoc/__main__.py | 47 |
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 @@ | |||
| 1 | import argparse | ||
| 2 | import importlib | ||
| 3 | import os | ||
| 4 | from time import perf_counter | ||
| 5 | from typing import List | ||
| 6 | |||
| 7 | |||
| 8 | def day(assignment_part: str) -> str: | ||
| 9 | return { | ||
| 10 | '1': 'One', | ||
| 11 | '2': 'Two', | ||
| 12 | }[assignment_part] | ||
| 13 | |||
| 14 | def kwargs(kwarg: str) -> List: | ||
| 15 | return kwarg.split('=') | ||
| 16 | |||
| 17 | parser = argparse.ArgumentParser(description='Advent of Code') | ||
| 18 | |||
| 19 | parser.add_argument('day', type=str, help='Assignment day') | ||
| 20 | parser.add_argument( | ||
| 21 | '-p', '--part', type=day, nargs='?', default='1', | ||
| 22 | help='Assingment part. Defaults to one.' | ||
| 23 | ) | ||
| 24 | parser.add_argument('--example', default=False, action='store_true') | ||
| 25 | parser.add_argument('kwargs', type=kwargs, nargs='*') | ||
| 26 | |||
| 27 | |||
| 28 | if __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"}') | ||
