JavaScriptでポーカーのフルハウスを判定する方法
フルハウスとは?
ポーカーにおける「フルハウス」とは、プレイヤーの5枚の手札の中に、同じランクのカードが3枚以上含まれている状態を指します。本記事では、各要素が1枚のカードを表す5つの要素を持つ配列を受け取り、フルハウスが成立していれば true を、そうでなければ false を返すJavaScript関数を作成します。
アルゴリズムの考え方
この問題は以下の手順で解決できます。
- 元の配列のコピーを作成し、元の配列はそのまま保持します。
- 先頭から順にカードを1枚取り出し、残りのカードの中に同じランクが存在するかどうかを確認します。
- 同じランクが存在する場合は、さらに1枚取り除きます。その後もなお同じランクが残っていれば、合計3枚同じカードがあることになるため、フルハウス成立として
trueを返します。 - すべてのカードを確認しても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のインクリメントは、重複が見つからなかった場合のみ行うことで、取り除いた要素による位置ずれを防いでいます。
-
JavaScriptでiframeをフルスクリーン表示に設定する方法
Webページに埋め込んだiframe(インラインフレーム)を、ボタン操作ひとつで画面いっぱいに表示できたら便利ですよね。JavaScriptを使えば、CSSクラスの付け替えだけでこの動作をシンプルに実装できます。 サンプルコード 以下は、ボタンをクリックするとiframeが全画面サイズに切り替わるサンプルです。iframeに対して幅「100vw」・高さ「100vh」を指定したCSSクラスを適用しています。 <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-
-
JavaScriptでWebページに「クリップボードにコピー」機能を実装する方法
本記事では、JavaScriptを使ってWebページに「クリップボードにコピー(Copy to Clipboard)」機能を実装する方法を解説します。テキストボックスに入力された文字列を、ボタンを1クリックするだけでクリップボードにコピーできるようにします。 コード例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=d