77 lines
1.8 KiB
Python
77 lines
1.8 KiB
Python
import json
|
|
import platform
|
|
import sys
|
|
|
|
from rich import print
|
|
|
|
from partOne import partOne
|
|
from partTwo import partTwo
|
|
|
|
|
|
def run_tests(test_cases):
|
|
do_tests = True
|
|
if len(test_cases) == 0:
|
|
do_tests = False
|
|
elif len(test_cases["one"]) == 0 and len(test_cases["two"]) == 0:
|
|
do_tests = False
|
|
|
|
if not do_tests:
|
|
print("Info: no test cases specified. Skipping tests\n")
|
|
return
|
|
|
|
print("Test cases")
|
|
|
|
def rt(tcs, f, n):
|
|
for i, tc in enumerate(tcs):
|
|
print(f"{n}.{i+1} ", end="")
|
|
expectedInt = tc["expected"]
|
|
result = f(str(tc["input"]))
|
|
if result == expectedInt:
|
|
print("[green]pass[/green]")
|
|
else:
|
|
print(f"[red]fail[/red] (got {result}, expected {expectedInt})")
|
|
|
|
rt(test_cases["one"], partOne, 1)
|
|
rt(test_cases["two"], partTwo, 2)
|
|
|
|
print()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
try:
|
|
info = open("info.json").read()
|
|
except FileNotFoundError:
|
|
print("Error: could not open info.json")
|
|
sys.exit(-1)
|
|
|
|
info = json.loads(info)
|
|
|
|
year = info["year"]
|
|
day = info["day"]
|
|
title = info["title"]
|
|
|
|
print(f"[yellow]AoC {year}[/yellow]: day {day} - {title}")
|
|
print(f"Python {platform.python_version()}\n")
|
|
|
|
try:
|
|
challenge_input = open("input.txt").read()
|
|
except FileNotFoundError:
|
|
print("Error: could not open input.txt")
|
|
sys.exit(-1)
|
|
|
|
if "vis" in sys.argv:
|
|
import visualise
|
|
|
|
print("[green]Running visualisation....[/green]")
|
|
|
|
visualise.visualise(challenge_input)
|
|
sys.exit()
|
|
|
|
run_tests(info["testCases"])
|
|
|
|
if "debug" in sys.argv:
|
|
sys.exit()
|
|
|
|
print("Answers")
|
|
print("Part 1:", partOne(challenge_input))
|
|
print("Part 2:", partTwo(challenge_input))
|