31 lines
961 B
Plaintext
31 lines
961 B
Plaintext
procedure main(A)
|
|
every write("Permutations of length ",n := !A) do
|
|
every p := permute(n) do write("\t",showList(p[1])," -> ",right(p[2],2))
|
|
end
|
|
|
|
procedure permute(n)
|
|
items := [[]]
|
|
every (j := 1 to n, new_items := []) do {
|
|
every item := items[i := 1 to *items] do {
|
|
if *item = 0 then put(new_items, [j])
|
|
else if i%2 = 0 then
|
|
every k := 1 to *item+1 do {
|
|
new_item := item[1:k] ||| [j] ||| item[k:0]
|
|
put(new_items, new_item)
|
|
}
|
|
else
|
|
every k := *item+1 to 1 by -1 do {
|
|
new_item := item[1:k] ||| [j] ||| item[k:0]
|
|
put(new_items, new_item)
|
|
}
|
|
}
|
|
items := new_items
|
|
}
|
|
suspend (i := 0, [!items, if (i+:=1)%2 = 0 then 1 else -1])
|
|
end
|
|
|
|
procedure showList(A)
|
|
every (s := "[") ||:= image(!A)||", "
|
|
return s[1:-2]||"]"
|
|
end
|