moriyaTweetなぜ、マージャンの点数計算を題材として選んだか・・・ややこしいからだ。好きな言語を使って考えてみればよいと思う。普及が目的なので、マージャンの点数計算に絞りたいと思う。目的/目標を明確にすることは重要だと思う。ないと、終わりが見えない。マージャンを知らない人が読むと素通りされそうなので、ルール等をおおざっぱに説明しておく。4人で行うゲームで、マンズ1-9(1萬-9萬)/ピンズ1-9(1筒-9筒)/ソーズ1-9(1索-9索)/東南西北白發中それぞれ4枚ずつの牌を使う。牌が13枚配られ、毎回1枚ずつ引く(ツモ)か、他の人が捨てた牌をもらって(チー/ポン/カン)いき、役が完成したら上がって点がもらえる。計算式や、役のとおりだ。おおむね役で決まる(それに応じて符は自動的に決まるので)のだが、例えば、「1萬1萬1萬2萬2萬2萬3萬3萬3萬」は、「1萬2萬3萬/1萬2萬3萬/1萬2萬3萬」とも「1萬1萬1萬/2萬2萬2萬/3萬3萬3萬」とも解釈できるため複雑そうだ。役も沢山あるので、組み合わせも多そうだ。順番に並べかえたり、牌の種別を調べたりすることが必要そうに思えるが、まずは、牌のデータの持ち方を決めることにしたい。萬筒索字牌の種類で並びかえ、数字の小さいものから順に並べることが多いので、萬1、萬2、東、南、西などの文字列でデータを表してみることにしたい。チー、カン(明槓-他人の捨てた牌で4枚の組にする、暗槓-自分がツモった牌で4枚の組にする)、など、役数にも影響するので、これらも識別する必要がありそうだ。同じ牌4個の牌の組]とし、「牌の組」には、他からもらったものか(鳴いた)ものかどうか区別できるような構造にしてみようかと思う。...]に展開するかして、役に一致するかを判定すればよいのではなかろうか。