【プログラム】乱数の数列

<はじめに>
例えば、下記のような0~6の7個の数
 [0 1 2 3 4 5 6]
を下記のようにランダムで並べることを考えたい。
 [2 3 5 0 6 4 1]
本記事では、備忘録としてその方法を記載します。

Javascriptのプログラムを作成するときに纏めたもののため、本記事も基本的にJavascriptの記述で記載する。
箇条書きで書いていますが、下の方にある図をメインで見てもらったほうがよいかもです。


<乱数の数列の作成方法>
※下記0~6の7個の数を例に記載。

① 一次元の配列に、並べる前の数を入れておく。(ここでは、変数名tempとする。)
例.
var temp = [0, 1, 2, 3, 4, 5, 6];

② ランダム関数で0~6の範囲で乱数(整数値)を取得する。(ここでは、変数名randとする。)

例.
rand = Math.floor(Math.random() * 7);
※Math.random()関数は、0以上1未満の範囲から乱数を返す関数
※Math.floor()関数は、小数点以下切り捨てする関数

③ ②で取得した乱数を最終出力の配列に入れる。(ここでは、変数名outとする。)

例.
out[0] = rand;

④ temp変数のrand番目に一番最後の要素を入れる。
  <本作業の目的>
  ③で取得済みの乱数は、次から考えないようにしたい。
  そのため、もともと要素数7の配列だったが、
  あたかも要素数6(③で取得した乱数以外)の配列かのように扱っていくようにする。

例.
temp[rand] = temp[6];
※temp.length-1が一番最後の要素を指す

⑤ ②を範囲を一つ小さくして、②~④を要素の数だけ繰り返し実施する。
  すなわち、0~5の範囲で乱数(整数値)を取得する。

例.
rand = Math.floor(Math.random() * 6);
out[1] = rand;
temp[rand] = temp[5];
rand = Math.floor(Math.random() * 5);
out[2] = rand;
temp[rand] = temp[4];
rand = Math.floor(Math.random() * 4);
out[3] = rand;
temp[rand] = temp[3];
 ︙
rand = Math.floor(Math.random() * 1);
out[6] = rand;
temp[rand] = temp[ ]; ←最後のステップ時は不要


<乱数の数列の作成方法の図>
f:id:lm4183:20210123234706p:plain