std.randomをインポートして使います. 乱数生成っていろいろあるんですね.
#普通にランダムを使う
実行環境における "デフォルトの", "好ましい", "お勧めの" 乱数生成器です. (1) なにかしら良い乱数生成器が必要で,しかも (2) 細かい実装方式は特に気にしない,という場合はこの型を使うと良いでしょう.(公式サイトより)
import std.stdio, std.random;
void main()
{
//upredictableSeedによって実行するごとに異なる乱数列を生成できる
auto rnd = Random(unpredictableSeed);
//0から99の整数値をうち一つを出力
writeln(uniform(0, 100, rnd));
//0から100の整数値をうち一つを出力
writeln(uniform!"[]"(0, 100, rnd));
//0から100のうち実数を一つ出力
writeln(uniform(0.0L,100.0L,rnd));
}
#配列をシャッフルする
import std.stdio, std.random;
void main()
{
int[] i = [0,1,2,3,4,5,6,7,8,9];
//upredictableSeedによって実行するごとに異なる乱数列を生成できる
auto rnd = Random(unpredictableSeed);
randomShuffle(i, rnd);
writeln(i); //[9, 0, 8, 6, 4, 2, 5, 3, 1, 7] (一例)
//二次元配列でも可能です
int[][] j = [[0,1],[2,3],[4,5],[6,7],[8,9]];
randomShuffle(j, rnd);
writeln(j); //[[4, 5], [6, 7], [2, 3], [0, 1], [8, 9]] (一例)
}
#非等確率で乱数を生成
dice(a,b,c)で0をa割,1,をb割,2をc割の確率で出るようにします(引数の個数は自由)
import std.stdio, std.random;
void main()
{
foreach(int i; 0..10)
writeln(dice(5,3,2));
}
#配列の要素を一個ずつ出力
import std.stdio, std.random;
void main()
{
int[] a = [ 0, 1, 2, 3, 4, 5, 6, 7, 8 ];
auto rnd = Random(unpredictableSeed);
foreach (e; randomCover(a, rnd))
{
writeln(e); //6 1 4 8 3 5 0 7の順で出力(一例)
}
writeln("");
//もう一回やるときは更新
rnd = Random(unpredictableSeed);
foreach (e; randomCover(a, rnd))
{
writeln(e);
}
}
#配列からn個の要素を取り出す
randomSampleを使います
import std.stdio, std.random;
void main()
{
int[] a = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ];
writeln(randomSample(a, 5)); //[1, 4, 5, 7 , 8] (一例)
}