47 lines
887 B
Ruby
47 lines
887 B
Ruby
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}"
|