LoginSignup
0
1

More than 3 years have passed since last update.

麻雀のシャンテン数を求める

Last updated at Posted at 2020-11-06

2020/11/09 追記

以下の場合に、失敗する。。

11112222456789
「111」「222」「456」「789」「12」
1,2どちらを切っても「3」待ちになる。
(0シャンテン)

22223333789東東東
「222」「333」「789」「東東東」「23」
2,3,東のどれを切っても「1」,「4」待ちになる。
(0シャンテン)

これは特別ルール(2)で正しいシャンテン数とならない。 (11/10再 <- 嘘。。正しいシャンテン数となる。少し冷静になろう。。)


シャンテン数を求めるプログラムを作成する際に、つまづいたところが合ったので備忘録として。

シャンテン数は8点ルールというものをベースに求めました。

(参考)
「Mリーグ成績速報(非公式)」さま
手牌の向聴(シャンテン)数の数え方
https://note.com/mleague_results/n/nfe3e0e8774db

メンツを2点、対子、ターツを1点として抜き出し、(8ー合計の点数)=シャンテン数とするものです。(0がテンパイ、-1が上がりとなる)

こちらのルールだけだと簡単なのですが、以下の特別な対応が必要になります。
◆8点ルールの特別ルール
(1)抜き出せるブロックは最大5つまで。抜き出す優先順位は面子→対子→ターツ の順番
(2)5ブロックちょうどを抜き出して雀頭がない場合は1点減点

面倒なのが、(2)のケースです。
以下の手牌とツモ牌があった場合について考えます。

【東東東東111145678】 ツモ:9
(メンツに分解したもの「東東東」「111」「456」「789」「東」「1」)

8点ルールにしたがって考えると、メンツ4個と孤立牌2個で8点となり、0シャンテン=テンパイとなります。
しかしながら、「東」「1」どちらを切っても待ち牌になる「1」「東」は自身で4枚使い切っているため、テンパイとなりません。この場合は1シャンテンが正解です。
(※4枚使い切っている牌での待ちをテンパイ形とみなすルールもあるらしいです)

ちなみにツモ牌がない場合
【東東東東111145678】
(メンツとターツに分解したもの「東東東」「111」「456」「78」「東」「1」)

この場合も8点ルールにしたがって考えると、メンツ3個とターツ1個で7点となり1シャンテンとなりますが、実際には2シャンテンです。

この5枚目の待ち問題に対応するために、次の特別ルールを加えました。

(3)対子(雀頭)がないが(2)が適用されない場合、メンツ、対子、ターツを抜き出したあとの孤立牌の数を数える(r枚)。この孤立牌が元々4枚持っていた牌と一致する数を数える(k枚)。(r=k)のとき1点減点

(2)が元々、雀頭不足に対するものですが、さらに拡張した感じです。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1