シャンテン数計算
入力形式
1行目にテストケースの数Tが与えられる。
2行目からT+1行目までのT行、手牌が以下の形式で与えられる。
t_1 t_2 ... t_14
ただし、t_iは0以上33以下の整数で、0~8が1m~9m、9~17が1p~9p、18~27が1s~9s、28~33が東~中を表す。
出力形式
T行出力せよ。
i行目にi番目のテストケースの
通常シャンテン数 国士シャンテン数 七対子シャンテン数
をスペース区切りで出力せよ。
(性能測定をする場合は、全てのテストケースの3つのシャンテン数の和を出力せよ。オーバーフローしても良い)
サンプル
参考になるかもしれないもの
ここhttp://mahjong.ara3.net/etc/shanten/index.htmにアルゴリズムの詳しい解説がある。
あらさんとおそらくほぼ同じ実装をしていると思われるC++コードが以下。
https://gist.github.com/wistery-k/4723644
shanten.txtは以下。
https://gist.github.com/wistery-k/4723683/raw/77eb86d92576110d8f582ff85385e9d6e0d2bffc/shanten.txt
wistery_kがいくつかの高速化をしたC++コードが以下。一応のたたき台という事で。
https://gist.github.com/wistery-k/4723695/raw/573e7f62c9d4e597787a84c282396eddbe6da330/sample%20code%202
shanten2.txtは以下。
https://gist.github.com/wistery-k/4723724/raw/e314b7312b5132f2afd013838273f042554325f1/shanten2.txt
- http://d.hatena.ne.jp/t_takasaka/20130113/1358100749
- http://d.hatena.ne.jp/majiang/20130112/1358000813
に色々役に立ちそうなことが書いてある。