第52回【JavaScrip】指定要素があるかの判定、指定要素の先頭位置

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

はじめに

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

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

キャンプに行ってリフレッシュするつもりが、余計に疲れて帰ってくることがあります。それは、周りがうるさくて眠れなかったときが多いです。犬がずーっと吠えていた、とか、子供がずーっと泣いていた、とか、夜中まで終わらないパーティー、とか。キャンプ人口が増えるにつれて、マナーの乱れが顕著です。

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

指定要素があるかの判定 (paizaランク D 相当)

配列 A の要素数 N と整数 K , 配列 A の各要素 A_1, A_2, …, A_N が与えられるので、A に K が 1 つでも含まれている場合は Yes を、含まれていない場合は No を出力してください。


入力される値

N K
A_1
...
A_N

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

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


期待する出力

A に K が 1 つでも含まれている場合は Yes を、含まれていない場合は No を 1 行で出力してください。

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


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

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


入力例

1 0
1

出力例

No

Python で書いたものを見て愕然とした。このときはちゃんと break を入れるとかしていなかったんだなぁ。なんでだろう。

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 = [];
  for (let i = 1; i <= n; i++) {
      L.push(Number(lines[i]));
  } 
  if (L.includes(k)) {
      console.log('Yes');
  } else {
      console.log('No');
  }
});
Python
N,K = map(int,input().split())
A = [int(input()) for _ in range(N)]
if K in A:
    print('Yes')
else:
    print('No')

指定要素の先頭位置 (paizaランク D 相当)

配列 A の要素数 N と整数 K , 配列 A の各要素 A_1, A_2, …, A_N が与えられるので、K であるような A の要素のうち、要素番号が最小のものを出力してください。
A に K が含まれない場合は -1 を出力してください。


入力される値

N K
A_1
...
A_N

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

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


期待する出力

A に K が含まれる場合は K であるような A の要素のうち要素番号が最小のものを、含まれない場合は -1 を 1 行で出力してください。

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


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

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


入力例

1 0
1

出力例

-1

と思ったら、前問と違い、きちんと break で処理をしている。

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

最後に

2 問目については、いろいろと方法を模索してみたのだけれど、うまくいく方法を思いつくことが出来ず。ここもまだまだ勉強不足だなぁと反省。

過去に自分で解いた問題を見直すと、なんでこんな書き方をしているのだろう、と疑問に思うことが出てきます。まだ、完璧には身についていなかった証拠みたいなものです。恥ずかしい思いもありますが、特に直そうとは思っていません。それによって正答が導き出されないならば、もちろん直しますが。

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

Python の第52回はこちら