幾つかの方法を書いてみました。
最初は素直に書いています。そこから順々にコードを短くしていっています。
r.rb
ruby
1# frozen_string_literal: true
2
3def task_1(s, z)
4 s.flatten.zip(z.flatten) # [["o", "1"], ["x", "2"], ["o", "3"], ["o", "4"], ...
5 .select { |x| x[0] == 'o' } # [["o", "1"], ["o", "3"], ["o", "4"], ...
6 .map { |x| x[1].to_i } # [1, 3, 4, 5, 7, 9]
7 .sum # 29
8end
9
10def task_2(s, z)
11 s.flatten.zip(z.flatten.map(&:to_i)) # [["o", 1], ["x", 2], ["o", 3], ["o", 4], ...
12 .map { |x| x[0] == 'o' ? x[1] : 0 } # [1. 0, 3, 4, ...]
13 .sum # 29
14end
15
16def task_3(s, z)
17 s.flatten.zip(z.flatten)
18 .each_with_object([]) { |x, mem| mem << x[1].to_i if x[0] == 'o' }
19 .sum
20end
21
22def task_4(s, z)
23 s.flatten.zip(z.flatten)
24 .inject(0) { |mem, x| mem + (x[0] == 'o' ? x[1].to_i : 0) }
25end
26
27s = [%w[o x o], %w[o o x], %w[o x o], %w[x x x]]
28z = [%w[1 2 3], %w[4 5 6], %w[7 8 9], %w[10 11 12]]
29
30p task_1(s, z)
31p task_2(s, z)
32p task_3(s, z)
33p task_4(s, z)
34
実行例
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/31 11:12
2021/10/31 11:14
2021/10/31 11:15