JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptでポーカーのフルハウスを判定する方法

フルハウスとは?

ポーカーにおける「フルハウス」とは、プレイヤーの5枚の手札の中に、同じランクのカードが3枚以上含まれている状態を指します。本記事では、各要素が1枚のカードを表す5つの要素を持つ配列を受け取り、フルハウスが成立していれば true を、そうでなければ false を返すJavaScript関数を作成します。

アルゴリズムの考え方

この問題は以下の手順で解決できます。

  1. 元の配列のコピーを作成し、元の配列はそのまま保持します。
  2. 先頭から順にカードを1枚取り出し、残りのカードの中に同じランクが存在するかどうかを確認します。
  3. 同じランクが存在する場合は、さらに1枚取り除きます。その後もなお同じランクが残っていれば、合計3枚同じカードがあることになるため、フルハウス成立として true を返します。
  4. すべてのカードを確認しても3枚揃わなければ、false を返します。

コード例

以下が実際のコードです。

const arr1 = ['K', 'K', 'K', 'A', 'A']; // フルハウス成立
const arr2 = ['K', '2', 'K', 'A', 'J']; // フルハウス不成立

const isFullHouse = arr => {
    const copy = arr.slice();
    for(let i = 0; i < arr.length; ){
        const el = copy.splice(i, 1)[0];
        if(copy.includes(el)){
            copy.splice(copy.indexOf(el), 1);
            if(copy.includes(el)){
                return true;
            }
        }else{
            i++;
        }
    };
    return false;
};

console.log(isFullHouse(arr1));
console.log(isFullHouse(arr2));

実行結果

コンソールには次のように出力されます。

true
false

コードのポイント

  • slice() を使うことで元の配列を破壊せず、コピーに対して操作を行えます。
  • splice() でカードを取り除きながら、includes() で同じランクの残りを効率的にチェックしています。
  • インデックス i のインクリメントは、重複が見つからなかった場合のみ行うことで、取り除いた要素による位置ずれを防いでいます。
  1. JavaScriptでiframeをフルスクリーン表示に設定する方法

    Webページに埋め込んだiframe(インラインフレーム)を、ボタン操作ひとつで画面いっぱいに表示できたら便利ですよね。JavaScriptを使えば、CSSクラスの付け替えだけでこの動作をシンプルに実装できます。 サンプルコード 以下は、ボタンをクリックするとiframeが全画面サイズに切り替わるサンプルです。iframeに対して幅「100vw」・高さ「100vh」を指定したCSSクラスを適用しています。 <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-

  2. JavaScriptでWebページに「クリップボードにコピー」機能を実装する方法

    本記事では、JavaScriptを使ってWebページに「クリップボードにコピー(Copy to Clipboard)」機能を実装する方法を解説します。テキストボックスに入力された文字列を、ボタンを1クリックするだけでクリップボードにコピーできるようにします。 コード例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=d