麻雀の あがり を調べるアルゴリズム


まず,麻雀の牌は次の34種類です。各牌は4枚ずつあります。
(牌の絵の提供:田中猛彦さん
数牌(シューパイ) 萬子(マンヅ)
筒子(ピンヅ)
索子(ソーヅ)
字牌(ツーパイ) 風牌(フォンパイ)
三元牌(サンゲンパイ)


麻雀で あがる には,自分の14枚の牌が以下のような組み合わせになっていることです。(例外もありますが,ここでは省略します。)
(1)同種の数牌で連番であるもの(順子[シュンツ]) 合わせて4組
(2)任意の同じ牌3つ(刻子[コーツ])
(3)任意の同じ牌2つ(雀頭[ジャントウ]) 1組
注:順子を作る場合,9と1はつながりません。


あがり の例をいくつか挙げます。

順子順子刻子順子雀頭

順子順子順子順子雀頭

刻子刻子刻子刻子雀頭


さて,このページを訪れた方で,プログラムに(ある程度)自信のある方には,次の問題をやってみていただきたいと思います。
萬子14枚の組み合わせが与えられたとき,それらが あがり の形になっているかを判定する。

字牌は刻子か雀頭にしかならないので判定は簡単です。しかし数牌は順子,刻子,雀頭のいずれにもなりえます。これが判定を難しくします。例えば


は,直感的には あがり の組み合わせは分かるかもしれません。(正解は[111][123][234][456][66]。)しかしコンピュータが判定するとなると難しいでしょう。


私はこの問題をすでに解決していますが,皆さんに挑戦していただくという意味もあり,ここには答えは掲げません。
この問題を解けたという方,あるいはどうしても答えを知りたいという方は,メール(main@hhiro.net)で連絡下さい。
(私の作ったプログラムはActiveBasicで書かれています。希望があれば,C か VisualBasic になら移植します。)


1つ前へ 豆記事トップへ ひとりごとトップへ Sinryow Game トップへ