diff --git a/py/2016/03/solve.py b/py/2016/03/solve.py deleted file mode 100644 index b73d6a1..0000000 --- a/py/2016/03/solve.py +++ /dev/null @@ -1,45 +0,0 @@ -import re -import sys - -TRIANGLE_RE = r"\s*(\d+)\s+(\d+)\s+(\d+)\n" - -def load_triangles(filename): - triangles = [] - with open(filename, "r") as f: - for line in f: - match = re.fullmatch(TRIANGLE_RE, line) - a, b, c = match.groups() - a, b, c = int(a), int(b), int(c) - triangles.append((a, b, c)) - return triangles - -# PART 1 - -def is_valid(triangle): - a, b, c = sorted(triangle) - return a + b > c - -def count_valid(triangles): - return len(list(filter(is_valid, triangles))) - -# PART 2 - -def transform_triangles(triangles): - new_triangles = [] - while triangles: - t1, t2, t3 = triangles[:3] - triangles = triangles[3:] - new_triangles.extend(zip(t1, t2, t3)) - return new_triangles - -def main(filename): - triangles = load_triangles(filename) - print(f"Solutions for {filename}") - valid = count_valid(triangles) - print(f"Part 1: {valid}") - valid_2 = count_valid(transform_triangles(triangles)) - print(f"Part 2: {valid_2}") - -if __name__ == "__main__": - for filename in sys.argv[1:]: - main(filename) diff --git a/py/aoc/__init__.py b/py/aoc/__init__.py index ebce392..5e57164 100644 --- a/py/aoc/__init__.py +++ b/py/aoc/__init__.py @@ -2,7 +2,7 @@ import sys import argparse from pathlib import Path -from .y2016 import d01, d02 +from .y2016 import d01, d02, d03 from .y2017 import d01, d02, d03, d04, d05, d06, d07, d08, d09 from .y2018 import d01, d02, d03, d04, d05, d06, d07, d08, d09, d10, d11 from .y2020 import d10 @@ -12,6 +12,7 @@ from .y2022 import d01, d02, d03, d04, d05, d06 DAYS = { "2016_01": y2016.d01.solve, "2016_02": y2016.d02.solve, + "2016_03": y2016.d03.solve, "2017_01": y2017.d01.solve, "2017_02": y2017.d02.solve, "2017_03": y2017.d03.solve, diff --git a/py/aoc/y2016/d03.py b/py/aoc/y2016/d03.py new file mode 100644 index 0000000..79332ba --- /dev/null +++ b/py/aoc/y2016/d03.py @@ -0,0 +1,45 @@ +import re + +TRIANGLE_RE = r"\s*(\d+)\s+(\d+)\s+(\d+)" + + +def load_triangles(inputstr): + triangles = [] + for line in inputstr.splitlines(): + match = re.fullmatch(TRIANGLE_RE, line) + a, b, c = match.groups() + a, b, c = int(a), int(b), int(c) + triangles.append((a, b, c)) + return triangles + + +# PART 1 + + +def is_valid(triangle): + a, b, c = sorted(triangle) + return a + b > c + + +def count_valid(triangles): + return len(list(filter(is_valid, triangles))) + + +# PART 2 + + +def transform_triangles(triangles): + new_triangles = [] + while triangles: + t1, t2, t3 = triangles[:3] + triangles = triangles[3:] + new_triangles.extend(zip(t1, t2, t3)) + return new_triangles + + +def solve(inputstr): + triangles = load_triangles(inputstr) + valid = count_valid(triangles) + print(f"Part 1: {valid}") + valid_2 = count_valid(transform_triangles(triangles)) + print(f"Part 2: {valid_2}")