class Fuelator::Calc

Calculate fuel for a flight

Example:

>> Fuelator.Calc.new(28801, [[:launch, 9.807], [:land, 1.62], [:launch, 1.62], [:land, 9.807]]).run
=> 51898

Constants

FLIGHT_CONSTANTS

Attributes

parameters[R]

Public Class Methods

new(mass, pairs) click to toggle source
# File lib/fuelator/calc.rb, line 27
def initialize(mass, pairs)
  @parameters = Parameters.new(mass, pairs)
end
run(mass, pairs) click to toggle source
# File lib/fuelator/calc.rb, line 23
def self.run(mass, pairs)
  new(mass, pairs).run
end

Public Instance Methods

run() click to toggle source
# File lib/fuelator/calc.rb, line 31
def run
  parameters.validate!
  full_mass = parameters.mass

  parameters.reversed.map do |val|
    full_mass += recursive_calculate(full_mass, val)
  end.last - parameters.mass
end

Private Instance Methods

recursive_calculate(mass, pair) click to toggle source
# File lib/fuelator/calc.rb, line 42
def recursive_calculate(mass, pair)
  constants = FLIGHT_CONSTANTS[pair.directive]
  fuel_mass = (mass * pair.gravity * constants[:theta] - constants[:bias]).to_i # rounded down

  return 0 if fuel_mass <= 0
  result = recursive_calculate(fuel_mass, pair)
  fuel_mass + result
end