簡単に先日のシミュレーションのソースコード解説のメモを。デバッグ用コードのコメントアウトは消しています。定数宣言まずは、定数代わりにクラスを宣言しています。デバッグ時に文字列表示したくなったからです。遅くなりましたが、まぁコーヒー飲んでれば終わる次元なので問題なし。関数を作って、プログラム末尾から呼ぶ形にするのが好きです。main山を作る山を作ります。牌種に応じた枚数の配列を作り、連結していきます。牌をケースから取り出してるイメージですね。カウンタを0に初期化します。0シミュレーションシミュレーション回数分のループを回します。山をシャッフルして、8枚ずつ取り出します。1枚ずつ配らなくて良いの?と思われるかもしれませんが、シャッフルが公正なら連続して8枚とっても確率での差は生まれないので8枚連続して配っています。yama[24,8]「香」周りのカウントまずは、「香」についてが分かりやすいので順番を元のソースと入れ替えて先に説明します。「香」だけは自分の積もる確率が知りたかったので、一人分の手牌だけを調べています。なる個数を返してくれます。クラスの個数、すなわち、手牌に「香」のある個数を調べているわけです。GON}後は、「香」の枚数毎にカウンタを加算するのみです。1end「王」のダマダマのカウント次に、「王」のダマダマを調べるコードです。四人の手牌に含まれる王の枚数をカウントし、それぞれについて「王」が2枚あれば、ダマダマカウンタを1増やしています。枚数の数え方は「香」と同一。山に「王」は2枚しか無いことが保証されているので重複の確認などは省いています。2end「し」周りのカウントつぎに「し」についてカウントしています。「5し5し」を調べるためにペアを組ませて、そのそれぞれに対してカウントする必要があります。そのために配列の配列を作っています。本来のルールではペアは対角で組みますが、ペアの組み方さえ変わらなければシミュレーション上の差は生まれないため、ここでは可読性を優先。配列の配列のそれぞれをループして調べる際に、次のような書き方で配列の展開が出来ます。配列の2番目が代入されます。shi_count2|後は、ペアのプレイヤー毎に「し」の枚数を調べるだけです。「5し5し」のチェックだけ例外処理が入っています。ときのみ、「5し5し」のカウンタを、そうでない単なる「5し」の場合には「5し」のカウンタを加算しています。「6し」「7し」「8し」は重複することがあり得ないため、こちらの例外処理は省いています。1endendend結果出力さて、以上でシミュレーションが終わったので、後は結果を出力するだけです。それぞれの発生回数と、発生確率を計算しているだけですね。関数内に処理を書くスタイルが好きです。main以上がソースコードの概略です。プログラミング分かる人向けの説明しか書けません。