「5枚の役」と「7枚から作る役」の確率を分ける

ポーカーの確率表を見るときは、何枚から役を作る数字なのかを先に確認します。この記事では、次の条件を揃えて比べます。

条件5枚の表7枚の表
山札ジョーカーなしの52枚同じ52枚
抽出重複なしで5枚重複なしで7枚
交換なしなし
数える役配られた5枚の役7枚から選ぶ最善5枚の役
総組合せ2,598,960通り133,784,560通り

いずれも、手札やボードを見る前の無条件の出現率です。相手の手札、参加人数、ベット、フォールドを条件にしていません。7枚の表はホールデムの最終的な役を考える参考になりますが、「この手札なら相手に何%で勝つか」という表ではありません。

52枚から交換せず5枚を配る場合は全2,598,960通り。7枚を配り最善5枚を選ぶ場合は全133,784,560通りとなり、役出現率の分母が違う。

役ごとの件数と出現確率

以下は標準のハイの順位で分類した、編集部の独立全列挙による値です。最も強い役だけを1回数えています。確率は小数第6位までの表示で丸めているため、表示値の合計に微小な差が出ます。

最善の役5枚の件数5枚の確率7枚の件数7枚の確率
ロイヤルフラッシュ40.000154%4,3240.003232%
ストレートフラッシュ(ロイヤルを除く)360.001385%37,2600.027851%
フォーカード6240.024010%224,8480.168067%
フルハウス3,7440.144058%3,473,1842.596102%
フラッシュ5,1080.196540%4,047,6443.025494%
ストレート10,2000.392465%6,180,0204.619382%
スリーカード54,9122.112845%6,461,6204.829870%
ツーペア123,5524.753902%31,433,40023.495536%
ワンペア1,098,24042.256903%58,627,80043.822546%
ハイカード1,302,54050.117739%23,294,46017.411920%
合計2,598,960100%133,784,560100%

ロイヤルフラッシュはストレートフラッシュの最上位ですが、この表では見つけやすいように別行です。ロイヤルを含むストレートフラッシュ全体なら、5枚で40通り、7枚で41,584通りとなります。

7枚に複数の役があっても、重複させない

たとえば、7枚にAが3枚、Kが3枚、2が1枚あれば、最善はA・A・A・K・Kのフルハウスです。表ではフルハウスに1回入れ、スリーカードやワンペアへ追加しません。

同様にストレートフラッシュは「ストレート」と「フラッシュ」に重ねて数えていません。「フラッシュ以上」や「フラッシュを含む組合せ」の表とは、集計条件が異なります。

組合せ数から確率を計算する

計算の基本は、その役になる件数÷全組合せ数です。パーセント表示では最後に100を掛けます。

「n枚から順番を区別せずr枚を選ぶ数」をC(n,r)と書くと、全組合せは次の式です。

C(n,r) = n! / {r! × (n-r)!}
C(52,5) = 2,598,960
C(52,7) = 133,784,560

「!」は、その整数から1までを掛ける記号です。同じ5枚でも配られた順が違うだけなら、ここでは同じ組合せとして扱います。

5枚のフルハウスを数える

3枚組のランクを13通り、そのスートを4種類から3つ選びます。ペアは別ランクなので12通り、そのスートを4種類から2つ選びます。

13 × C(4,3) × 12 × C(4,2)
= 13 × 4 × 12 × 6
= 3,744通り

3,744 ÷ 2,598,960 × 100 ≒ 0.144058%

3枚側と2枚側は役割が違うため、同じ組合せを入れ替えて二重に数えてはいません。

5枚のワンペアを数える

ペアのランクとスートを選び、残り3枚は互いに異なる別ランクから選びます。

13 × C(4,2) × C(12,3) × 4³
= 1,098,240通り

残り3枚にもペアがあるとツーペア、ペアと同じランクを含めるとスリーカード等になるため、ランクの選び方に制限を入れています。

5枚のフラッシュから、上位役を除く

同じスートの13枚から5枚を選ぶと、4×C(13,5)=5,148通りです。ただし、この中にはロイヤルを含むストレートフラッシュ40通りがあります。

