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