Retrofit 2019 1 ruby
This commit is contained in:
parent
f10e57eb79
commit
c368f223c4
7
ruby/2019/1/bin/problem
Normal file
7
ruby/2019/1/bin/problem
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
#!/usr/bin/env ruby
|
||||||
|
|
||||||
|
require "rocket_equation"
|
||||||
|
rockets = STDIN.read.chomp.split("\n").map { |line| RocketEquation.for line }
|
||||||
|
puts "Part 1: #{rockets.map(&:fuel_required).sum}"
|
||||||
|
puts "Part 2: #{rockets.map(&:more_fuel_required).sum}"
|
||||||
|
|
||||||
20
ruby/2019/1/lib/rocket_equation.rb
Normal file
20
ruby/2019/1/lib/rocket_equation.rb
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
class RocketEquation
|
||||||
|
attr_reader :mass
|
||||||
|
def initialize(mass)
|
||||||
|
@mass = mass
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.for(line)
|
||||||
|
new line.to_i
|
||||||
|
end
|
||||||
|
|
||||||
|
def fuel_required
|
||||||
|
[(mass / 3) - 2, 0].max
|
||||||
|
end
|
||||||
|
|
||||||
|
def more_fuel_required
|
||||||
|
return 0 unless mass.positive?
|
||||||
|
|
||||||
|
fuel_required + RocketEquation.new(fuel_required).more_fuel_required
|
||||||
|
end
|
||||||
|
end
|
||||||
@ -1,46 +0,0 @@
|
|||||||
class Module
|
|
||||||
attr_reader :mass
|
|
||||||
def initialize(mass)
|
|
||||||
@mass = mass
|
|
||||||
end
|
|
||||||
|
|
||||||
def fuel_required
|
|
||||||
(mass / 3) - 2
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.for(string)
|
|
||||||
new(string.to_i)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
class Modules
|
|
||||||
attr_reader :modules
|
|
||||||
def initialize(modules)
|
|
||||||
@modules = modules
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.from_file(filename, module_type)
|
|
||||||
new(File.read(filename).split.map{ |mass| module_type.for mass })
|
|
||||||
end
|
|
||||||
|
|
||||||
def total_fuel_required
|
|
||||||
@modules.map(&:fuel_required).sum
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
class HeavyFuelModule < Module
|
|
||||||
def fuel_required
|
|
||||||
super + Fuel.new(super).fuel_required
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
class Fuel < Module
|
|
||||||
def fuel_required
|
|
||||||
return 0 if super < 0
|
|
||||||
|
|
||||||
super + Fuel.new(super).fuel_required
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
puts "Part 1: #{Modules.from_file("../data/2019/1/input.txt", Module).total_fuel_required}"
|
|
||||||
puts "Part 2: #{Modules.from_file("../data/2019/1/input.txt", HeavyFuelModule).total_fuel_required}"
|
|
||||||
26
ruby/2019/1/test/test_rocket_equation.rb
Normal file
26
ruby/2019/1/test/test_rocket_equation.rb
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
require "minitest/autorun"
|
||||||
|
require "rocket_equation"
|
||||||
|
|
||||||
|
class TestRocketEquation < Minitest::Test
|
||||||
|
def assert_fuel_required(fuel, mass)
|
||||||
|
assert_equal(fuel, RocketEquation.for(mass).fuel_required)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_fuel_required
|
||||||
|
assert_fuel_required(2, 12)
|
||||||
|
assert_fuel_required(2, 14)
|
||||||
|
assert_fuel_required(654, 1969)
|
||||||
|
assert_fuel_required(33583, 100756)
|
||||||
|
end
|
||||||
|
|
||||||
|
def assert_more_fuel_required(fuel, mass)
|
||||||
|
assert_equal(fuel, RocketEquation.for(mass).more_fuel_required)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_more_fuel_required
|
||||||
|
assert_more_fuel_required(2, 12)
|
||||||
|
assert_more_fuel_required(2, 14)
|
||||||
|
assert_more_fuel_required(966, 1969)
|
||||||
|
assert_more_fuel_required(50346, 100756)
|
||||||
|
end
|
||||||
|
end
|
||||||
Loading…
Reference in New Issue
Block a user