33 lines
550 B
Julia
33 lines
550 B
Julia
|
|
function solution(V, p)
|
|
l = length(V)
|
|
n = factorial(l)
|
|
if p > n
|
|
print("p too large")
|
|
return
|
|
end
|
|
sort!(V)
|
|
|
|
m = n
|
|
r = p
|
|
vals = zeros(Int, l-1)
|
|
for i ∈ 0:(l-2)
|
|
m = div(m, l-i)
|
|
vals[i+1] = cld(r, m)
|
|
r = mod(r-1, m)+1
|
|
end
|
|
sol = zeros(Int, l)
|
|
V = copy(V)
|
|
for i ∈ 1:(l-1)
|
|
sol[i] = popat!(V, vals[i])
|
|
end
|
|
sol[l] = pop!(V)
|
|
return sol
|
|
end
|
|
|
|
function printsols(V)
|
|
for i ∈ 1:factorial(length(V))
|
|
println(solution(V, i))
|
|
end
|
|
end
|