第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 のようです。ちょっと不親切な気がします。型が異なっていれば、エラーを吐いていただきたいものです。

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

Python の第63回はこちら