challenge シードを固定した乱数

シードを固定した疑似乱数を出力してください。
数回実行して、常に同じ結果が出力されることを確認してください。

Posted feedbacks - D

D 2.031で。 Mt19937インスタンスは一種の無限リストで、frontメソッドで先頭要素を読み出し (除去はしない)、popFrontで除去します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import std.random;

static const uint COUNT = 16;
static const uint SEED = 1337;
static const uint NUM_TRIALS = 42;

void main()
{
    uint[COUNT] randomNumbers;
    Mt19937 gen;        // 2^19937周期のMersenne Twister

    // シードを設定し、COUNT個の乱数を憶えておく
    gen.seed(SEED);
    foreach (i; 0 .. COUNT) {
        randomNumbers[i] = gen.front;
        gen.popFront;
    }

    foreach (i; 0 .. NUM_TRIALS) {
        // 同じシードを再設定し、出てくるCOUNT個の乱数が
        // 最初のと同じであることを確認
        gen.seed(SEED);
        foreach (j; 0 .. COUNT) {
            assert(randomNumbers[j] == gen.front);
            gen.popFront;
        }
    }
}

Index

Feed

Other

Link

Pathtraq

loading...