4面子1雀頭形の向聴数(シャンテン数)計算は 向聴数を求めるプログラム - koba::blog で取り上げているけれど、もう一度おさらい。
基本は
- 向聴数 = 8 ー 面子の数 × 2 ー 搭子の数
でよいのだが、考慮すべきことがいくつかある。
搭子過多の場合
この牌姿は6ブロック形の搭子過多*1のケース。2面子4搭子あるので公式に当てはめるとこれも聴牌なのだが、実際には雀頭をのぞくと面子+搭子は4つまでしか使えないため、この分を補正して1向聴とする必要がある。
搭子不足の場合
以前も出した例。この牌姿の場合、 を雀頭としてのぞいて
、
の2面子(搭子なし)とすれば3向聴だが、実際には
の1面子だけとって
、
、
の3搭子を残せば2向聴と計算できる。つまり、面子をとれるだけとってはダメで、場合によっては搭子を多く残す必要もあるということ。
面子のとり方
面子のとり方もいろいろとややこしい。
の場合、
、
の2面子に分けるのが正解だが、
の順子を先にとってしまうと
、
が残ってしまう。
刻子を先にとればいいかというと、そういう訳でもなく から
を先にとると
、
の2搭子が残るが、この場合は
、
の2面子をとって
を孤立牌として残すのが正解。
では先頭から貪欲にとれるものをとっていけばいいのかというとそれも違い、 の先頭から
をとると
、
が残るが、もちろんこの場合は
、
の2面子をとって
を残さなければならない。
結局バックトラックを用いないうまい方法はなく、正直に
- 面子を(敢えて)とらない
- 順子として面子をとる
- 刻子として面子をとる
の3パターンについてバックトラックを使ってすべて試し、最適なものを選ぶしかない。
考慮すべきことはこんなところだけれど、長くなってしまったので実際のプログラムは次回に。
*1:一般的には面子オーバーと言うかな