Sean McLemon | Advent of Code

Home | Czech | Blog | GitHub | Advent Of Code | Notes


2015-12-02 - I Was Told There Would Be No Math

(original .ipynb)

Puzzle input is a sequence of (length,width,height) dimensions of presents. For part one we have to find the area of wrapping paper required (surface area of present + slack, where the slack is one unit of the smallest side). Part two involves finding the length of ribbon required (smallest distance around the present + some length for the bow, where the bow length is same magnitude as volume but in feet)

puzzle_input = open("./puzzle_input/day2.txt").readlines()

def parse_input(input_lines):
    for line in input_lines:
        yield list(map(int, line.split("x")))

        
def calc_area(present):
    s1, s2 = sorted(present)[:2]
    l, w, h = present
    return (2*l*w) + (2*w*h) + (2*h*l) + (s1*s2)
        

def part_one(input_lines):
    presents = parse_input(input_lines)
    return sum(map(calc_area, presents))

assert 58 == part_one(["2x3x4"])
assert 43 == part_one(["1x1x10"])

print("part one:", part_one(puzzle_input))
part one: 1586300
def ribbon_length(present):
    s1, s2 = sorted(present)[:2]
    l, w, h = present
    return (l*w*h) + (2*s1) + (2*s2)    


def part_two(input_lines):
    presents = parse_input(input_lines)
    return sum(map(ribbon_length, presents))


assert 34 == part_two(["2x3x4"])
assert 14 == part_two(["1x1x10"])

print("part two:", part_two(puzzle_input))
part two: 3737498