お知らせ

ただいま、シンタックスハイライターの設定を見直しております。
プログラムが見にくくなっているページがありますが、ご容赦ください。

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

モデル化とシミュレーション

こんにちは。

前回はテキサスホールデムポーカーで役ができる確率を取り上げました。

今回は,そのスプレッドシート内に作った式を載せます。

トランプをシャッフルする

はじめにトランプをシャッフルする部分です。

前回と同じスクリーンショットも載せて,対応がわかるようにしていきます。

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

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ペアは前の表で調べたものを参照しています。

ハイカードは,役なしのいわゆるブタです。上記の役になっていなければハイカードです。

回数等は循環参照で加算しています。

以上ですべての計算式を紹介しました。

今回はこれでおしまいにします。それではまた。

Posted by kasugai