RosettaCodeData/Task/Permutations-Derangements/EasyLang/permutations-derangements.easy
2025-06-11 20:16:52 -04:00

37 lines
664 B
Text

global list[] rlist[][] .
proc permlist k .
if k >= len list[]
for i to len list[]
if i = list[i] : return
.
rlist[][] &= list[]
return
.
for i = k to len list[]
swap list[i] list[k]
permlist k + 1
swap list[k] list[i]
.
.
#
proc derang n &r[][] .
rlist[][] = [ ]
list[] = [ ]
for i to n : list[] &= i
permlist 1
r[][] = rlist[][]
.
r[][] = [ ]
derang 4 r[][]
print r[][]
#
func subfac n .
if n < 2 : return 1 - n
return (subfac (n - 1) + subfac (n - 2)) * (n - 1)
.
#
print "counted / calculated"
for n = 0 to 9
derang n r[][]
print n & ": " & len r[][] & " " & subfac n
.