RosettaCodeData/Task/Permutations-Derangements/EasyLang/permutations-derangements.easy

38 lines
664 B
Text
Raw Permalink Normal View History

2023-10-02 18:11:16 -07:00
global list[] rlist[][] .
2025-06-11 20:16:52 -04:00
proc permlist k .
2023-10-02 18:11:16 -07:00
if k >= len list[]
for i to len list[]
2025-06-11 20:16:52 -04:00
if i = list[i] : return
2023-10-02 18:11:16 -07:00
.
rlist[][] &= list[]
return
.
for i = k to len list[]
swap list[i] list[k]
permlist k + 1
swap list[k] list[i]
.
.
#
2025-06-11 20:16:52 -04:00
proc derang n &r[][] .
2023-10-02 18:11:16 -07:00
rlist[][] = [ ]
list[] = [ ]
2025-06-11 20:16:52 -04:00
for i to n : list[] &= i
2023-10-02 18:11:16 -07:00
permlist 1
r[][] = rlist[][]
.
r[][] = [ ]
derang 4 r[][]
print r[][]
#
func subfac n .
2025-06-11 20:16:52 -04:00
if n < 2 : return 1 - n
2023-10-02 18:11:16 -07:00
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
.