tomohxxの日記

麻雀プログラミング

多面待ちの解析(固有形理論)

はじめに

この記事では多面待ちと密接な関係がある固有形理論について解説します。本来なら和了確率の記事と同様に数式を使って厳密に議論したいのですが、数式は登場させずに、固有形とは何か、多面待ちにはどのような種類があるのかについて考えます。このような形式にしたのは厳密に議論しようとするとどうしても内容が抽象的になってしまうからです。そのため論理展開は厳密さを欠きますが、固有形理論の旨みが十分に伝わる内容にしたいと思います。また、この記事では全ての待ちを掲載したExcelファイルを配布します。これらのファイルを見れば多面待ちの全貌を知ることができます。

Dropbox - 待ち一覧.xlsx - Simplify your life
Dropbox - 一体型基本形一覧.xlsx - Simplify your life
Dropbox - 雀頭固定型基本形一覧.xlsx - Simplify your life
Dropbox - シャボ型基本形一覧.xlsx - Simplify your life

多面待ちと固有形

固有形理論の目的は多面待ちの全パターンを明らかにすることです。ここでは多面待ちを次のように定義します。

  • 多面待ち:3面以上の待ちがあるテンパイ形

実は多面待ちという用語の使われ方は人によってかなり異なります。そのためこの用語の定義を簡単なものに留めました。多面待ちを解析するため「固有形」という概念を導入します。

  • 固有形:全ての牌が待ちに関係しているテンパイ形

ここで抑えておきたいのは「多面待ち≠固有形」ということです。例えば以下のテンパイ形(固有形)は多面待ちと呼べるでしょうか?

  • 1122233444455m:1m3m(4枚)待ち
  • 1345677788899m:1m2m(7枚)待ち

これを多面待ちと呼ぶのはふさわしくないように思えます(多面待ちという用語はそれがあると嬉しいという文脈で用いられることが多いので)。しかし、以下のように固有形が同時に多面待ちであることが多いのは事実です。

  • 1113455556678m:234679m(19枚待ち)
  • 2344455566678m:1245689m(17枚待ち)

よって固有形を調べることが多面待ちを明らかにすることにつながります。

固有形の一覧

固有形はテンパイ形であるので、固有形を求めるにはテンパイ形から条件を満たすものを選別すればよいです。この作業をプログラムで行います。しかし、前節の固有形の定義ではコードに落とし込むのに不十分です。そこで以下のように定義を改良します。

  • 固有形:待ち牌を生成する全ての手牌分解パターンにおいて、固定された面子が存在しない

例えば次の手牌は固有形であるための条件を満たしますが、本当にそうなのか確認してみましょう。

  • 2345677888:14679(16枚)待ち
    • [234][567][78][88]→69リャンメン待ち
    • [234][567][7][888]→7タンキ待ち
    • [234][56][77][888]→47リャンメン待ち
    • [23][456][77][888]→14リャンメン待ち
  • 3455566677:23567(11枚)待ち
    • [345][55][666][77]→57シャボ待ち
    • [345][567][567][6]→6タンキ待ち
    • [34][555][666][77]→25リャンメン待ち

確かに常に固定される面子がないことがわかりました。一方、以下の手牌は多面待ちではあるが固有形ではない手牌の例です。

  • 3455677888:4679(12枚)待ち
    • [345][567][78][88]→69リャンメン待ち
    • [345][567][7][888]→7タンキ待ち
    • [345][56][77][888]→47リャンメン待ち
  • 3334455667:24578(15枚)待ち
    • [333][456][456][7]→7タンキ待ち
    • [33][345][456][67]→58リャンメン待ち
    • [33][34][456][567]→25リャンメン待ち

この定義に基づく固有形の一覧を以下のExcelファイルにまとめました。

Dropbox - 待ち一覧.xlsx - Simplify your life

基本形の一覧

例えば2345と3456のように牌の数字が1ずつずれた(平行移動した)形同士は同一の待ち型とみなすのが普通です。また3334567と2345666のように5を中心に反転させた形同士も同様です。そのため多面待ちを把握する上で固有形一覧を「平行移動」と「反転」に関して整理すると便利です。

