第98回【JavaScript】forループ

現在取り組んでいるのは、paiza ラーニング問題集「Cランクレベルアップメニュー」になります。

はじめに

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

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

ちゃんとお休みが欲しくて転職をしたはずが、今、いつも仕事をしている気がします。元々ブラック体質なんだろうと、自覚はあります。しかし、いつまでもそんな働き方がいいのかどうか、そろそろ本気で考える必要があると考えています。

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

forループ (paizaランク C 相当)

パイザ君の所属する会社では忘年会の余興で次のようなゲームを行います。まず、正整数 M が発表され、参加者は手元の紙に M 個、好きな数字を書きます。このとき、紙に書く数のそれぞれは 1 以上 M 以下であり、同じ数字を何度書いても構いません。その後、 1 以上 M 以下の数 K が発表され、各参加者は自分の紙に数字 K を書いた数だけポイントをもらい、ポイントの高い順に景品が配られます。

忘年会の参加者の人数 N と、数 M , K が与えられ、各参加者が書いた紙が与えられるので、それぞれの参加者の得点を計算して出力してください。


入力される値

N M K
a_{1,1} ... a_{1,M}
...
a_{N,1} ... a_{N,M}

1 行目には上で説明した数 N, M, K が半角スペース区切りで与えられ、 2 行目から (N + 1) 行目までには各参加者が紙に書いた数字が M 個ずつ半角スペース区切りで、 N 回与えられます。

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


期待する出力

入力された通りの順番で、各参加者の得点をN回、改行区切りで出力してください。

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


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

・1 ≤ N , M ≤ 50
・1 ≤ K , a_{i,j} ≤ M(1 ≤ i ≤ N , 1 ≤ j ≤ M)


入力例

3 2 1
2 2
1 2
1 1

出力例

0
1
2

この余興は、一か八か全部同じ数字を書いておく、というのが必勝法な気がする。

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

最後に

Python にあるような count はないようなので、地道に数える必要があるっぽい。でも、何パターンかやり方はありそうなので、もう少し学習する必要があるかなぁと思いました。実際に Python で利用したことがあるメソッドは、JavaScript でも利用する可能性は高いと思うので。

ここしばらく Python の利用頻度が高く、よくカッコやセミコロンを忘れる・・・。

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

Python の第98回はこちら