RosettaCodeData/Task/Knuths-algorithm-S/Julia/knuths-algorithm-s.julia

29 lines
555 B
Plaintext

using Printf
function makesofn(n::Integer)
buf = Vector{typeof(n)}(0)
i = 0
return function sofn(item)
i += 1
if i ≤ n
push!(buf, item)
else
j = rand(1:i)
if j ≤ n buf[j] = item end
end
return buf
end
end
nhist = zeros(Int, 10)
for _ in 1:10^5
kas = makesofn(3)
for j in 0:8 kas(j) end
for k in kas(9) nhist[k+1] += 1 end
end
println("Simulating sof3(0:9) 100000 times:")
for (i, c) in enumerate(nhist)
@printf("%5d → %5d\n", i-1, c)
end