55 lines
1.0 KiB
Plaintext
55 lines
1.0 KiB
Plaintext
range = (a, b):
|
|
i = 0, l = list(b-a+1)
|
|
while (a + i <= b):
|
|
l (i) = a + i++.
|
|
l.
|
|
|
|
fannkuch = (n):
|
|
flips = 0, maxf = 0, k = 0, m = n - 1, r = n
|
|
perml = range(0, n), count = list(n), perm = list(n)
|
|
|
|
loop:
|
|
while (r != 1):
|
|
count (r-1) = r
|
|
r--.
|
|
|
|
if (perml (0) != 0 and perml (m) != m):
|
|
flips = 0, i = 1
|
|
while (i < n):
|
|
perm (i) = perml (i)
|
|
i++.
|
|
k = perml (0)
|
|
loop:
|
|
i = 1, j = k - 1
|
|
while (i < j):
|
|
t = perm (i), perm (i) = perm (j), perm (j) = t
|
|
i++, j--.
|
|
flips++
|
|
j = perm (k), perm (k) = k, k = j
|
|
if (k == 0): break.
|
|
.
|
|
if (flips > maxf): maxf = flips.
|
|
.
|
|
|
|
loop:
|
|
if (r == n):
|
|
(n, maxf) say
|
|
return (maxf).
|
|
|
|
i = 0, j = perml (0)
|
|
while (i < r):
|
|
k = i + 1
|
|
perml (i) = perml (k)
|
|
i = k.
|
|
perml (r) = j
|
|
|
|
j = count (r) - 1
|
|
count (r) = j
|
|
if (j > 0): break.
|
|
r++
|
|
_ n
|
|
|
|
n = argv(1) number
|
|
if (n<1): n=10.
|
|
fannkuch(n)
|