第50回【JavaScrip】指定の要素のカウント、全ての要素の和

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

はじめに

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

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

ここしばらく、Python を使う機会が多くなっています。並行して JavaScrip の勉強を続けていると、ときどきごっちゃになって参ってしまいます。コロンのところがセミコロンになっていたり、カッコがいらないのにカッコを書いていたり。

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

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

配列 A の要素数 N と整数 K, 配列 A の各要素 A_1, A_2, …, A_N が与えられるので、配列 A に K がいくつ含まれるか数えてください。


入力される値

N K
A_1
...
A_N

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

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


期待する出力

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

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


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

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


入力例

1 2
1

出力例

0

filter を使う方法も思いつくけれど、とりあえずは最初に思い浮かんだ正攻法で。

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 = [];
  let cnt = 0;
  for (let i = 1; i <= n; i++) {
      L.push(Number(lines[i]));
  }
  for (let i = 0; i < n; i++) {
      if (L[i] == k) cnt++;
  }
  console.log(cnt);
});
JavaScript(こっちの方が JS らしい?)
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]));
  }
  let cnt = L.filter(n => n === k).length;
  console.log(cnt);
});
Python
N,K = map(int,input().split())
A = [int(input()) for _ in range(N)]
print(A.count(K))

全ての要素の和 (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
4
5

出力例

15

配列 A の要素の和、らしいので、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 = Number(lines[0]);
  const L = [];
  for (let i = 1; i <= n; i++) {
      L.push(Number(lines[i]));
  }
  const sum = L.reduce((a,b) => a + b, 0);
  console.log(sum);
});
Python
N = int(input())
A = [int(input()) for _ in range(N)]
print(sum(A))

最後に

もっと、「らしい」書き方がありそうだけれど、今の実力ではここまで。分かりやすくは書けている、気がしている。ネットでいろいろと調べていても、流し読みで読むことが出来るようにはなってきました。

Web のフロントで使われることが多いと思うので、あまり計算とか、数値関連に特化した関数が用意されていない、という認識で良いのかしら。それでも、かなり自由度はあると思う。

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

Python の第50回はこちら