4 × C(13,5) − 40 = 5,108通り

これが表の「最善の役がフラッシュ」の件数です。何を含め、何を除いた式かを揃えることが大切です。

7枚では、選べるカードが増えるため確率が変わる

7枚から5枚を選ぶ方法はC(7,5)=21通りあります。ただし、5枚の確率を21倍すれば7枚の確率になるわけではありません。同じ7枚の中で、複数の選び方が同じ役を作るからです。

たとえば7枚のフルハウスは、ランクごとの枚数が「3・2・1・1」「3・2・2」「3・3・1」の3種類に分かれます。

3・2・1・1:13×4×12×6×C(11,2)×4² = 3,294,720
3・2・2  :13×4×C(12,2)×6²       =   123,552
3・3・1  :C(13,2)×4²×11×4        =    54,912
合計                                  3,473,184

この分類には同ランク4枚を含めないため、フォーカードを混ぜていません。5枚とn枚の確率の違いや、含有する役と最善役の定義の違いは、Wu・Wuの原著論文でも扱われています。

再計算できる全列挙コード

次のPythonコードは、52枚から順不同でn枚を選び、その最善の役の種類を1つに分類します。5枚・7枚の両方に使えます。7枚は1億件以上あるため、Pythonでそのまま実行すると時間がかかります。

from itertools import combinations
from collections import Counter
from math import comb

deck = [(rank, suit) for rank in range(2, 15) for suit in range(4)]

def straight(ranks):
    ranks = set(ranks)
    if 14 in ranks:
        ranks.add(1)  # A2345用。QKA23は連番にしない
    return any(set(range(low, low + 5)) <= ranks
               for low in range(1, 11))

def category(hand):
    by_suit = [{r for r, s in hand if s == suit} for suit in range(4)]
    for ranks in by_suit:
        if {10, 11, 12, 13, 14} <= ranks:
            return "royal"
        if straight(ranks):
            return "straight_flush"
    counts = sorted(Counter(r for r, s in hand).values(), reverse=True)
    if counts[0] == 4:
        return "four_kind"
    if counts[0] == 3 and counts[1] >= 2:
        return "full_house"
    if any(len(ranks) >= 5 for ranks in by_suit):
        return "flush"
    if straight(r for r, s in hand):
        return "straight"
    if counts[0] == 3:
        return "three_kind"
    if counts.count(2) >= 2:
        return "two_pair"
    if counts[0] == 2:
        return "one_pair"
    return "high_card"

n = 5  # 7枚の表を再計算する場合は7へ変更
totals = Counter(category(hand) for hand in combinations(deck, n))
assert sum(totals.values()) == comb(52, n)
for name, count in totals.items():
    print(name, count, count / comb(52, n) * 100)

編集部の検算では、同じ分類を使う別実装で5枚・7枚を全列挙し、表の件数と合計を確認しました。コードは役の種類の集計用で、同じ役同士のキッカー比較をする対戦用判定器ではありません。

役の出現率・ドロー完成率・勝率は別の数字

知りたいこと必要な条件例
役の出現率山札、選ぶ枚数、最善役の集計方法無条件の7枚でフルハウスは約2.60%
ドロー完成率今見えている札、待ち札、残り枚数9枚待ちをフロップからリバーまでに引く率
相手に勝つ確率自分と相手の手札・レンジ、ボード、人数フラッシュでも相手のフルハウスに負ける

自分の手札2枚とフロップ3枚だけが分かり、特定の待ち札が9枚残っているとします。残る2枚でその9枚を少なくとも一度引く率は、1−(38/47)×(37/46)≒34.97%です。これは、見えている札を条件にした完成率であり、表の無条件のフラッシュ出現率とは比較できません。

ドローの読み方はガット・両面・バックドア、対人の取り分は勝率とエクイティへ進めます。

また、7枚ではワンペアの方がハイカードより出やすくなりますが、標準ルールの役順位は変わりません。確率表からその場で役順位を作り直さず、標準の役一覧で勝敗を判定します。