スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

麻雀全アガリ形

麻雀系統のプログラムを作っているんですけれど、ちょっとテストパターンとして全部の牌の組み合わせでのアガリ形を考えてみたわけですよ。136枚から14枚を選ぶんですけれどもちろん。

136×135×134×
133×132×131×
130×129×128×
127×126×125×
124×123

になるわけです。うちの電卓によると

4.631679119x10^31

と出ました。


で、まあ当然のようにそんなのはスパコンにおまかせってなっちゃうのでそうはいきません。
ここで大事なのは
1萬2萬3萬…というものと
3萬2萬1萬…というのは同じものだということです。順番はどうでもいいものですからね。
なので、
1萬から北まで順番に0~4枚入れた場合を14枚集まるまで再帰で回してみたわけですよ。時間かかるので索子と字牌だけで試してみて一先ずうまくいっているようなので全部の牌で実行させてからみたら一日ほっといても終わる気配が無い。なのでいったん止めて、どれだけ重くなるのか計算。索子から筒子を9筒だけ増やして時間がどれだけ変わるのか計算してみたら一つ増えるごとに2倍増えていました。索子と字牌だけで調べたら大体30秒程度かかっていたので
30秒x2^18ほどかかる予定。7864320秒です。そんなに大したことも無いように感じたかもしれませんが、

ほぼ三か月です。

これはまずいですね。という訳でいらない判定を削っていっています。今の所大きく軽減されたのは字牌の扱いですね。字牌には順子という扱いは無いので0~4枚追加して再帰というのはやめにして0,2,3枚という形でしか追加できません。実はこれで結構軽減されました。でもまた、随分と時間かかってるのでちょっとずつ改良の最中です。if文を最低にしつつどうにかしています。if判定ではなく関数ポインタでどうにかしたりとか。
関連記事

コメントの投稿

非公開コメント

プロフィール

masanotooru

Author:masanotooru
雪国で働くプログラマでしたが、会社を辞めて関西にいます。
プログラムの話もしますが漫画が好きなので漫画の話をします。
バイクを買ったので、そっちの話も増えました。
最近はUnityばかりなのでそっちメイン。

Google Adsense
検索フォーム
カテゴリ
最新コメント
メールフォーム

名前:
メール:
件名:
本文:

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。