42 lines
487 B
Ruby
42 lines
487 B
Ruby
class Present
|
|
attr_reader :l, :w, :h
|
|
|
|
def initialize(l, w, h)
|
|
@l = l
|
|
@w = w
|
|
@h = h
|
|
end
|
|
|
|
def self.for(string)
|
|
new *string.split("x").map(&:to_i)
|
|
end
|
|
|
|
def paper
|
|
surface_area + slack
|
|
end
|
|
|
|
def side_areas
|
|
[l*w, l*h, w*h]
|
|
end
|
|
|
|
def surface_area
|
|
side_areas.sum * 2
|
|
end
|
|
|
|
def slack
|
|
side_areas.min
|
|
end
|
|
|
|
def perimeters
|
|
[2*(l+w), 2*(l+h), 2*(w+h)]
|
|
end
|
|
|
|
def volume
|
|
l*w*h
|
|
end
|
|
|
|
def ribbon
|
|
perimeters.min + volume
|
|
end
|
|
end
|