第47回【JavaScript】ある数以上以下の要素の列挙 1、ある数以上以下の要素の列挙 2、ある数以上以下の要素の列挙 3

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

はじめに

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

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

カレンダーに予定を登録しないままでいると、別部署の方から、この日予定入ってないみたいなんで打合せできませんか、と言われました。カレンダーへの登録を後回しにしていた LeoSaki(旦那)が悪いのですが、そんなにピンポイントで重ならなくても・・・いや、反省します。

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

ある数以上以下の要素の列挙 1 (paizaランク D 相当)

1 行目に整数 N が与えられます。
2 行目に N 個の整数 a_1, a_2, …, a_N が与えられます。
N 個の整数のうち、5 以上の数をすべて、入力された順に改行区切りで出力してください。
また、5 以上の数が一個もない場合は、何も出力しなくても問題ありません。


入力される値

N
a_1 a_2 ... a_N

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

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


期待する出力

N 個の整数のうち、5 以上の数をすべて、入力された順に改行区切りで出力してください。
また、5 以上の数が一個もない場合は、何も出力しなくても問題ありません。

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


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

* N は 1 以上 10 以下の整数
* a_i (1 ≤ i ≤ N) は 1 以上 10 以下の整数


入力例

5
9 1 5 3 7

出力例

9
5
7

以上とか以下とか、結構使うことがあるパターンな気がする。

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

ある数以上以下の要素の列挙 2 (paizaランク D 相当)

1 行目に整数 N, K が与えられます。
2 行目に N 個の整数 a_1, a_2, …, a_N が与えられます。
N 個の整数のうち、K 以上の数をすべて、入力された順に改行区切りで出力してください。
また、K 以上の数が一個もない場合は、何も出力しなくても問題ありません。


入力される値

N K
a_1 a_2 ... a_N

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

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


期待する出力

N 個の整数のうち、K 以上の数をすべて、入力された順に改行区切りで出力してください。
また、K 以上の数が一個もない場合は、何も出力しなくても問題ありません。

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


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

* N, K は 1 以上 10 以下の整数
* a_i (1 ≤ i ≤ N) は 1 以上 10 以下の整数


入力例

5 3
5 2 4 3 1

出力例

5
4
3

前問の 5 以上を、k 以上と置き換えるだけ。簡単。

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

ある数以上以下の要素の列挙 3 (paizaランク D 相当)

1 行目に整数 N が与えられます。
2 行目に N 個の整数 a_1, a_2, …, a_N が与えられます。
N 個の整数のうち、N 個の整数の平均以上の数をすべて、入力された順に改行区切りで出力してください。


入力される値

N
a_1 a_2 ... a_N

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

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


期待する出力

N 個の整数のうち、N 個の整数の平均以上の数をすべて、入力された順に改行区切りで出力してください。

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


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

* N は 1 以上 10 以下の整数
* a_i (1 ≤ i ≤ N) は 1 以上 10 以下の整数


入力例

5
1 2 3 4 5

出力例

3
4
5

いきなり難易度が上がっている気が。特に、JavaScrip だとどうやって平均を求めればいいのか。

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 = lines[1].split(/\s/).map(Number);
  const average = L.reduce((sum,a) => sum + a) / n;
  for (let i = 0; i < n; i++) {
      if (L[i] >= average) console.log(L[i]);
  }
});
Python
N = int(input())
A = list(map(int,input().split()))
avg = sum(A) / N
for a in A:
    if a >= avg:
        print(a)

最後に

reduce() 関数を利用した平均値の求め方について、詰まることなくさらりと書けたことに感動。個人的な感動で申し訳ありません。

他の言語では average 関数とか sum 関数とか、いろいろありそうなのだけれど、JavaScrip はちょっと違うんだなぁということを改めて思いながら書きました。

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

Python の第47回はこちら