第89回【JavaScript】集合の結合

現在取り組んでいるのは、paiza ラーニング問題集「データセット選択メニュー」になります。

はじめに

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

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

他人の書いたコードが理解出来なくて、自分はまだまだだと落ち込みました。読み解くつもりでドキュメントに目を通していると、まだまだ知らない使い方、知らないやり方がたくさんあって、反省しきりです。

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

集合の結合 (paizaランク C 相当)

N 個の要素からなる数列 A, B が与えられます。A または B に含まれる値をすべて列挙し、重複を取り除いて昇順に出力してください。


入力される値

N
A_1 A_2 ... A_N
B_1 B_2 ... B_N

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


期待する出力

答えとなる数列 C を半角スペース区切りで1行に出力してください。
末尾に改行を入れ、余計な文字、空行を含んではいけません。

C_1 C_2 ...

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


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

・ 入力はすべて整数
・ 1 ≦ N ≦ 100
・ 1 ≦ A_i, B_i ≦ 1,000,000,000 (1 ≦ i ≦ N)


入力例

3
1 2 3
3 4 5

出力例

1 2 3 4 5

昇順に並べ替える必要がある、ということは、set のままではダメで・・・。

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 = lines[1].split(/\s/).map(Number);
  const B = lines[2].split(/\s/).map(Number);
  const C = new Set(A.concat(B));
  console.log([...C].sort((a, b) => a - b).join(' '));
});
Python
N = int(input())
A = [ int(x) for x in input().split() ]
B = [ int(x) for x in input().split() ]
C = set(A + B)
print(' '.join(map(str,sorted(C))))

最後に

なんだか、少し、JavaScript っぽい書き方な気がするけれど、慣れないうちにこのコードを見せられると挫折してしまいそうだ。Python のなんと簡潔なことか。

数字での並べ替えをいつも忘れてしまう。なんか不思議な書き方だよなぁ、とか。sort 一発でやって欲しいところ。というのはちょっとわがままか。

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

Python の第89回はこちら