行列の加算|プログラムデザイナ


可能な限り簡単なコードを作成し、さまざまな方法でターゲットを実現しようとします.
問題に答える
行列の加算(Lv.1)
質問する
行列の加算は、2つの同じ行列の同じ行、同じ列の値を加算した結果です.2つのマトリクスarr 1とarr 2を入力し、マトリクス加算結果の関数を返し、解を完了します.
せいげんじょうけん
  • 行列arr 1、arr 2の行および列の長さは500を超えない.
  • I/O例
    arr1arr2return[[1,2],[2,3]][[3,4],[5,6]][[4,6],[7,9]][[1],[2]][[3],[4]][[4],[6]]
    solution.js
    function solution(arr1, arr2) {
        var answer = [[]];
        return answer;
    }
    に近づく
    ネストされた配列の値を順番に追加するには、外部配列+内部配列を迂回して各インデックスの値を加算するループを作成する必要があります.
    初識
    const arr = [["A", "B"],["C", "D"],["E", "F"]];
    console.log(arr[0][1]); // B
    console.log(arr[1][1]); // D
    Braket Notationを連続的に使用すると、ネストされた配列の値にアクセスできることがわかります.
    arr[바깥배열의 인덱스][내부배열의 인덱스];
    に答える
    プール(1):ネストされたマッピング方法
    function solution(arr1, arr2) {
      const foo = arr1.map((e, i) => e.map((f, j) => f + arr2[i][j]));
      return foo;
    };
    入力配列と同じ構造配列を返し,配列内で値をループ計算するmap法が現れた.
    最初のmapでは、パラメータとして渡されるeは内部配列を表し、e.mapで内部配列の各インデックスの値に順次アクセスできます.(外部インデックス=i、内部インデックス=j)
    インライン加算
    プール(2):ネストfor Loop
    function solution(arr1, arr2) {
      let outer = [];
      for (let i = 0; i < arr1.length; i++) {
        let inner = [];
        for (let j = 0; j < arr1[i].length; j++) {
          inner.push(arr1[i][j] + arr2[i][j]);
        }
        outer.push(inner);
      }
      return outer;
    }
    mapに比べて簡潔ではないが,for反復文でも問題を解決できる.
    これは、内層配列に値を順次追加し、完了した内層配列を外層配列に順番に追加して結果を返す解法です.
    他人の草
    function sumMatrix(A,B){
      return A.map((a,i) => a.map((b, j) => b + B[i][j]));
    }
    
    console.log(sumMatrix([[1,2], [2,3]], [[3,4],[5,6]]))
    同様にmapを用いて問題を解く.計算された配列は変数を別途割り当てず,直接リターンする方が簡潔である.
    function sumMatrix(A,B){
        var answer;
      answer = A.map((a, i) => {
        return a.map((val, idx) => {
            val += B[i][idx];
          return val;
        })
      })
    
        return answer;
    }
    言い方は違うが,同じ理屈だ.