題目:
(6 級) Matrix Addition
寫一個可以接受兩個平方矩陣的 (N x N
個二維陣列) function,並回傳兩個陣列的加總。
傳遞給 function 的兩個矩陣的大小均為 N x N
(正方形),僅包含整數。
如何相加兩個矩陣:
從第一個矩陣中取出每一個元素 [n][m]
,並將其與第二個矩陣中相同的[n][m]
元素相加。
相加結果將是解答矩陣的元素 [n][m]
。
如下:
|1 2 3| |2 2 1| |1+2 2+2 3+1| |3 4 4|
|3 2 1| + |3 2 3| = |3+3 2+2 1+3| = |6 4 4|
|1 1 1| |1 1 3| |1+1 1+1 1+3| |2 2 4|
範例:
matrixAddition(
[ [1, 2, 3],
[3, 2, 1],
[1, 1, 1] ],
// +
[ [2, 2, 1],
[3, 2, 3],
[1, 1, 3] ] )
// returns:
[ [3, 4, 4],
[6, 4, 4],
[2, 2, 4] ]
Ruby 解法:
def matrixAddition(a, b)
a.map.with_index { |sub_a, index_a|
sub_a.map.with_index { |i, index_sub|
i + b[index_a][index_sub]
}
}
end
JavaScript 解法:
function matrixAddition(a, b){
return a.map((sub_a, index_a) =>
sub_a.map((i, index_sub) => i + b[index_a][index_sub])
)
}
心得:
快到 AstroCamp 的 DemoDay 了,最近趕專案總覺得時間一直不夠用,所以今天挑了一個相對簡單的題目,複習一下陣列經常用到的 map 方法。
後來看解答發現 Ruby 有很好用的 Matrix,所以可以改成更 "優雅" 的寫法:
require 'matrix'
def matrixAddition(a, b)
(Matrix[*a] + Matrix[*b]).to_a
end