# input = DATA.read # .gsub(/don't\(\)(?~do\(\))do\(\)/, "") # part two # .scan(/mul\((\d+),(\d+)\)/) # .map { _1.map(&:to_i) } # # pp input.sum { _1 * _2 } # because I felt like using a flip-flop... input = DATA.read.scan(/(do|don't)\(\)|mul\((\d+),(\d+)\)/) input.unshift(["do"]) sum = 0 input.each do |dodont, *mul| next unless (dodont == "do")..(dodont == "don't") next unless dodont.nil? a, b = mul.map(&:to_i) sum += a * b end pp sum __END__ xmul(2,4)&mul[3,7]!^don't()_mul(5,5)+mul(32,64](mul(11,8)undo()?mul(8,5))