Permutations/Derangements: Difference between revisions

Added Julia language
(→‎{{header|Kotlin}}: Updated example see https://github.com/dkandalov/rosettacode-kotlin for details)
(Added Julia language)
Line 1,690:
 
Computed approximation to !20 (15 significant digits): 895014631192902000</lang>
 
=={{header|Julia}}==
{{trams|Python}}
<lang julia># v0.6
 
using Combinatorics
 
derangements(n::Int) = (perm for perm in permutations(1:n)
if all(indx != p for (indx, p) in enumerate(perm)))
 
function subfact(n::Integer)::Integer
if n in (0, 2)
return 1
elseif n == 1
return 0
elseif 1 ≤ n ≤ 18
return round(Int, factorial(n) / e)
elseif n > 0
return (n - 1) * ( subfact(n - 1) + subfact(n - 2) )
else
error()
end
end
 
println("Derangements of [1, 2, 3, 4]")
for perm in derangements(4)
println(perm)
end
 
@printf("\n%5s%13s%13s\n", "n", "derangements", "!n")
for n in 1:10
ders = derangements(n)
subf = subfact(n)
@printf("%5i%13i%13i\n", n, length(collect(ders)), subf)
end
 
println("\n!20 = ", subfact(20))</lang>
 
{{out}}
<pre>Derangements of [1, 2, 3, 4]
[2, 1, 4, 3]
[2, 3, 4, 1]
[2, 4, 1, 3]
[3, 1, 4, 2]
[3, 4, 1, 2]
[3, 4, 2, 1]
[4, 1, 2, 3]
[4, 3, 1, 2]
[4, 3, 2, 1]
 
n derangements !n
1 0 0
2 1 1
3 2 2
4 9 9
5 44 44
6 265 265
7 1854 1854
8 14833 14833
9 133496 133496
10 1334961 1334961
 
!20 = 895014631192902121</pre>
 
=={{header|Kotlin}}==
<lang scala>// version 1.1.2
Anonymous user