第51回【JavaScrip】配列の最大値、配列の最小値

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

はじめに

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

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

電話は苦手です、と以前にも書いた気がします。書いたっけなぁ。最近、お客様で、LeoSaki(旦那)からメールを送ると、直後に電話をかけてきて、メール確認しました、と連絡をくださる方がいらっしゃいます。そこから少しだけ世間話をする流れになるのですが、上手く受け答えが出来ません。電話は苦手です。

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

配列の最大値 (paizaランク D 相当)

配列 A の要素数 N と配列 A の各要素である整数 A_1, A_2, …, A_N が与えられるので、配列 A の要素の最大値 max を求めてください。


入力される値

N
A_1
...
A_N

・1 行目では、配列 A の要素数 N が与えられます。
・続く N 行では、配列 A の要素が先頭から順に与えられます。

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


期待する出力

max

1 行で、配列 A の要素の最大値 max を出力してください。

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


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

・1 ≦ N ≦ 100
・0 ≦ A_i ≦ 100 (1 ≦ i ≦ N)


入力例

5
1
2
1
5
5

出力例

5

さてと困った。Math.max.apply() を利用すれば良さそうだけれど、何やら問題もあるらしい。この程度の問題なら問題なさそうだけれど、もっと大きな配列になると、期待した値を返してくれないことがあるのだとか。

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 L = [];
  for (let i = 1; i <= n; i++) {
      L.push(Number(lines[i]));
  }
  const max_value = L.reduce((a,b) => Math.max(a,b));
  console.log(max_value);
});
Python
N = int(input())
A = [int(input()) for _ in range(N)]
print(max(A))

配列の最小値 (paizaランク D 相当)

配列 A の要素数 N と配列 A の各要素である整数 A_1, A_2, …, A_N が与えられるので、配列 A の要素の最小値 min を求めてください。


入力される値

N
A_1
...
A_N

・1 行目では、配列 A の要素数 N が与えられます。
・続く N 行では、配列 A の要素が先頭から順に与えられます。

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


期待する出力

min

1 行で配列 A の要素の最小値 min を出力してください。

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


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

・1 ≦ N ≦ 100
・0 ≦ A_i ≦ 100 (1 ≦ i ≦ N)


入力例

5
9
6
38
5
5

出力例

5

前問の max が min に変わっただけ、ということで良いだろうか。

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 L = [];
  for (let i = 1; i <= n; i++) {
      L.push(Number(lines[i]));
  }
  const min_value = L.reduce((a,b) => Math.min(a,b));
  console.log(min_value);
});
Python
N = int(input())
A = [int(input()) for _ in range(N)]
print(min(A))

最後に

reduce() やコールバック関数を何度も書いていれば、自然と身についてきた。と思ったのだけれど、ネットでいろいろと調べていると、もっともっと複雑に書かれているものを見つけて、流し読みでは理解が追いつかない場面に出くわした。

JavaScrip は多くの場面で使われている割に、書き方が結構マニアックだなぁと思う。もちろん、ちゃんと理解している人からすれば、どこが分からないのかが分からないのだろうけれど。

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

Python の第51回はこちら