You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
66 lines
1.4 KiB
66 lines
1.4 KiB
from sys import argv |
|
|
|
|
|
def _no_op(x=None): |
|
return x |
|
|
|
|
|
def get_input(day: int, parser: callable = _no_op): |
|
with open(f'inputs/{day}') as inp: |
|
return parser(inp.read()) |
|
|
|
|
|
def parse_lines(raw: str): |
|
return raw.splitlines(keepends=False) |
|
|
|
|
|
def parse_lines_with_type_and_default(typ: callable, default): |
|
def inner(raw: str): |
|
lines = raw.splitlines(keepends=False) |
|
out = [] |
|
for line in lines: |
|
try: |
|
out.append(typ(line)) |
|
except: |
|
out.append(default) |
|
return out |
|
return inner |
|
|
|
|
|
def group_on_empty_line(casting_func: callable = _no_op): |
|
def inner(raw: str): |
|
lines = raw.splitlines(keepends=False) |
|
out = [] |
|
current = [] |
|
for line in lines: |
|
if not line: |
|
out.append(current) |
|
current = [] |
|
else: |
|
current.append(casting_func(line)) |
|
|
|
return out |
|
return inner |
|
|
|
|
|
def main(part1: callable = _no_op, part2: callable = _no_op): |
|
match argv[-1]: |
|
case "1": |
|
ret = part1() |
|
if ret is not None: |
|
print(ret) |
|
case "2": |
|
ret = part2() |
|
if ret is not None: |
|
print(ret) |
|
case _: |
|
ret1 = part1() |
|
if ret1 is not None: |
|
print("part1:", ret1) |
|
ret2 = part2() |
|
if ret2 is not None: |
|
print("part2:", ret2) |
|
|
|
|
|
|
|
|
|
|