しかし、これだけでは不十分です。固有形の一覧表を眺めると、固有形には3パターン存在することがわかります。

  • 雀頭固定型:全ての待ちに対して雀頭が固定される形。雀頭とそれ以外の部分に分けられる。例:23456m11p(147m待ち)
  • シャボ型:シャボ待ちを介して多面待ちとなる形。2つの部分に分けられる。例:11123m22p(14m2p待ち)、11m11222333p(1m14p待ち)
  • 一体型:上述の2パターンと異なり、2つの部分に分けられない形。例:2333456m(1247m待ち)、2333344556m(12457m待ち)

まず雀頭固定形に対しては、雀頭以外の部分の平行移動と反転を考え、同じ型のものを同一視するべきです。次のシャボ型に対しては、2つの部分のそれぞれの平行移動と反転を考え、それぞれ同じ型のものを同一視するべきです。

このように、3パターンの固有形に対して平行移動と反転で同じになる形をまとめます。各グループの代表を適当に選び、これらを「基本形」と呼びます。ここで注意するべきなのは、基本形の選び方は任意であるが、その数は選び方に対して不変であるということです。以下がこれまでの議論の成果である基本形の一覧です。

Dropbox - 一体型基本形一覧.xlsx - Simplify your life
Dropbox - 雀頭固定型基本形一覧.xlsx - Simplify your life
Dropbox - シャボ型基本形一覧.xlsx - Simplify your life

このファイルの使い方を説明します。まず「一体型基本形一覧.xlsx」について、このファイルの各手牌に適当な平行移動と反転を行うと、任意の一体型の固有形を生成できます。次に「雀頭固定型基本形一覧.xlsx」についてです。各手牌に適当な平行移動と反転を行い、適当な雀頭を加えることで任意の雀頭固定型の固有形を生成できます。最後に「シャボ型基本形一覧.xlsx」についてです。適当なシャボ型基本形を2つ選び、適当な平行移動と反転を行った後合わせることで任意のシャボ型の固有形を生成することができます。

また、互いに平行移動と反転の関係にない固有形の数を求めることができます。

  • 1枚固有形:1種
    • 一体型:1種
    • 雀頭固定型:なし
    • シャボ型:なし
  • 4枚固有形:7種
    • 一体型:3種
    • 雀頭固定型:2種(2枚)
    • シャボ型:1種(2枚)×1種(2枚)=1種
  • 7枚固有形:19種
    • 一体型:17種
    • 雀頭固定型:1種(5枚)
    • シャボ型:1種(2枚)×1種(5枚)=1種
  • 10枚固有形:68種
    • 一体型:63種
    • 雀頭固定型:なし
    • シャボ型:1種(2枚)×4種(8枚)+1種(5枚)×1種(5枚)=5種
  • 13枚固有形:160種
    • 一体型:153種
    • 雀頭固定型:なし
    • シャボ型:1種(2枚)×3種(11枚)+1種(5枚)×4種(8枚)=7種

(おまけ)

  • 16枚固有形:281種
    • 一体型:262種
    • 雀頭固定型:なし
    • シャボ型:1種(2枚)×3種(14枚)+1種(5枚)×3種(11枚)+4H2(8枚)=16種

以上をまとめると、基本形は全ての固有形ひいてはテンパイ形を生成する元であり、これらを把握することがあらゆる待ちを把握することにつながると言えます。

おわりに

この記事では多面待ちを把握するために、固有形と基本形の概念を説明し、その成果としてそれぞれ一覧表を示しました。「一覧表を出すだけではなくて、待ちの見抜き方も示すべきだ」と思う読者もいるとは思いますが、残念ながらそれはできていません。それは一切の例外もなく全ての基本形の待ちを見抜く方法がわからないためです。

固有形一覧と基本形一覧をプログラムによって求めるためには、より厳密な定義が必要です。今後これらについての記事が書けたらと思います。