第30回【JavaScript】二次元配列の入力 3、二次元配列の入力 4

現在取り組んでいるのは、paiza ラーニング問題集「配列メニュー」になります。

はじめに

猫とキャンプと野球観戦と AWS が大好きな旦那、LeoSaki です。モフモフしたい。

JavaScript をゼロから勉強してみよう、のコーナー 30 回目です。

背番号 30 と言えば、江川卓。ストレートは何 km/h 出ていたんだろう、と凄く気になります。いろいろな検証が行われていますが、てんでバラバラで実際のところは分かりません。まだ幼かったあの頃、江川の投球を見て興奮したのを覚えています。30 回目に 30 にちなんだお話。

それでは、今日も頑張ってみようと思います。

二次元配列の入力 3 (paizaランク D 相当)

1 行目に整数 N が与えられます。
2 行目以降に N 行 5 列の配列が与えられます。上から i 番目、左から j 番目の整数は a_ij です。
全要素を各行ずつ半角スペース区切りで出力し、行の終わりで改行してください。


入力される値

N
a_11 ... a_15
...
a_N1 ... a_N5

1 行目に整数 N が与えられます。
2 行目以降に N 行 5 列の配列が与えられます。

入力値最終行の末尾に改行が1つ入ります。


期待する出力

二次元配列の全要素を各行ずつ半角スペース区切りで出力し、行の終わりで改行してください。

a_11 ... a_15
...
a_N1 ... a_N5

また、末尾に改行を入れ、余計な文字、空行を含んではいけません。


すべてのテストケースにおいて、以下の条件をみたします。

* N, a_ij は 1 以上 100 以下の整数


入力例

3
8 1 3 8 1
1 5 6 4 7
1 100 56 25 15

出力例

8 1 3 8 1
1 5 6 4 7
1 100 56 25 15

今度は行数が標準入力から与えられるだって? いっそのこと、行数も列数も一度に与えてくれていいのに。

JavaScript
process.stdin.resume();
process.stdin.setEncoding('utf8');

var lines = [];
var reader = require('readline').createInterface({
  input: process.stdin,
  output: process.stdout
});
reader.on('line', (line) => {
  lines.push(line);
});
reader.on('close', () => {
  const n = Number(lines[0]);
  const a = [];
  for (let i = 1; i <= n; i++) {
      a.push(lines[i].split(/\s/).map(Number));
  }
  for (let i = 0; i < n; i++) {
      const len = a[i].length;
      for (let j = 0; j < len; j++) {
          if (j == len - 1) {
              console.log(a[i][j]);
          } else {
              process.stdout.write(a[i][j] + ' ');
          }
      }
  }
});
Python
N = int(input())
A = [list(map(int,input().split())) for _ in range(N)]
for a in A:
    print(*a,sep=" ")

二次元配列の入力 4 (paizaランク D 相当)

1 行目に整数 N と整数 M が与えられます。
2 行目以降に N 行 M 列の配列が与えられます。上から i 番目、左から j 番目の整数は a_ij です。
全要素を各行ずつ半角スペース区切りで出力し、行の終わりで改行してください。


入力される値

N M
a_11 ... a_1M
...
a_N1 ... a_NM

1 行目に整数 N と整数 M が与えられます。
2 行目以降に N 行 M 列の配列が与えられます。

入力値最終行の末尾に改行が1つ入ります。


期待する出力

二次元配列の全要素を各行ずつ半角スペース区切りで出力し、行の終わりで改行してください。

a_11 ... a_1M
...
a_N1 ... a_NM

また、末尾に改行を入れ、余計な文字、空行を含んではいけません。


すべてのテストケースにおいて、以下の条件をみたします。

* N, M, a_ij は 1 以上 100 以下の整数


入力例

4 3
1 2 3
8 1 3
10 100 0
12 24 84

出力例

1 2 3
8 1 3
10 100 0
12 24 84

ようやく、必要な値がすべて標準入力から与えられる問題です。

JavaScript
process.stdin.resume();
process.stdin.setEncoding('utf8');

var lines = [];
var reader = require('readline').createInterface({
  input: process.stdin,
  output: process.stdout
});
reader.on('line', (line) => {
  lines.push(line);
});
reader.on('close', () => {
  const [n,m] = lines[0].split(/\s/).map(Number);
  const a = [];
  for (let i = 1; i <= n; i++) {
      a.push(lines[i].split(/\s/).map(Number));
  }
  for (let i = 0; i < n; i++) {
      for (let j = 0; j < m; j++) {
          if (j == m - 1) {
              console.log(a[i][j]);
          } else {
              process.stdout.write(a[i][j] + ' ');
          }
      }
  }
});
Python
N,M = map(int,input().split())
A = [list(map(int,input().split())) for _ in range(N)]
for a in A:
    print(*a,sep=" ")

最後に

多分、Python のように配列を展開する方法として、console.log(a[i].join(' ')); でもいける気がするのだけれど、とりあえずは、正攻法というか、求められていそうな解答で書いてみました。

いろいろな引き出しを持っておくことは重要だと思うので、調べていて新しい方法を見つけたときは、積極的に試していきたいと思っています。

引き続き、よろしくお願いいたします!

Python の第30回はこちら