ギャンブラーの誤fallは認知バイアスであり、しばしば発生したことが将来発生する可能性が低く、しばらく発生しなかったものはすぐに発生する可能性が高いと誤って予想します。あなたの仕事は、これの特定のバージョンを実装することです。
チャレンジの説明
1から6までのランダムな整数を返す関数を作成します。キャッチ:関数が最初に実行されるとき、結果は均一(1%以内)である必要がありますが、以降の各呼び出しは、以前にロールされた回数が少ない値を優先してスキューされます。具体的な詳細は次のとおりです。
- ダイは、これまでに生成された数のカウントを記憶しています。
- 各結果は次の式で重み付けされます:
- たとえば、これまでのロールカウントが 1、0、3、2、1、0場合、重みは 3、4、1、2、3、4になります。つまり、よりを振る可能性が4倍高い。
- 式は、ロール結果がと同じように重み付けされることを意味することに注意してください。
ルールと仮定
- 標準I / Oルールと禁止された抜け穴が適用されます
- ダイスロールは確定的であってはなりません。(つまり、通常は組み込みとして使用できるように、揮発性ソースからシードされたPRNGを使用します。)
- ランダムソースは、少なくとも65535の期間を持っているか、真のランダムでなければなりません。
- 最大255の重みの分布は1%以内でなければなりません
- 16ビットRNGは、上記の両方の要件を満たすのに十分です。ほとんどの組み込みRNGで十分です。
- コールによって分布が変更されるか、ポストロール分布がダイスロールと一緒に返される限り、現在の分布を渡すことができます。配布/カウントの更新は、この課題の一部です。
- カウントの代わりに重みを使用できます。これを行うと、重みが0に低下するたびに、すべての重みが1増加して、カウントの保存と同じ効果が得られます。
- これらの重みを配列内の要素の繰り返しとして使用できます。
がんばろう。バイトがあなたに有利になるように。