1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Bank = Data.define(:batteries) do
  def joltage(n)
    battery = batteries[0..-n].max
    index = batteries.index(battery)

    if n > 1
      battery.to_s + Bank.new(batteries[index+1..]).joltage(n-1)
    else
      battery.to_s
    end
  end
end

banks = DATA.read.lines(chomp: true)
  .map { it.chars.map(&:to_i) }
  .map { Bank.new(it) }

pp banks.map {|bank|
  bank.joltage(12).to_i
}.sum

__END__