problems = DATA.read
.lines(chomp: true)
.map(&:chars)
.rotate(-1)
.transpose
.reject { it.join.strip.empty? }
.slice_before { "+*".chars.include?(it.first) }
.map {|problem|
op = problem[0][0].to_sym
args = problem.map { it[1..] }
[op, args]
}
pp problems.sum {|op,args| args.transpose.map { it.join.to_i }.inject(&op) }
pp problems.sum {|op,args| args.map { it.join.to_i }.inject(&op) }
__END__
123 328 51 64
45 64 387 23
6 98 215 314
* + * +