”ごいた”の駒を配った時点で勝敗が確定している確率を計算してみた
"ごいた"では、駒を配った時点で勝敗は決していることがあります。麻雀でいうところの天和あるいは人和、地和。わたしが知る限りのパターンについて、どれくらいの確率で発生するのか試してみました。
10,000,000回やってみたらこんなかんじになりました。
- 必勝パターンと6しなどが同時発生した場合、6しなどとしてカウント。
- 親でanyパターンが発生した場合、anyパターンの発生としてカウント。
- 例えば「王王飛飛角角☗☗」のように「王王飛飛☗☗☗☗」と「王王角角☗☗☗☗」は同時に発生するが、このような場合は表の上位でカウント。このため「王王飛飛☗☗☗☗」の方が若干発生確率が高くなる。
手番 | 持ち駒 | 回数 | 確率 |
---|---|---|---|
親のみ | 香香香香☗☗☗☗ | 14,731回 | 0.15% |
親のみ | 王香香香し☗☗☗ | 102,467回 | 1.02% |
親のみ | 王王飛飛☗☗☗☗ | 11,635回 | 0.12% |
親のみ | 王王角角☗☗☗☗ | 11,425回 | 0.11% |
親のみ | 王王金金金金☗☗ | 239回 | 0.00% |
親のみ | 王王銀銀銀銀☗☗ | 255回 | 0.00% |
親のみ | 王王馬馬馬馬☗☗ | 258回 | 0.00% |
親のみ | 王王金金金香し☗ | 2713回 | 0.03% |
親のみ | 王王銀銀銀香し☗ | 2543回 | 0.03% |
親のみ | 王王馬馬馬香し☗ | 2629回 | 0.03% |
any | 王香香香香し☗☗ | 15676回 | 0.16% |
any | 王王飛飛香し☗☗ | 28854回 | 0.29% |
any | 王王角角香し☗☗ | 28614回 | 0.29% |
any | 王王香香香しし☗ | 12631回 | 0.13% |
any | 王王金金金金香し | 151回 | 0.00% |
any | 王王銀銀銀銀香し | 159回 | 0.00% |
any | 王王馬馬馬馬香し | 168回 | 0.00% |
any | しししししししし | 174回 | 0.00% |
any | ししししししし☗ | 10,034回 | 0.10% |
any | しししししし☗☗ | 185,009回 | 1.85% |
any | ししししし☗☗☗ ししししし☗☗☗ | 970回 | 0.01% |
合計 | 431,345回 | 4.31% |
およそ4%の確率で、最初っから勝敗が決まってるみたいです。ただし、自分の駒がそうなるのはその4分の1の確率なので、約1%です。ちなみに天和の確率は33万分の1だそうですので、それに比べればずいぶん発生しやすい。
「王王飛飛香し☗☗」もしくは「王王角角香し☗☗」は合計で0.6%程度の確率で発生します。コレが出たら、誰かが残り2枚になるまでは"なし"でOK!
過去の記事で書いているように、ひとりのプレイヤーに配られる駒のパターンは3,699ありますが、親であればうち619通りが、子であれば113通りが上の表に合致しますので、仮に全探索系の対戦プログラムを書くのであれば、この制約を利用することで計算量を減らすことができると考えます。とはいえ発生確率は高々4%ですが。
総当りプログラムはこんなかんじ
DAMA = 1 HISHA = 2 KAKU = 3 KIN = 4 GIN = 5 BAKKO = 6 GON = 7 SHI = 8 KOMA = [ [DAMA]*2, [HISHA]*2, [KAKU]*2, [KIN]*4, [GIN]*4, [BAKKO]*4, [GON]*4, [SHI]*10 ].flatten n = 0 count = Array.new(21, 0) while true k = KOMA.sample(KOMA.length) koma = [k[0..7].sort, k[8..15].sort, k[16..23].sort, k[24..31].sort] f = -1 if koma[0].count(GON) == 4 f = 0 # 香香香香 elsif koma[0].count(DAMA) >= 1 and koma[0].count(GON) >= 3 and koma[0].count(SHI) >= 1 f = 9 # 王香香香し elsif koma[0].count(DAMA) == 2 if koma[0].count(HISHA) == 2 f = 1 # 王王飛飛 elsif koma[0].count(KAKU) == 2 f = 2 # 王王角角 elsif koma[0].count(KIN) == 4 f = 3 # 王王金金金金 elsif koma[0].count(GIN) == 4 f = 4 # 王王銀銀銀銀 elsif koma[0].count(BAKKO) == 4 f = 5 # 王王馬馬馬馬 elsif koma[0].count(KIN) == 3 and koma[0].count(GON) >= 1 and koma[0].count(SHI) >= 1 f = 6 # 王王金金金香し elsif koma[0].count(GIN) == 3 and koma[0].count(GON) >= 1 and koma[0].count(SHI) >= 1 f = 7 # 王王銀銀銀香し elsif koma[0].count(BAKKO) == 3 and koma[0].count(GON) >= 1 and koma[0].count(SHI) >= 1 f = 8 # 王王馬馬馬香し end end (0..3).each do |i| if koma[i].count(DAMA) >= 1 and koma[i].count(GON) == 4 and koma[i].count(SHI) >= 1 f = 10; break # 王香香香香し elsif koma[i].count(DAMA) == 2 and koma[i].count(GON) >= 1 and koma[i].count(SHI) >= 1 if koma[i].count(HISHA) == 2 f = 11; break # 王王飛飛香し elsif koma[i].count(KAKU) == 2 f = 12; break # 王王角角香し elsif koma[i].count(GON) >= 3 and koma[i].count(SHI) >= 2 f = 13; break # 王王香香香しし elsif koma[i].count(KIN) == 4 f = 14; break # 王王金金金金香し elsif koma[i].count(GIN) == 4 f = 15; break # 王王銀銀銀銀香し elsif koma[i].count(BAKKO) == 4 f = 16; break # 王王馬馬馬馬香し end end end (0..3).each do |i| shi = koma[i].count(SHI) if shi == 8 f = 17; break # 8し elsif shi == 7 f = 18; break # 7し elsif shi == 6 f = 19; break # 6し elsif shi == 5 and koma[(i+2)%4].count(SHI) == 5 f = 20; break # 5しダブル end end count[f] += 1 if f >= 0 n += 1 if n%100000 == 0 p count p n p count.inject(:+) printf("%.5f%%\n\n", count.inject(:+)*100.0/n) end end
自力勝利不能な持ち駒
必勝パターンがあればその反対もある。対面の相方が勝ってくれない限り勝つことができないそんな持ち駒のパターンも計算してみます。
手番 | 持ち駒 | 回数 | 確率 |
---|---|---|---|
any | 飛飛角角金金金金 | 7回 | 0.00007% |
any | 飛飛角角銀銀銀銀 | 5回 | 0.00005% |
any | 飛飛角角馬馬馬馬 | 3回 | 0.00003% |
any | 金金金金銀銀銀銀 | 4回 | 0.00004% |
any | 金金金金馬馬馬馬 | 3回 | 0.00003% |
any | 銀銀銀銀馬馬馬馬 | 2回 | 0.00002% |
子のみ | 飛飛角角香香香香 | 4回 | 0.00004% |
子のみ | 金金金金香香香香 | 1回 | 0.00001% |
子のみ | 銀銀銀銀香香香香 | 2回 | 0.00002% |
子のみ | 馬馬馬馬香香香香 | 2回 | 0.00002% |
合計 | 33回 | 0.00033% |
必勝っぽくてもそうではない
手番 | 持ち駒 | 回数 | 確率 |
---|---|---|---|
親のみ | 王飛飛角角香し☗ | 1,269回 | 0.01% |
親のみ | 王金金金金香し☗ | 1,270回 | 0.01% |
親のみ | 王銀銀銀銀香し☗ | 1,367回 | 0.01% |
親のみ | 王馬馬馬馬香し☗ | 1,335回 | 0.01% |
更新履歴
- 2015/2/8 初出
- 2015/2/21 自力勝利不能な持ち駒を追記
- 2015/2/25 必勝のパターンを追加(3%→4.26%)