RosettaCodeData/Task/Knuths-algorithm-S/Phix/knuths-algorithm-s-1.phix
2026-02-01 16:33:20 -08:00

46 lines
1 KiB
Text

with javascript_semantics
enum RID, I, SAMPLE
function s_of_n(sequence env, integer item)
integer i = env[I] + 1,
n = length(env[SAMPLE])
env = deep_copy(env)
env[I] = i
if i<=n then
env[SAMPLE][i] = item
elsif n/i>rnd() then
env[SAMPLE][rand(n)] = item
end if
return env
end function
function s_of_n_creator(int n)
return {s_of_n,0,repeat(0,n)}
end function
function invoke(sequence env, args)
env = call_func(env[RID],prepend(deep_copy(args),env))
return env
end function
function test(integer n, sequence items)
sequence env = s_of_n_creator(n)
for item in items do
-- env = s_of_n(env,item)
env = invoke(env,{item})
end for
return env[SAMPLE]
end function
procedure main()
sequence items_set = tagset(9,0)
sequence 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()