JavaScriptでのrandomに関するまとめ
TL;DR
JavaScriptのランダムは非常に使い勝手が悪いので選択肢とか、よく使う関数などのまとめです。
Randomの基礎
Math.random
とりあえず一番簡易的なのはMath.randomを使う手法です。この関数は[0, 1]の範囲の乱数を生成します。ただ、これはseed値を指定できないので嬉しくないです。
ちょっと便利にする関数
XorShift
seed値が使え、簡単で比較的良い乱数生成アルゴリズムとしてXorShiftがあります。
メルセンヌツイスタ
外部ライブラリのmt.jsを使えばメルセンヌツイスタも使えます。このような感じです。setSeedメソッドでseedの指定もできます。
配列のシャッフル
上のアルゴリズムを使えば、ただの乱数生成なら問題ないんですが、重複なく乱数生成したい、みたいなことがあります。その場合は単純に配列をシャッフルすればいいです。シャッフルにはFisher-Yates shuffleやDurstenfeldの手法などが使われるようです。Durstenfeldの手法のほうが高速らしいです。
randomはmaxだけ指定して持ってくる感じのものなら何でも使えるようにしました。簡易的には
でいいです。
Fisher-Yates shuffle
ダステンフィルドの手法
ほぼ同じですが、