-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathday2.rb
68 lines (63 loc) · 2.45 KB
/
day2.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# coding: utf-8
# http://AdventOfCode.com/
# Day 2
# --- Day 2: I Was Told There Would Be No Math ---
#
# The elves are running low on wrapping paper, and so they need to submit an order for more. They
# have a list of the dimensions (length l, width w, and height h) of each present, and only want
# to order exactly as much as they need.
#
# Fortunately, every present is a box (a perfect right rectangular prism), which makes calculating
# the required wrapping paper for each gift a little easier: find the surface area of the box,
# which is 2*l*w + 2*w*h + 2*h*l. The elves also need a little extra paper for each present: the
# area of the smallest side.
#
# For example:
#
# A present with dimensions 2x3x4 requires 2*6 + 2*12 + 2*8 = 52 square feet of wrapping paper
# plus 6 square feet of slack, for a total of 58 square feet.
#
# A present with dimensions 1x1x10 requires 2*1 + 2*10 + 2*10 = 42 square feet of wrapping paper
# plus 1 square foot of slack, for a total of 43 square feet.
#
# All numbers in the elves' list are in feet. How many total square feet of wrapping paper should
# they order?
#
# Your puzzle answer was 1586300.
#
# --- Part Two ---
#
# The elves are also running low on ribbon. Ribbon is all the same width, so they only have to
# worry about the length they need to order, which they would again like to be exact.
#
# The ribbon required to wrap a present is the shortest distance around its sides, or the smallest
# perimeter of any one face. Each present also requires a bow made out of ribbon as well; the feet
# of ribbon required for the perfect bow is equal to the cubic feet of volume of the
# present. Don't ask how they tie the bow, though; they'll never tell.
#
# For example:
#
# A present with dimensions 2x3x4 requires 2+2+3+3 = 10 feet of ribbon to wrap the present plus
# 2*3*4 = 24 feet of ribbon for the bow, for a total of 34 feet.
#
# A present with dimensions 1x1x10 requires 1+1+1+1 = 4 feet of ribbon to wrap the present plus
# 1*1*10 = 10 feet of ribbon for the bow, for a total of 14 feet.
#
# How many total feet of ribbon should they order?
#
# Your puzzle answer was 3737498.
require_relative 'input'
input = Input.for_day(2)
# star 1
total_paper = 0
# star 2
total_ribbon = 0
input.each_line do |line|
h,d,w = line.split('x').map(&:to_i).sort
paper = 3*h*d + 2*d*w + 2*w*h
total_paper += paper
ribbon = 2*h + 2*d + h*d*w
total_ribbon += ribbon
end
puts "Total paper %d ft²"%total_paper
puts "Total ribbon %d ft"%total_ribbon