RosettaCodeData/Task/Permutations/TAV/permutations-4.tav

45 lines
1.1 KiB
Text
Raw Permalink Normal View History

2025-08-11 18:05:26 -07:00
\( Two arrays, iterative, not in lexical order.
Input row (a) provides for each element where it was inserted last.
\)
\C Publication syntax
permute iterative (n):
a = new row size n \ state of last number
r = new row size n \ output row
l = 1
while l > 0 \ need to start over
\ find the key of a void element
k = 0 \ if not found
for j = from a[l] + 1 upto n
if r[j] == () \ void in result
k = j \ use it
continue
\ evaluate
if k != 0
\ key for void cell to be set
r[k] = l
a[l] = k
if l == n
\ permuation complete
print join r
\ backup
k = a[l]
r[k] = ()
continue
l += 1
continue \ next level
\ no void cell found
if l == 1
break \ done, no more permutations
\ backup
a[l] = 0
l -= 1
k = a[l]
r[k] = ()
continue
\( command line parameter: number of elements
\)
main (parms):+
n =: string parms[1] as integer else 3
p =: permute iterative n