6時だョ!!全員集合!!

Rails・JavaScrictを中心にアウトプットします。

2022年4月30日 アルゴ式 番外編

アルゴ式とは

プログラミングを解くドリルが提供されているWEBサービスである。by yano

今回の問題

配列の全探索 1 Image from Gyazo

Ryuji's answer

JavaScript

function main(input) {
const args = input.split("\n");
  const inputArray = args.map((n) => n.split(" "));
  const array1 = args[0].split(" ").map((n) => parseInt(n, 10));
  const N = array1[0];
  const V = array1[1];
  const A = args[1].split(" ").map((n) => parseInt(n, 10));

  const found = A.find(e => e === V);

  found ? console.log("Yes") : console.log("No");


}

main(require('fs').readFileSync('/dev/stdin', 'utf8'));
  • ArrayのメソッドをMDNに見にいきました。
  • メソッドを閲覧している時にfindメソッドが目に止まりました。
  • Node.jsでSequelizeのfindOneメソッドでログインの処理を実装したときにデータベースに登録してあるメールアドレスと入力したメールアドレスを照合する時のロジックが頭の中で浮かび、findメソッドでできそうだと仮説を立てて挙動を確認したら今回の問題に使えると思いました。
  • Aの配列の中からVに一致する値をfound変数に代入するようにしました。
  • 三項演算子を使い実行結果を条件分岐し提出したところLGTMでした。

Yano's answer

N, V = gets.split(' ').map!(&:to_i)
A = gets.split(' ').map!(&:to_i)

if A.include?(V)
  puts "Yes"
else
  puts "No"
end

pメソッドを使用するとテストが通らず不正解になるため、注意です。

N, V = gets.split(' ').map!(&:to_i)
A = gets.split(' ').map!(&:to_i)

puts A.include?(V) ? "Yes" : "No"

三項演算子パターンの場合、上記で正解となります。

map!(&:to_i)

以下とほぼ同義です。 map!とするとレシーバを破壊的に変更することができます。

.map {|n| n.to_i}

Yuki's answer

JavaScript

function main(input) {
  const args = input.split("\n");
  const inputArray = args.map((n) => n.split(" "));
  const array1 = args[0].split(" ").map((n) => parseInt(n, 10));
  const N = array1[0];
  const V = array1[1];
  const A = args[1].split(" ").map((n) => parseInt(n, 10));

  const hasArray = A.find((num) => num === V) ? "Yes" : "No";
  console.log(hasArray);
}

main(require('fs').readFileSync('/dev/stdin', 'utf8'));

TypeScript

import * as fs from 'fs'
const input = fs.readFileSync("/dev/stdin", "utf8")
const [nv, alist] = input.split("\n")

const [n,v,..._] = nv.split(" ").map(Number)
const list = alist.split(" ").map(Number)

const hasArray = list.find((num) => num === v) ? "Yes" : "No";
console.log(hasArray);
  • 条件に一致する配列の要素が存在する場合、Yesを返しています。

Yui's answer

// 入力値を受け取る
function main(input) {
  const args = input.split("\n"); // 入力文字列を改行で分割し、新しい配列を作成
  const inputArray = args.map((n) => n.split(" ")); // さらに空白文字列で配列を分割
  const array1 = args[0].split(" ").map((n) => parseInt(n, 10));
  const N = array1[0];
  const V = array1[1];
  const A = args[1].split(" ").map((n) => parseInt(n, 10));

 
  // 配列の要素の中に整数Vが含まれるか判定
  if (A.find((element) => element === V)){
    console.log("Yes");
  } else {
    console.log("No");
  }
}

main(require('fs').readFileSync('/dev/stdin', 'utf8'));
  • readFileSyncメソッドは、同期的にファイルを読み込むfsモジュールのメソッドです。fs.readFileSync(path\[, options\])が基本形です。
  • fsモジュールは、Node.jsでファイルの読み書きを行うための基本的な関数を提供するモジュールです。

参考

アルゴ式 Beta JavaScript標準入力まとめ【パターン別】