テキサスホールデムポーカーの役を判定する式

こんにちは。
前回はテキサスホールデムポーカーで役ができる確率を取り上げました。
今回は,そのスプレッドシート内に作った式を載せます。
トランプをシャッフルする
はじめにトランプをシャッフルする部分です。
前回と同じスクリーンショットも載せて,対応がわかるようにしていきます。

この部分は,次の数式で作られています。

A列で52個の乱数を出し,B列でこれらの順位を求めることで1~52に対応づけています。
この値から1を引いて,13で割ると商が0・1・2・3となるものがちょうど13個ずつになります。
そのとき,余りは0~12となっています。この余りに1を加えて,トランプの数字にしています。
以上で,トランプをシャッフルすることができました。
この表の2~8行目が手札(ホールカード)2枚と場のカード(コミュニティカード)5枚に対応しています。
(これらの7枚を合わせて役を考えるので,あえて区別はしていません)
7枚のカードを調べる
次にどのカードが手として使えるかを調べます。
完成は次の図になります。

これは,次の数式になっています。

H列で,スペードのカードについて調べています。
H4のセル(スペードのA)では,7枚のカードの中にマークが0で数字が1のものの数を数えています。
絶対参照をうまく使うことで,H4~K16にオートフィルで複製できます。
H17では,スペードの枚数を数えています。これはフラッシュの判定に使います。
I17~K17も同様です。
L4ではAの枚数を数えています。これはペアやストレートなどの判定に使います。
L5~L16も同様です。
これで,使えるカードを調べることができました。
役を判定する
使えるカードがわかったので,役を判定します。

役を判定する式は次になります。

O3のセルでは,スペードのA~5のストレートフラッシュになっているかを調べています。
先ほどの表で,スペードのA~5の枚数の合計が5ならばTRUEになります。
O12は10~Aのストレートなので,数えるときに注意が必要です。
なお,ストレートフラッシュだからといって,ストレートが成立かつフラッシュが成立ということのANDではうまくいきません。これが7枚のカードで判定する難しさです。
P~R列も同様です。
S列では,マークが混ざっている場合も含めたストレートを調べています。
使えるカードが7枚もあるので,SUM関数ではなくAND関数にしています。
具体例を出すと,Aが2枚,2が1枚,3が1枚,4が1枚,5が0枚の場合,SUMの結果が5になりますが,ストレートではありません。ANDでは結果がFALSEになります。
次にO16のセルのフラッシュです。同じマークが5枚以上あればフラッシュになります。
他の役は,数字の枚数を調べればわかります。O15・O17~O19 のセルで調べています。
なお,フルハウスはここでは調べていません。
集計する
最後に集計部分です。

この数式は,次になります。
ロイヤルフラッシュは,いずれかのマークで10~Aのストレートフラッシュになっていれば成立します。
ストレートフラッシュ以下ですが,上位の役になっていないことを調べる必要があります。

その部分が,AND(NOT(OR($V$6:v〇)),・・・です。
それぞれの役の部分を見ていきます。
ストレートフラッシュは,いずれかのストレートになっていればよいので,ORで調べています。
4カードは前の表で調べたものを参照しています。
フルハウスは,3カード+1ペア+異なる2枚,または,3カード2+2ペア,または,3カードが2組+異なるカードのいずれかの場合に成立します。
フラッシュは前の表で調べたものを参照しています。
ストレートはマークによらず,ストレートの並びができれば成立するので,ORで調べています。
2ペア・1ペアは前の表で調べたものを参照しています。
ハイカードは,役なしのいわゆるブタです。上記の役になっていなければハイカードです。
回数等は循環参照で加算しています。
以上ですべての計算式を紹介しました。
今回はこれでおしまいにします。それではまた。
ディスカッション
コメント一覧
まだ、コメントがありません