コクのある乱数についての続きの記事です!
こちらの記事では、乱数をひたすら生成し集計して表示するというプログラムを作り、通常の乱数とコクのある乱数が実際どう違うかを自分なりに検証してみました。
Random rnd = new Random();
int rNum = ( rnd.Next(0,10) + rnd.Next(0,10) + rnd.Next(0,10)
+ rnd.Next(0,10) + rnd.Next(0,10) ) / 5
というものでした。5回乱数作って5で割る!
前回のプログラムには多少のミスもあったんですが、まぁやること自体に意義があったのでやってみてよかったです。
今回はその後日談というわけではないですが、そのプログラムを改良、拡張したので今一度コクのある乱数、というものについて考えてみたいと思います。
改良した乱数集計プログラムについて
拡張した内容は、ふたつのListとそれぞれの処理です。
・numAppearPoints
各々の数字(0から9まで)を抜き出した後、新たに元の集計のListから、その数字が全体のどの場所で出たか?というインデックスを集計する。
・pointIntervals
numAppearPointsから、その間隔、インターヴァルを計算して結果を集計するためのListです。
最終的に三つの集計結果を各数字ごとに表示します。
拡張されたコード
さっそくコードをみてみます。いつもは125%で表示しているので小さくて見づらいですね。
長いし、かなり見づらいですね、申し訳ない。
プログラムの流れをまとめると、
・モードを選択する。(通常かコクのあるモードか)
・キー押しっぱなしで乱数をドンドン作る。カウント、集計もする。
・集計された乱数を数字ごとに分類する。
・各数字がどんな間隔で出てくるかを調べる。(追加した機能)
・結果を表示する。
って感じです。
for文の中でfor文を二回使い、それぞれの集計をしています。いわゆるoff by oneエラーに苦しめられました。人間とコンピュータとの数の数え方の違いですね。
じゃあプログラム起動します。
ここは同じです。
まずは通常モードで。
Cキー以外のキーを押し続ければ、乱数がひたすら生成されていきます。
これも同じです。
Cキーを押して結果を表示します。試行数は1000回を目安にしています。
ここはだいぶ変わりました。黄色くなっているのは単に見やすくするためだけです。
やはり全体的に散らばっていますね。インターバルは50回を超えることはほとんどないみたいですね。散らばってはいるが極端な間隔にはならない、という感じでしょうか。
それでは、コクのある乱数を見てみましょう!
再度、考察。
やはり偏ってますね、何度みてもおもしろい!
4を中心にそこから離れるほどに、生成数も減るし
インターヴァルも極端になっていく、という傾向が見てとれますね!
これをUnityでのゲーム制作にどう活かせるか?というのは
まだ具体的なことは浮かんできませんが、何かしら役に立ってくれるだろうと思います。こっから更にもう一工夫必要かなぁ?
というわけでプログラムの改良とコクのある乱数についての再考察でした!!