Unbias a random generator: Difference between revisions

Content added Content deleted
(Added Kotlin)
Line 1,081: Line 1,081:
template newSeqWith(len: int, init: expr): expr =
template newSeqWith(len: int, init: expr): expr =
var result {.gensym.} = newSeq[type(init)](len)
var result {.gensym.} = newSeq[type(init)](len)
for i in 0 .. <len:
for i in 0..<len:
result[i] = init
result[i] = init
result


proc randN(n): (proc: range[0..1]) =
proc randN(n): (proc: range[0..1]) =
result = proc(): range[0..1] =
proc: range[0..1] = ord(random(n) == 0)
if random(n) == 0: 1 else: 0


proc unbiased(biased): range[0..1] =
proc unbiased(biased): range[0..1] =
var (this, that) = (biased(), biased())
result = biased()
while this == that:
var that = biased()
while result == that:
this = biased()
result = biased()
that = biased()
that = biased()
return this


for n in 3..6:
for n in 3..6: