行によって長さが違う二次元配列の表示

標準出力メニュー【N個の文字を半分ずつ出力・数値を異なる長さで2行出力・直角三角形の出力・2次元配列の出力】

【STEP: 1】コード

reader.on('close', () => {
   const N = Number(lines[0]);  // 1〜N の数値
   const L = N / 2;  // 1 行の要素数
   const A = [ [], [] ];  // 2 次元配列
   for (let i = 1; i <= L; i++) {
      A[0].push(i);  // A[0] に i を保存
      A[1].push(i + L);  // A[1] に i + L を保存
   }
   A.forEach(a => {
      console.log(a.join(' '));  // A の各要素(配列)の値を連結して 出力
   });
});
hogeちゃんの画像

N / 2 で 1 行毎の要素数を求めています。for文 で A[0] と A[1] に同時進行で値を保存して join(' ')で連結した 値を 出力しています。

【STEP: 2】コード

reader.on('close', () => {
   const [N, M] = lines[0].split(' ').map(Number);
   const A = [ [], [] ];
   for (let i = 1; i <= N; i++) {
      A[0].push(i);  // A[0] に 1〜N を保存
   } 
   for (let i = 1; i <= M; i++) {
      A[1].push(i);  // A[1] に 1〜M を保存
   }
   A.forEach(a => {
      console.log(a.join(' '));
   });
});
hogeちゃんの画像

A[0] に1〜NA[1] に 1〜M をそれぞれ保存し forEach() で それぞれの要素を連結した値を出力しました。

【STEP: 3】コード

reader.on('close', () => {
   const N = Number(lines[0]);
   const A = [];
   for (let i = 1; i <= N; i++) {  // 1 ≦ iN
      A.push([1]);  // AN 個の ([1]) を保存
      for (let j = 2; j <= i; j++) {  // 2 ≦ ji 
         A[i -1].push(j);  // A[i -1] に 2 〜 i を追加
      }
   }
   A.forEach(a => {
      console.log(a.join(' '));
   });
});
hogeちゃんの画像

2重ループ の カウンタ変数 i のループで  [1] を NA に保存してからカウンタ変数 j のループで A[i -1]の要素に 2 〜 i  を追加しています。

【STEP: 4】コード

reader.on('close', () => {
   const N = Number(lines[0]);
   const M = lines[1].split(' ').map(Number);  // 要素数 N 個の 配列 M
   const A = [];  // 出力値を保存する配列
   for (let i = 1; i <= N; i++) {
      A.push([1]);  // AN 個の ([1]) を保存
      for (let j = 2; j <= M[i - 1]; j++) {
         A[i - 1].push(j);  // A[i - 1] に 2 〜 M[i - 1] を追加
      }
   }
   A.forEach(a => {
      console.log(a.join(' '));
   });
});
hogeちゃんの画像
A[i] の要素は 1 〜 M[i – 1] なので カウンタ変数 j の条件式は j<=M[i – 1]  になっています。

【FINAL】コード

reader.on('close', () => {
   const [N, M] = lines[0].split(' ').map(Number);
   const A = lines[1].split(' ').map(Number);  // 要素数 N 個の 配列 A
   const B = lines[2].split(' ').map(Number);  // 要素数 M 個の 配列 B
   const C = []; // 出力値を保存する配列
   for (let i = 0; i < M; i++) {
      const c = A.splice(0, B[i]);  // A の値を先頭から B[i] 個切り取り取り c に代入
      C.push(c);  // 配列 C に 配列 c を追加
   }
   C.forEach(c => {
      console.log(c.join(' '));
   });
});
hogeちゃんの画像

配列 A から B[i] 個 要素を切り取った配列を c に保存して cC  に 追加しています。

コメント