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

29 lines
555 B
Text
Raw Permalink Normal View History

2020-02-17 23:21:07 -08:00
using Printf
2018-06-22 20:57:24 +00:00
function makesofn(n::Integer)
buf = Vector{typeof(n)}(0)
2015-11-18 06:14:39 +00:00
i = 0
2018-06-22 20:57:24 +00:00
return function sofn(item)
2015-11-18 06:14:39 +00:00
i += 1
2018-06-22 20:57:24 +00:00
if i ≤ n
2015-11-18 06:14:39 +00:00
push!(buf, item)
else
j = rand(1:i)
2018-06-22 20:57:24 +00:00
if j ≤ n buf[j] = item end
2015-11-18 06:14:39 +00:00
end
return buf
end
end
nhist = zeros(Int, 10)
2018-06-22 20:57:24 +00:00
for _ in 1:10^5
2015-11-18 06:14:39 +00:00
kas = makesofn(3)
2018-06-22 20:57:24 +00:00
for j in 0:8 kas(j) end
for k in kas(9) nhist[k+1] += 1 end
2015-11-18 06:14:39 +00:00
end
println("Simulating sof3(0:9) 100000 times:")
for (i, c) in enumerate(nhist)
2018-06-22 20:57:24 +00:00
@printf("%5d → %5d\n", i-1, c)
2015-11-18 06:14:39 +00:00
end