ポーカーの最高ペアカードを返すJavaScript関数の実装方法
はじめに
本記事では、ポーカープレイヤーがランダムに引いた5枚のカードを表す、ちょうど5つの要素を持つ配列を受け取る関数をJavaScriptで実装する方法を解説します。
要件
- 5枚のカードの中に少なくとも1組のペアが含まれる場合、その中で最も高いペアのカード番号を返す(ペアが1組しかない場合はそのカードを返す)。
- ペアが存在しない場合は false を返す。
具体例
たとえば、次のような配列が与えられたとします。
const arr = ['A', 'Q', '3', 'A', 'Q'];
この場合、「A」と「Q」の2組のペアが存在します。カードゲームでは A は Q よりも強いため、関数は次のように「A」を返す必要があります。
'A'(カードゲームでは 'A' > 'Q' のため)
実装コード
以下が実際のコードです。
const arr = ['A', 'Q', '3', 'A', 'Q'];
const greatestPair = arr => {
const legend = '23456789JQKA';
const pairs = [];
for(let i = 0; i < arr.length; i++){
if(i !== arr.lastIndexOf(arr[i])){
pairs.push(arr[i]);
};
};
if(!pairs.length){
return false;
};
pairs.sort((a, b) => legend.indexOf(b) - legend.indexOf(a));
return pairs[0];
};
console.log(greatestPair(arr));コードの解説
このコードの仕組みを順番に見ていきましょう。
- カードの強さ順を定義: 文字列
legend = '23456789JQKA'を基準として、各カードの強さを比較できるようにしています。インデックスが大きいほど強いカードを意味します。 - ペアの検出: 各要素について、
lastIndexOf()で同じカードが配列内の別の位置にも存在するかどうかを確認し、重複しているカード(ペア候補)をpairs配列に追加していきます。 - ペアなしの場合:
pairsが空であれば、ペアが存在しないためfalseを返します。 - 最強ペアの選択:
sort()を使って、legend内のインデックス位置に基づいて降順に並べ替え、先頭の要素(最も強いカード)を返します。
出力結果
コンソールには以下のように出力されます。
A
まとめ
このように、カードの強さ順を文字列として定義し、インデックスを利用した比較を行うことで、シンプルかつ効率的にポーカーハンドから最高のペアカードを判定する関数を実装できます。lastIndexOf() による重複チェックと sort() による並べ替えを組み合わせるのがポイントです。
-
JavaScriptのコンストラクターから値を返す方法
JavaScriptのコンストラクターから値を返すには?JavaScriptでは、コンストラクター関数内で明示的にオブジェクトをreturnすると、new演算子によって生成されるインスタンス(this)の代わりに、そのオブジェクトが結果として返されます。この仕組みを利用すると、コンストラクターの戻り値を柔軟に制御できます。以下は、JavaScriptのコンストラクターから値を返すコード例です。サンプルコード<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-
-
JavaScriptで別の関数を返す関数の作り方とクロージャの仕組み
JavaScriptで関数を返す関数とは JavaScriptでは、関数の戻り値として別の関数を返すことができます。このテクニックは「クロージャ(closure)」と呼ばれる仕組みと密接に関係しており、返された関数は、外側の関数内で定義された変数にアクセスし続けることができるのが大きな特徴です。 以下は、JavaScriptで関数が別の関数を返すコード例です。 コード例 <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8" /> <