タグ

プログラミングとアルゴリズムに関するkarmenのブックマーク (3)

  • 麻雀 和了判定(役の判定)アルゴリズム

    麻雀 和了判定(役の判定) アルゴリズム 最終更新日:2008/4/9 麻雀の和了判定を高速に行う方法について説明する。 和了の判定は通常バックトラック法を用いて行うが、バックトラック法は面子候補の組み合わせを総当たりで調べるため、処理に時間がかかるという問題がある。 1回実行するだけの場合は処理時間が問題になることはないが、思考ルーチンなどで繰り返し判定処理を行うような場合に、高速に処理できることが要求される。この記事では、そのような場合にインデックスを用いると高速に判定を行えること説明する。 まず、通常法方法を説明した後、インデックスを用いた方法を紹介する。 通常の方法(バックトラック法) 手牌を1つの雀頭と4つの面子に分けることができれば和了の形となる。(七対子と国士無双は例外) 雀頭と4つの面子を構成する牌が重ならない場合は、どのような順番で取り出しても判定することができる。しかし

    karmen
    karmen 2015/09/11
    役判定の前に先ず上がり判定がある。簡単なことからコツコツ積み上げたい。これも意外と面倒。
  • 第10回 麻雀の役を判定する:ITpro

    図1に示す(1)から(3)までの麻雀(マージャン)の手牌があります。「あがり牌」はすべて山からツモったものとし,リーチはかけていません。またドラやハイテイ*1なども関係ないものとします。これらの役を判定して,親の場合の点数を計算するプログラムを作ってください。 「ややこしや~ややこしや~」というのは野村萬斎ですが,思わずそううなってしまうことがプログラミングをしているとよくあります。今回の麻雀の役判定は,考えれば考えていくほどややこしく,そうしたものの代表と言えるでしょう。排他処理や優先順位が複雑にからんでいて一筋縄ではいきません。 今回はややこしい組み合わせを解決する方法を考えてみます。麻雀になじみのない方も,ちょっとしたパズル気分で試してみてください。 麻雀の役を考える 麻雀を知らない方のためにルールをおおざっぱに説明しておきましょう*2。麻雀の牌には,大きく分けて「萬子(マンズ)」「

    第10回 麻雀の役を判定する:ITpro
    karmen
    karmen 2015/09/11
    麻雀の役判定ってプログラムでやると意外と面倒くさい。簡単な説明でも4ページあって全部網羅出来ていないって・・・。
  • 85DATA-ゼビウスを作る!

    karmen
    karmen 2013/08/08
    いにしえの軽量化テクニック
  • 1