iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 21
0
自我挑戰組

Codewar 進進出出 JS/Ruby系列 第 21

矩陣加法

  • 分享至 

  • xImage
  •  

題目:
(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

上一篇
薛丁格的布林值
下一篇
Domain Name
系列文
Codewar 進進出出 JS/Ruby30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言