From cfc022dad894e771798d1ca8f04b4bf7f965ff1f Mon Sep 17 00:00:00 2001 From: Joscha Date: Tue, 6 Dec 2022 20:06:32 +0100 Subject: [PATCH] [py] Port 2015_02 --- py/2015/02/solve.py | 44 -------------------------------------------- py/aoc/__init__.py | 3 ++- py/aoc/y2015/d02.py | 45 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 47 insertions(+), 45 deletions(-) delete mode 100644 py/2015/02/solve.py create mode 100644 py/aoc/y2015/d02.py diff --git a/py/2015/02/solve.py b/py/2015/02/solve.py deleted file mode 100644 index e6ec8b3..0000000 --- a/py/2015/02/solve.py +++ /dev/null @@ -1,44 +0,0 @@ -import re -import sys - -PACKET_RE = r"(\d+)x(\d+)x(\d+)\n" - -def load_packets(filename): - packets = [] - with open(filename, "r") as f: - for line in f: - match = re.fullmatch(PACKET_RE, line) - a, b, c = match.groups() - a, b, c = int(a), int(b), int(c) - packets.append((a, b, c)) - return packets - -# PART 1 - -def necessary_area(packet): - a, b, c = sorted(packet) - return 3*a*b + 2*a*c + 2*b*c - -def total_wrapping_paper(packets): - return sum(map(necessary_area, packets)) - -# PART 2 - -def ribbon_length(packet): - a, b, c = sorted(packet) - return 2*a + 2*b + a*b*c - -def total_ribbon_length(packets): - return sum(map(ribbon_length, packets)) - -def main(filename): - packets = load_packets(filename) - print(f"Solutions for {filename}") - total = total_wrapping_paper(packets) - print(f"Part 1: {total}") - total_2 = total_ribbon_length(packets) - print(f"Part 2: {total_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 519a2d5..9e972f6 100644 --- a/py/aoc/__init__.py +++ b/py/aoc/__init__.py @@ -2,7 +2,7 @@ import sys import argparse from pathlib import Path -from .y2015 import d01 +from .y2015 import d01, d02 from .y2016 import d01, d02, d03, d04, d05 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 @@ -12,6 +12,7 @@ from .y2022 import d01, d02, d03, d04, d05, d06 DAYS = { "2015_01": y2015.d01.solve, + "2015_02": y2015.d02.solve, "2016_01": y2016.d01.solve, "2016_02": y2016.d02.solve, "2016_03": y2016.d03.solve, diff --git a/py/aoc/y2015/d02.py b/py/aoc/y2015/d02.py new file mode 100644 index 0000000..b314324 --- /dev/null +++ b/py/aoc/y2015/d02.py @@ -0,0 +1,45 @@ +import re + +PACKET_RE = r"(\d+)x(\d+)x(\d+)" + + +def load_packets(inputstr): + packets = [] + for line in inputstr.splitlines(): + match = re.fullmatch(PACKET_RE, line) + a, b, c = match.groups() + a, b, c = int(a), int(b), int(c) + packets.append((a, b, c)) + return packets + + +# PART 1 + + +def necessary_area(packet): + a, b, c = sorted(packet) + return 3 * a * b + 2 * a * c + 2 * b * c + + +def total_wrapping_paper(packets): + return sum(map(necessary_area, packets)) + + +# PART 2 + + +def ribbon_length(packet): + a, b, c = sorted(packet) + return 2 * a + 2 * b + a * b * c + + +def total_ribbon_length(packets): + return sum(map(ribbon_length, packets)) + + +def solve(inputstr): + packets = load_packets(inputstr) + total = total_wrapping_paper(packets) + print(f"Part 1: {total}") + total_2 = total_ribbon_length(packets) + print(f"Part 2: {total_2}")