第53回【JavaScript】要素の種類数、【配列を参照する操作】全ての要素に対する操作

現在取り組んでいるのは、paiza ラーニング問題集「配列活用メニュー」になります。

はじめに

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

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

やるべきことが溜まってきて管理が追いつかなくなってきた際に一番役に立つのが、手書きのメモです。箇条書きで書き並べていて、完了したら線を引いて消します。普段はカレンダーだったりリマインダーだったりを駆使して管理していますが、結局のところ、手書きのメモに戻ってきます。そこに行きつくくらいやるべきことが溜まっている状況をどうにかしたいのだけれど。

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

要素の種類数 (paizaランク D 相当)

配列 A の要素数 N と配列 A の各要素 A_1, A_2, …, A_N が与えられるので、配列 A には何種類の値が含まれているかを求めてください。


入力される値

N
A_1
...
A_N

・1 行目では、配列 A の要素数 N が与えられます。
・続く N 行では、配列 A の要素が先頭から順に与えられます。

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


期待する出力

配列 A に含まれている値の種類数を 1 行で出力してください。

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


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

・1 ≦ N ≦ 100
・0 ≦ A_i ≦ 100 (1 ≦ i ≦ N)


入力例

5
1
2
3
2
1

出力例

3

これは 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 L = [];
  for (let i = 1; i <= n; i++) {
      L.push(Number(lines[i]));
  }
  const set = new Set(L);
  console.log(set.size);
});
Python
N = int(input())
A = [int(input()) for _ in range(N)]
setA = set(A)
print(len(setA))

【配列を参照する操作】全ての要素に対する操作 (paizaランク D 相当)

配列 A の要素数 N と整数 K, 配列 A の各要素 A_1, A_2, …, A_N が与えられるので、配列 A の全ての要素を + K した後の A の各要素を出力してください。


入力される値

N K
A_1
...
A_N

・1 行目では、配列 A の要素数 N と A の全ての要素に足す値 K が半角スペース区切りで与えられます。
・続く N 行では、配列 A の要素が先頭から順に与えられます。

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


期待する出力

A_1 + K
...
A_N + K

全ての要素を + K した後の A の各要素を以上の形式で出力してください。

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


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

・1 ≦ N ≦ 100
・-100 ≦ A_i, K ≦ 100 (1 ≦ i ≦ N)


入力例

1 -5
1

出力例

-4

JavaScript ではちょっと特殊な感じな書き方が出来るっぽい。というか、Python の書き方は、問題の意図が汲み取れていないような気がするぞ・・・。

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,k] = lines[0].split(/\s/).map(Number);
  const L = [];
  for (let i = 1; i <= n; i++) {
      L.push(Number(lines[i]));
  }
  const ans = L.map((a) => a + k);
  for (let i = 0; i < n; i++) {
      console.log(ans[i]);
  }
});
Python
N,K = map(int,input().split())
A = [int(input()) for _ in range(N)]
for a in A:
    print(a + K)

最後に

JavaScript には、一括処理系が幾つかあるらしい。ここまで、reduce() forEach() map() くらいしか使ってきていないけれど、他にも便利な一括処理系があるようだ。

標準入力から受け取る際に、一括で数値に変換するため、map() をよく使っている。たぶん、LeoSaki(旦那)自身、中身まできちんと理解出来ていなかったと思うので、改めて勉強してみようと思った。

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

Python の第53回はこちら