第63回【JavaScript】二人三脚
現在取り組んでいるのは、paiza ラーニング問題集「配列活用メニュー」になります。
はじめに
猫とキャンプと野球観戦と AWS が大好きな旦那、LeoSaki です。モフモフしたい。
JavaScript をゼロから勉強してみよう、のコーナー 63 回目です。
最初の章は簡単だから読み飛ばした、次の章からやってます、と、若手が言っていました。気持ちは分かります。しかし、本当に大事な基礎の基礎の部分を疎かにすると、手痛いしっぺ返しを喰らってしまうものです。
それでは、今日も頑張ってみようと思います。
二人三脚 (paizaランク C 相当)
生徒の身長が A_1, …., A_N であるような N 人のクラスで二人三脚の代表を決めることにしました。代表には、身長の差が最も小さいような 2 人を選出することにしました。選ばれた 2 人の身長を昇順に出力してください。
入力される値
N
A_1
...
A_N
・1 行目では、クラスの人数 N が半角スペース区切りで与えられます。
・続く N 行では、クラスメイト N 人の身長が与えられます。
入力値最終行の末尾に改行が1つ入ります。
期待する出力
a_1
a_2
選ばれた 2 人の身長 a_1 a_2 を昇順に出力してください。 (a_1 ≦ a_2)
また、末尾に改行を入れ、余計な文字、空行を含んではいけません。
すべてのテストケースにおいて、以下の条件をみたします。
・2 ≦ N ≦ 100
・100 ≦ A_i ≦ 200 (1 ≦ i ≦ N)
・代表となるようなペアは 1 組に限られることが保証されています。
入力例
5
119
102
187
191
132
出力例
187
191
別の言語での模範解答では、二重ループを使って調べていたけれど、そんな面倒なことはしたくない。
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 = [];
let ans = 101;
let [x,y] = [0,0];
for (let i = 1; i <= N; i++) {
A.push(Number(lines[i]));
}
A.sort((first,second)=>first - second);
for (let i = 0; i < A.length - 1; i++) {
if ((A[i+1] - A[i]) < ans) {
ans = A[i+1] - A[i];
[x,y] = [A[i],A[i+1]];
}
}
console.log(x);
console.log(y);
});
Python
N = int(input())
A = [int(input()) for _ in range(N)]
A.sort()
ans = 101
x,y = 0,0
for i in range(N-1):
if A[i+1] - A[i] < ans:
ans = A[i+1] - A[i]
x,y = A[i],A[i+1]
print(x)
print(y)
最後に
for 文の条件で A.length – 1 の、-1 をつけてなくても、エラーにならない不思議。出力してみると、undefined が出力されていました。
undefined における四則演算の結果っていったいなんなのか。こちらも出力してみると、NaN のようです。ちょっと不親切な気がします。型が異なっていれば、エラーを吐いていただきたいものです。
引き続き、よろしくお願いいたします!
ディスカッション
コメント一覧
まだ、コメントがありません