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

JavaScriptby LeoSaki

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

学習サービストッププログラミング学習サイト【paizaラーニング】のメインページ。paiza独自のシステムにより、面倒な環境構築が不要、Webブラウザがあれば5秒で学習が開始できます。わかりやすい1本3分の動画と豊富な演習問題で初心者〜中級者のプログラミング学習を支援します。paiza.jp

はじめに

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

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

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

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

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

プログラミング練習問題「昇順ソート」問題を解いてスキルアップ!みんなも一緒に解いてみよう!paiza.jp

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 相当)

プログラミング練習問題「降順ソート」問題を解いてスキルアップ!みんなも一緒に解いてみよう!paiza.jp

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回はこちら

第99回【Python】昇順ソート、降順ソート記事

LeoSaki

旦那の方。 猫と嫁とのキャンプをこよなく愛する。 AWS 6 冠達成者。AWS 好き。 ITパスポート、基本情報技術者、応用情報技術者も取得しています。