2022年4月30日 アルゴ式 番外編
アルゴ式とは
プログラミングを解くドリルが提供されているWEBサービスである。by yano
今回の問題
Ryuji'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)); 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
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でファイルの読み書きを行うための基本的な関数を提供するモジュールです。