第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 は多くの場面で使われている割に、書き方が結構マニアックだなぁと思う。もちろん、ちゃんと理解している人からすれば、どこが分からないのかが分からないのだろうけれど。
引き続き、よろしくお願いいたします!
ディスカッション
コメント一覧
まだ、コメントがありません