最初のシードを指定して、決定論的な(つまり繰り返し可能な)疑似乱数のシーケンスを生成し、そのシーケンスからn番目の項目を選択する必要があります。
JavaScriptのランダム関数がシード可能である場合、私は次のことを行うことができます。
function randomNth(seed, seq)
{
var r;
Math.randomSeed(seed);
for (var i = 0; i++ < seq; i++)
{
r = Math.random();
}
return r;
}
ただし、そうではなく、代替のシード可能なPRNGは少し遅いように見えます。250番目の番号を要求すると高額になります。
ハッシュは私がここで欲しいものだと思います。おそらく次のようなものですmd5(seed + seq) % max
が、JavaScriptにはmd5()がなく、コードでそれを行う場合は、おそらくハッシュのより良い選択があります。
ここで関数が欲しいのですが
x = randomNth(seed, seq, maxVal) // x is int && x >= 0 && x < maxVal
または、理想的には
x = randomNth(seed, seq) // x >= 0 && x < 1, same as Math.random()
その他の要件:
- node.jsとブラウザで実行する必要があります
- 数値は統計的にランダムである必要があります(または期間が短くなるため、十分に近い)
- O(1)であり、適度にパフォーマンスが高い必要があります