第32回【JavaScript】配列に含まれている? 1、配列に含まれている? 2、配列に含まれている? 3

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

はじめに

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

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

朝起きると、ルナちゃんとレオくんがくっついて寝ていました。猫団子ってやつです。それを、LeoSaki(旦那)の顔の真横でやってくれているので、寝起きが幸せ過ぎました。それだけで、今日 1 日を乗り切れそうな気がします。

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

配列に含まれている? 1 (paizaランク D 相当)

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

10 13 21 1 6 51 10 8 15 6

この中に、6 が含まれているなら Yes、含まれていないなら No を出力してください。


入力される値

入力は与えられません。

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


期待する出力

6 が含まれているなら Yes、含まれていないなら No を出力してください。

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


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

入力は与えられません。

目視にて、console.log('Yes’) では、もちろんダメですよね。

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 L = [10, 13, 21, 1, 6, 51, 10, 8, 15, 6];
  function match() {
      for (let el of L) {
          if (el == 6) {
              console.log('Yes');
              return;
          }
      }
      console.log('No');
  }
  match();
});

こういう書き方はありなんだろうか・・・。for 文が最後までいったときの抜け方がフラグくらいしか思い浮かばず。function で return させてしまえばいいのでは、というのは安直なのか。

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 L = [10, 13, 21, 1, 6, 51, 10, 8, 15, 6];
  if (L.includes(6)) {
      console.log('Yes');
  } else {
      console.log('No');
  }
});
Python
L = [10, 13, 21, 1, 6, 51, 10, 8, 15, 6]
for li in L:
    if li == 6:
        print("Yes")
        break
else:
    print("No")

配列に含まれている? 2 (paizaランク D 相当)

整数 N が与えられます。
以下の配列に、整数 N が含まれているなら Yes、含まれていないなら No を出力してください。

5 12 6 84 14 25 44 3 7 20

入力される値

N

整数 N が与えられます。

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


期待する出力

N が含まれているなら Yes、含まれていないなら No を出力してください。

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


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

・N は 1 以上 100 以下の整数


入力例

12

出力例

Yes

さっき書いたものは、応用が利きづらい気がする。

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 = [5, 12, 6, 84, 14, 25, 44, 3, 7, 20];
  console.log(match(n,L));
});

function match(n,L) {
    for (let el of L) {
        if (el == n) return 'Yes';
    }
    return 'No';
}

少しは応用が利きそうな感じになったんじゃないだろうか・・・。

Python
N = int(input())
L = [5, 12, 6, 84, 14, 25, 44, 3, 7, 20]
for li in L:
    if li == N:
        print("Yes")
        break
else:
    print("No")

配列に含まれている? 3 (paizaランク D 相当)

1 行目に整数 N, M が与えられます。
2 行目に N 個の整数 a_1, a_2, …, a_N が与えられます。
N 個の整数の中に、整数 M が含まれているなら Yes、含まれていないなら No を出力してください。


入力される値

N M
a_1 a_2 ... a_N

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

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


期待する出力

N 個の整数の中に、整数 M が含まれているなら Yes、含まれていないなら No を出力してください。

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


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

・N, M は 1 以上 100 以下の整数
・a_i (1 ≦ i ≦ N) は 1 以上 100 以下の整数


入力例

5 1
1 2 3 4 5

出力例

Yes

全部標準入力から与えられるパターンも、さっきのを応用出来るんじゃないだろうか。

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 [m,n] = lines[0].split(/\s/).map(Number);
  const L = lines[1].split(/\s/).map(Number);
  console.log(match(n,L));
});

function match(n,L) {
    for (let el of L) {
        if (el == n) return 'Yes';
    }
    return 'No';
}

標準入力から受ける部分だけ書き換えれば、まったく同じコードを利用出来た。

Python
N,M = map(int,input().split())
L = list(map(int,input().split()))
for li in L:
    if li == M:
        print("Yes")
        break
else:
    print("No")

最後に

正直、今日書いたコードが正しいかどうかはわからない。それでも、ルールには則って書けているんじゃないだろうか。

あと、最近の傾向として var は使わない、とか出ているので、paiza が用意している標準入力から受ける部分以外では var を使わないようにしている。そうなると、const や let の使用方法をきちんと理解しておかないといけないなぁ、と思った。もちろん、var との違いについても!

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

Python の第32回はこちら