第31回【JavaScript】i番目の出力 1、i番目の出力 2、【二次元配列の入出力】i番目の出力 Boss

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

はじめに

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

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

JavaScript の勉強を頑張っている最中、Lambda でとあるコードを書く必要が出てきました。ここは Node.js を選択するべきか? まぁ、Python 指定だったので、勝手に Node.js とは言えませんけれど。余裕が出来たら、Python で書いたコードを Node.js で書き換えて、同じように動作するか試してみたいです。

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

i番目の出力 1 (paizaランク D 相当)

整数 K と 整数 L が与えられます。
以下の二次元配列 a を宣言し、この配列の K 行目 L 列目の要素を出力してください。
上から i 番目、左から j 番目の整数は a_ij です。

1 2 3 4
10 100 0 5
8 1 3 8
15 34 94 25

入力される値

K L

整数 K と 整数 L が与えられます。

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


期待する出力

配列の K 行目 L 列目の要素を出力してください。

a_KL

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


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

* K, L は 1 以上 4 以下の整数


入力例

4 3

出力例

94

インデックスがゼロから始まることを・・・っていつも書いている気がしてきたぞ。

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 [k,l] = lines[0].split(/\s/).map(Number);
  const a = [[1, 2, 3, 4], [10, 100, 0, 5], [8, 1, 3, 8], [15, 34, 94, 25]];
  console.log(a[k-1][l-1]);
});
Python
K,L = map(int,input().split())
li = [[1, 2, 3, 4], [10, 100, 0, 5], [8, 1, 3, 8], [15, 34, 94, 25]]
print(li[K-1][L-1])

i番目の出力 2 (paizaランク D 相当)

1 行目に整数 K と 整数 L が与えられます。
2 行目以降に 3 行 3 列の二次元配列が与えられます。
配列の K 行目 L 列目の要素を出力してください。
上から i 番目、左から j 番目の整数は a_ij です。


入力される値

K L
a_11 ... a_13
...
a_31 ... a_33

1 行目に整数 K と 整数 L が与えられます。
2 行目以降に 3 行 3 列の二次元配列が与えられます。

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


期待する出力

配列の K 行目 L 列目の要素を出力してください。

a_KL

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


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

* K, L は 1 以上 3 以下の整数
* a_ij は 1 以上 100 以下の整数


入力例

2 3
1 2 3
4 5 6
7 8 9

出力例

6

今度は配列も標準入力から与えられる。それ以外はさっきと同じ。

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 [k,l] = lines[0].split(/\s/).map(Number);
  const a = [];
  for (let i = 1; i <= 3; i++) {
      a.push(lines[i].split(/\s/).map(Number));
  }
  console.log(a[k-1][l-1]);
});
Python
K,L = map(int,input().split())
li = [list(map(int,input().split())) for _ in range(3)]
print(li[K-1][L-1])

【二次元配列の入出力】i番目の出力 Boss (paizaランク D 相当)

1 行目に整数 N, M, K, L が与えられます。
2 行目以降に N 行 M 列の二次元配列が与えられます。
配列の K 行目 L 列目の要素を出力してください。
上から i 番目、左から j 番目の整数は a_ij です。


入力される値

N M K L
a_11 ... a_1M
...
a_N1 ... a_NM

1 行目に整数 N, M, K, L が与えられます。
2 行目以降に N 行 M 列の二次元配列が与えられます。

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


期待する出力

配列の K 行目 L 列目の要素を出力してください。

a_KL

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


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

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


入力例

4 3 2 1
1 2 3
10 100 0
8 1 3
7 21 54

出力例

10

標準入力から与えられるものがいっぱい。

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,k,l] = lines[0].split(/\s/).map(Number);
  const a = [];
  for (let i = 1; i <= n; i++) {
      a.push(lines[i].split(/\s/).map(Number));
  }
  console.log(a[k-1][l-1]);
});
Python
N,M,K,L = map(int,input().split())
li = [list(map(int,input().split())) for _ in range(N)]
print(li[K-1][L-1])

最後に

for 文の中の条件、初期値を 0 にするのか 1 にするのか、とか、条件式に等号をつけるのかどうか、とか、ある程度ルールづけてやった方が良いのかなぁ、と思った。3 問目、等号を付け忘れて、不正解を出してしまったので。

Python みたいに、常に初期値から終了値未満まで、というルールでやっていれば間違えることはないんだろうけれど。JavaScript の自由度を良しとするか、条件文だけは統一ルールにするか、正解はどっちなんだろう。

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

Python の第31回はこちら