30 lines
574 B
Text
30 lines
574 B
Text
global n d best[] .
|
|
#
|
|
proc tryswaps &a[] f .
|
|
if d > best[n] : best[n] = d
|
|
for s = len a[] downto 1
|
|
if a[s] = 0 or a[s] = s : break 1
|
|
if d + best[s] <= best[n] : return
|
|
.
|
|
d += 1
|
|
for i = 1 to s : b[] &= a[i]
|
|
k = 1
|
|
for i = 2 to s
|
|
k *= 2
|
|
if b[i] = 0 and bitand f k = 0 or b[i] = i
|
|
b[1] = i
|
|
for j = i - 1 downto 1
|
|
b[i - j + 1] = a[j]
|
|
.
|
|
tryswaps b[] (bitor f k)
|
|
.
|
|
.
|
|
d -= 1
|
|
.
|
|
for n = 1 to 10
|
|
best[] &= 0
|
|
x[] &= 0
|
|
d = 0
|
|
tryswaps x[] 1
|
|
print n & ": " & best[n]
|
|
.
|