RosettaCodeData/Task/Knuths-algorithm-S/Phix/knuths-algorithm-s-3.phix
2026-04-30 12:34:36 -04:00

38 lines
928 B
Text

with javascript_semantics
function s_of_n(integer i, sequence samples, integer item)
samples = deep_copy(samples)
integer n = length(samples)
i += 1
if i<=n then
samples[i] = item
elsif n/i>rnd() then
samples[rand(n)] = item
end if
return {{i,samples},samples}
end function
function s_of_n_creator(integer n)
return define_lambda(s_of_n,{0,repeat(0,n)},true)
end function
function test(integer n, sequence items)
lambda l = s_of_n_creator(n)
sequence samples
for item in items do
samples = call_lambda(l,item)
end for
return samples
end function
procedure main()
sequence items_set = tagset(9,0),
frequencies = repeat(0,length(items_set))
for i=1 to 100000 do
sequence res = test(3, items_set)
for fdx in res do
frequencies[fdx+1] += 1
end for
end for
?frequencies
end procedure
main()