class BatteryBank attr_reader :batteries def initialize(batteries) @batteries = batteries end def self.for(string) new string.split("").map(&:to_i) end def joltage_for_batteries(num_batteries) num_batteries.downto(1).reduce([[], 0]) do |acc, enabled_battery_index| max_digit = batteries[(acc[1])..(-enabled_battery_index)].max max_digit_index = batteries[(acc[1])..].find_index(max_digit) [acc[0] + [max_digit], acc[1] + max_digit_index + 1] end[0].map(&:to_s).join("").to_i end def maximum_joltage joltage_for_batteries(2) end def override_joltage joltage_for_batteries(12) end end