第34回【Javascript】何個ある? 1、何個ある? 2、【配列の検索】何個ある? Boss

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

はじめに

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

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

AWS が提供しているサービスを理解することで、例えば、今まで cron で回していた作業を EventBridge と Lambda でやる、みたいなことを考えることが出来るようになります。サーバーのステートレス化とマイクロサービス化は、モダナイゼーションを行ううえで最も重要なファクターだと思っているので、最新の知識を追いかけていくべきです。

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

何個ある? 1 (paizaランク D 相当)

以下のような配列があります。

1 2 2 1 2 1 2 1 1 1

この中に含まれる 1 の個数を出力してください。


入力される値

入力は与えられません。

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


期待する出力

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

6

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


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

入力は与えられません。

ここまでの学習の中で、for と if を利用する、reduce を利用する、filter を利用するの 3 パターンを思いつくことが出来る。

JavaScript(fot と if)
const L = [1, 2, 2, 1, 2, 1, 2, 1, 1, 1];
let cnt = 0;
for (let i = 0; i < L.length; i++) {
    if (L[i] == 1) cnt++;
}
console.log(cnt);
JavaScript(reduce)
const L = [1, 2, 2, 1, 2, 1, 2, 1, 1, 1];
const cnt = L.reduce((i,ele) => {
    if (ele == 1) i++;
    return i;
},0);
console.log(cnt);
JavaScript(filter)
const L = [1, 2, 2, 1, 2, 1, 2, 1, 1, 1];
const cnt = L.filter(i => i == 1);
console.log(cnt.length);
Python
L = [1, 2, 2, 1, 2, 1, 2, 1, 1, 1]
ans = 0
for li in L:
    if li == 1:
       ans += 1
print(ans)

何個ある? 2 (paizaランク D 相当)

整数 N が与えられます。
以下の配列に含まれる N の個数を出力してください。
また、N は以下の配列に 1 個以上含まれるものとします。

1 2 5 1 4 3 2 5 1 4

入力される値

N

整数 N が与えられます。

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


期待する出力

N が何個あるか出力してください。

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


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

・N は与えられた配列に 1 個以上含まれる


入力例

1

出力例

3

さっきやったやつのちょっとだけ応用編。簡単。

JavaScript(fot と if)
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 = [1, 2, 5, 1, 4, 3, 2, 5, 1, 4];
    let cnt = 0;
    for (let i = 0; i < L.length; i++) {
        if (L[i] == n) cnt++;
    }
    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 = Number(lines[0]);
    const L = [1, 2, 5, 1, 4, 3, 2, 5, 1, 4];
    const cnt = L.reduce((i,ele) => {
        if (ele == n) i++;
        return i;
    },0);
    console.log(cnt);
});
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 = Number(lines[0]);
    const L = [1, 2, 5, 1, 4, 3, 2, 5, 1, 4];
    const cnt = L.filter(i => i == n);
    console.log(cnt.length);
});
Python
N = int(input())
L = [1, 2, 5, 1, 4, 3, 2, 5, 1, 4]
ans = 0
for li in L:
    if li == N:
       ans += 1
print(ans)

【配列の検索】何個ある? Boss (paizaランク D 相当)

1 行目に整数 N, M が与えられます。
2 行目に M 個の整数 a_1, a_2, …, a_M が与えられます。
M 個の整数に N が何個あるか数え、出力してください。
また、N は M 個の整数の中に 1 個以上含まれるものとします。


入力される値

N M
a_1 a_2 ... a_M

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

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


期待する出力

M 個の整数に N が何個あるか数え、出力してください。

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


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

・N, M は 1 以上 10 以下の整数
・a_i (1 ≦ i ≦ M) は 1 以上 10 以下の整数
・N は M 個の整数の中に 1 個以上含まれる


入力例

1 5
1 1 1 2 2

出力例

3

お馴染み、最後は、全部が標準入力から与えられるパターンです。

JavaScript(fot と if)
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 = 0;
    for (let i = 0; i < m; i++) {
        if (L[i] == n) cnt++;
    }
    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);
    const cnt = L.reduce((i,ele) => {
        if (ele == n) i++;
        return i;
    },0);
    console.log(cnt);
});
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);
    const cnt = L.filter(i => i == n);
    console.log(cnt.length);
});
Python
N,M = map(int,input().split())
L = list(map(int,input().split()))
ans = 0
for li in L:
    if li == N:
       ans += 1
print(ans)

最後に

いちいち、解答の都度、手打ちしています。身に付けるために一番重要なのは反復練習で身体で覚えることが近道だと思っている古い人間なので。小学生のころ、漢字書き取り 1000 回とかやらされませんでした? 誇張でもなんでもなく、漢字の小テストで間違えると、1000 回やらされるのがデフォでした。

そのおかげだと信じてやまない。LeoSaki(旦那)は、漢字に詳しい。そして、文字を書くのがとても早い。ゆっくりゆっくり書いていては、1000 回なんて終わりませんから。

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

Python の第34回はこちら