aoc_omni/ruby/2019/1/main.rb

47 lines
887 B
Ruby
Raw Normal View History

2025-11-30 21:22:21 -05:00
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}"