第99回【JavaScript】昇順ソート、降順ソート

現在取り組んでいるのは、paiza ラーニング問題集「Cランクレベルアップメニュー」になります。

はじめに

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

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

某社から頂くカレンダーの 1 枚が、香川県のエンジェルロードでした。昨年、LeoLuna(夫婦)で訪れた小豆島のあの道です。なかなか面白かったので、また訪れてみたい場所の一つになっています。

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

昇順ソート (paizaランク D 相当)

n 個の数 a_1, … , a_n が与えられます。与えられた数を小さい順に改行区切りで出力してください。


入力される値

n
a_1
...
a_n

1 行目に正整数 n が、 2 行目から (n + 1) 行目には整数 a_1, …, a_n が改行区切りで与えられます。

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


期待する出力

a_1, …, a_n を小さい順に並べ替え、改行区切りで n 行、順に出力してください。

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


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

・ 1 ≤ n, a_i ≤ 50 (1 ≤ i ≤ n)


入力例

2
4
3

出力例

3
4

JavaScript の数値のソートはひと手間いるので、いつもあれ、どうだっけ、と不安になってしまう。

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

降順ソート (paizaランク D 相当)

n 個の数 a_1, …, a_n が与えられます。与えられた数を大きい順に改行区切りで出力してください。


入力される値

n
a_1
...
a_n

1 行目に正整数 n が、 2 行目から (n + 1) 行目には整数 a_1, …, a_n が改行区切りで与えられます。

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


期待する出力

a_1, …, a_n を大きい順に並べ替え、改行区切りで n 行、順に出力してください。

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


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

・ 1 ≤ n , a_i ≤ 50 (1 ≤ i ≤ n)


入力例

2
4
3

出力例

4
3

さっきと逆にするだけの簡単な作業です。

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 = [];
  for (let i = 1; i <= n; i++) {
      A.push(Number(lines[i]));
  }
  A.sort((a,b) => b - a);
  for (let a of A) {
      console.log(a);
  }
});
Python
N = int(input())
A = [int(input()) for _ in range(N)]
for a in sorted(A,reverse=True):
    print(a)

最後に

sort というメソッド一つでどうにか出来るわけではないところが JavaScript の難いところ。さすがに覚えたし慣れたけれども、やっぱり不安に駆られてしまう。

あんまり数列を sort する機会がないからでしょうか。しかし、Lambda で Python を利用していろいろ作っていると、使う機会は「ある」印象です。JavaScript で書き直してみたい気もしますが、まだまだ実力が伴いません。

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

Python の第99回はこちら