Jump to content

Permutations/Rank of a permutation: Difference between revisions

(Added Easylang)
Line 450:
=={{header|EasyLang}}==
<syntaxhighlight>
proc nextperm . a[] .
n = len a[]
if n = 0
return
.
k = n - 1
while k >= 1 and a[k + 1] <= a[k]
k -= 1
.
if k = 0
a[] = [ ]
return
.
l = n
while a[l] <= a[k]
l -= 1
.
swap a[l] a[k]
k += 1
while k < n
swap a[k] a[n]
k += 1
n -= 1
.
func[] init n .
for i to n
Line 480 ⟶ 455:
.
return r[]
func fac n .
nf = len a[]1
lfor =i to n
returnf *= i
.
return f
.
func[] getperm n r .
perm[] = init n
for ifa = 1 tofac rn
for i = nextpermn perm[]downto 1
kfa -/= 1i
d = r div fa + 1
r = r mod fa
ar[] &= perm[ d]
for ij = d to ni - 1
until perm[j] = perm[j + 1]
if n = 0.
.
return permr[]
.
func getrank n p[] .
perm[] = init n
repeatfa = fac n
for i = ifn perm[] =downto p[]1
fa return/= i
h = p[n -= i + 1]
k = n -d = 1
while aperm[ld] <=> a[k]h
l - d += 1
if k = 0.
kr += fa * (d - 1)
for j = d to i - 1
perm[j] = perm[j + 1]
.
nextperm perm[]
until perm[] = [ ]
i += 1
.
return -1r
.
proc show . .
Line 504 ⟶ 498:
h[] = getperm 3 i
print i & " -> " & h[] & " -> " & getrank 3 h[]
.
print ""
for i +=to 14
r = random fac 12 - 1
write r & " -> "
print h[] = getperm 12 r
swapwrite ah[k] a[n]
print " -> " & getrank 12 h[]
.
.
show
func fac n .
f = 1
for i to n
f *= i
.
return f
.
print ""
for i to 4
r = random fac 12 - 1
write r & " -> "
print getperm 12 r
.
</syntaxhighlight>
{{out}}
Line 530 ⟶ 519:
5 -> [ 2 1 0 ] -> 5
 
368494427381502760 -> [ 9 2 6 5 1 3 10 11 8 105 3 72 4 0 7 ] -> 381502760
244949381205815418 -> [ 65 1 9 2 7 04 310 26 83 11 40 108 9] 5-> ]205815418
378494158229356067 -> [ 9 5 39 2 0 46 3 1 68 11 4 10 8 2 7 ] -> 229356067
181506774421960570 -> [ 410 7 06 2 9 3 10 64 5 10 87 11 1 8 ] -> 421960570
</pre>
 
2,083

edits

Cookies help us deliver our services. By using our services, you agree to our use of cookies.