Subtractive generator

class SubRandom(seed, state=[]) {

    const mod = 1_000_000_000

    method init {
        var s = [seed % mod, 1]
        53.times {
            s.append((s[-2] - s[-1]) % mod)
        }
        state = s.range.map {|i| s[(34 + 34*i) % 55] }
        165.times { self.subrand }
    }

    method subrand {
        var x = ((state.shift - state[-24]) % mod)
        state.append(x)
        return x
    }
}

var r = SubRandom(292929)
10.times { say r.subrand }

Output:

467478574
512932792
539453717
20349702
615542081
378707948
933204586
824858649
506003769
380969305