diff --git a/py/aoc/y2015/d02.py b/py/aoc/y2015/d02.py index b314324..2d63d7f 100644 --- a/py/aoc/y2015/d02.py +++ b/py/aoc/y2015/d02.py @@ -1,45 +1,16 @@ -import re - -PACKET_RE = r"(\d+)x(\d+)x(\d+)" +def area(l, w, h): + sides = [l * w, w * h, h * l] + return 2 * sum(sides) + min(sides) -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 ribbon(l, w, h): + half_perimeters = [l + w, w + h, h + l] + return 2 * min(half_perimeters) + l * w * h 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}") + boxes = [tuple(map(int, line.split("x"))) for line in inputstr.splitlines()] + part1 = sum(area(l, w, h) for l, w, h in boxes) + print(f"Part 1: {part1}") + part2 = sum(ribbon(l, w, h) for l, w, h in boxes) + print(f"Part 2: {part2}") diff --git a/sample_inputs/2015/2015_02.01.input b/sample_inputs/2015/2015_02.01.input new file mode 100644 index 0000000..5256b38 --- /dev/null +++ b/sample_inputs/2015/2015_02.01.input @@ -0,0 +1 @@ +2x3x4 diff --git a/sample_inputs/2015/2015_02.01.solution b/sample_inputs/2015/2015_02.01.solution new file mode 100644 index 0000000..69e9cb9 --- /dev/null +++ b/sample_inputs/2015/2015_02.01.solution @@ -0,0 +1,2 @@ +Part 1: 58 +Part 2: 34 diff --git a/sample_inputs/2015/2015_02.02.input b/sample_inputs/2015/2015_02.02.input new file mode 100644 index 0000000..4fe0855 --- /dev/null +++ b/sample_inputs/2015/2015_02.02.input @@ -0,0 +1 @@ +1x1x10 diff --git a/sample_inputs/2015/2015_02.02.solution b/sample_inputs/2015/2015_02.02.solution new file mode 100644 index 0000000..9446d75 --- /dev/null +++ b/sample_inputs/2015/2015_02.02.solution @@ -0,0 +1,2 @@ +Part 1: 43 +Part 2: 14