毎日codewarsに取り組んでいます!
codewarsで学んだこと、もう少し深堀して調べたことをで残します。
今回はcodewarsでやったパングラムについてやっていきます
pangramとは
パングラム (pangram) は、アルファベットを使用する言葉遊びである。ギリシア語で「すべての文字」という意味がある通り、すべての文字(26個のアルファベット)を使い文章を作るのが目的である。
https://ja.wikipedia.org/wiki/%E3%83%91%E3%83%B3%E3%82%B0%E3%83%A9%E3%83%A0
Let’s Challenge
inputした文字列がa~zのアルファベットをすべて含んでいたらをtrue、
いなければfalseを返す関数を作成する
最初に書いたコード
40分かけて生み出したコードです…
渡ってきた文字列をアルファベット順にsortし、
Setを使用し重複を取り除き、変数alhaと一致しているかの結果を返しました
const f = (string) => {
const alha = "abcdefghijklmnopqrstuvwxyz";
const arr = string.toLowerCase().split("");
const filterArr = arr.sort().filter((s) => alha.includes(s));
return [...new Set(filterArr)].join("") === alha;
};
console.log(f("The quick brown fox jumps over the lazy dog.")); // true
console.log(f("This is not a pangram.")); // false
console.log(f("Cozy lummox gives smart squid who asks for job pen.")); // true
いろんな回答をみてみる
codewarsではほかの方の回答を見ることができ、「いいね!」と思った回答にはbestPracticeを押すことができます。いくつかピックアップしてみてみました。
match
これは思いつかないな、と感じました。。。
const f = (string) => {
return new Set(string.toLowerCase().match(/[a-z]/g)).size === 26;
};
filter
アルファベットをfilterして一致しないアルファベットの数が0か否かの結果を返す
const f = (string) => {
const s = string.toLowerCase();
const alha = "abcdefghijklmnopqrstuvwxyz";
return alha.split("").filter((a) => s.indexOf(a) === -1 ).length === 0;
};
every
個人的にはこれが一番わかりやすくてイイナと思いました
const f = (string) => {
const alha = [..."abcdefghijklmnopqrstuvwxyz"];
return alha.every((a) => string.toLowerCase().includes(a));
};
コメント