1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 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__