第38回【JavaScript】要素のカウント、配列末尾への追加

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

はじめに

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

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

最近、ルナちゃんが長く伸びた状態でくっついて寝ています。暑いし、寝返りがうてなくなるし、困ったものです。可愛いですけれど。レオくんが、そのルナちゃんを枕にして寝ていました。しばらくすると、怒ったルナちゃんがレオくんに鉄拳制裁を始め、布団の中が戦場に変わりました。寝れません。

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

要素のカウント (paizaランク D 相当)

1 行目に整数 N, M が与えられます。
2 行目に N 個の整数 a_1, a_2, …, a_N が与えられます。
N 個の整数に含まれている M の個数を出力してください。


入力される値

N M
a_1 a_2 ... a_N

1 行目に整数 N, M が与えられます。
2 行目に N 個の整数 a_1, a_2, …, a_N が与えられます。

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


期待する出力

N 個の整数に含まれている M の個数を出力してください。

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


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

・N, M は 1 以上 10 以下の整数
・a_i (1 ≦ i ≦ N) は 1 以上 10 以下の整数


入力例

5 1
1 1 1 2 2

出力例

3

filter() か reduce() か、paiza で何回か似たようなことをやっている。

JavaScript(filter())
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,m] = lines[0].split(/\s/).map(Number);
  const l = lines[1].split(/\s/).map(Number);
  let cnt = l.filter(val => val === m).length;
  console.log(cnt);
});
JavaScript(reduce())
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,m] = lines[0].split(/\s/).map(Number);
  const l = lines[1].split(/\s/).map(Number);
  let cnt = l.reduce((sum,val) => val == m? sum + 1: sum,0);
  console.log(cnt);
});
Python
N,M = map(int,input().split())
L = list(map(int,input().split()))
cnt = 0
for li in L:
    if li == M:
        cnt += 1
print(cnt)

配列末尾への追加 (paizaランク D 相当)

1 行目に整数 N, M が与えられます。
2 行目に N 個の整数 a_1, a_2, …, a_N が与えられます。
N 個の整数の末尾に整数 M を挿入し、改行区切りで出力してください。


入力される値

N M
a_1 a_2 ... a_N

1 行目に整数 N, M が与えられます。
2 行目に N 個の整数 a_1, a_2, …, a_N が与えられます。

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


期待する出力

N 個の整数の末尾に整数 M を挿入し、改行区切りで出力してください。

a_1
a_2
...
a_N
M

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


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

・N, M は 1 以上 10 以下の整数
・a_i (1 ≦ i ≦ N) は 1 以上 10 以下の整数


入力例

5 1
1 2 3 4 5

出力例

1
2
3
4
5
1

これは・・・簡単そうだ。標準入力から与えられる際にも、使っている。

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,m] = lines[0].split(/\s/).map(Number);
  let l = lines[1].split(/\s/).map(Number);
  l.push(m);
  for (let i = 0; i < l.length; i++) {
      console.log(l[i]);
  }
});
Python
N,M = map(int,input().split())
L = list(map(int,input().split()))
L.append(M)
print(*L,sep="\n")

最後に

コールバック関数にアロー関数、JavaScript を書く上では避けては通れない。いや、避けて通ってしっかり書けばいいのだろうけれど、それだと、他人が書いたコードが読めない気がする。

理解出来れば、やりたいことを簡潔に表現出来て、スッキリ素敵なコードライフな感じなので、書けるように読めるように精進します。

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

Python の第38回はこちら