【Codewars】pangramの検出

codewars

毎日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));
};

コメント

タイトルとURLをコピーしました