From c8f033b32f9d61e481af70b6bb09a7a6766b6f58 Mon Sep 17 00:00:00 2001 From: Joscha Date: Tue, 6 Dec 2022 19:56:13 +0100 Subject: [PATCH] [py] Port 2016_03 --- py/2016/03/solve.py | 45 --------------------------------------------- py/aoc/__init__.py | 3 ++- py/aoc/y2016/d03.py | 45 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 47 insertions(+), 46 deletions(-) delete mode 100644 py/2016/03/solve.py create mode 100644 py/aoc/y2016/d03.py 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}")