More minitest
This commit is contained in:
parent
cddfabe954
commit
f08a53f5e5
7
ruby/2015/2/bin/problem
Normal file
7
ruby/2015/2/bin/problem
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
#/usr/bin/env ruby
|
||||||
|
|
||||||
|
require "present"
|
||||||
|
lines = STDIN.read.chomp.split("\n")
|
||||||
|
presents = lines.map { |line| Present.for line }
|
||||||
|
puts "Part 1: #{presents.map(&:paper).sum}"
|
||||||
|
puts "Part 2: #{presents.map(&:ribbon).sum}"
|
||||||
41
ruby/2015/2/lib/present.rb
Normal file
41
ruby/2015/2/lib/present.rb
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
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
|
||||||
14
ruby/2015/2/test/test_present.rb
Normal file
14
ruby/2015/2/test/test_present.rb
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
require "minitest/autorun"
|
||||||
|
require "present"
|
||||||
|
|
||||||
|
class TestPresent < Minitest::Test
|
||||||
|
def test_paper
|
||||||
|
assert_equal(58, Present.for("2x3x4").paper)
|
||||||
|
assert_equal(43, Present.for("1x1x10").paper)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_ribbon
|
||||||
|
assert_equal(34, Present.for("2x3x4").ribbon)
|
||||||
|
assert_equal(14, Present.for("1x1x10").ribbon)
|
||||||
|
end
|
||||||
|
end
|
||||||
Loading…
Reference in New Issue
Block a user