48 lines
870 B
Plaintext
48 lines
870 B
Plaintext
Dim Shared As Byte n, d, best(16)
|
|
|
|
Sub TrySwaps(A() As Byte, f As Byte, s As Byte)
|
|
Dim As Byte B(16), i, j, k
|
|
If d > best(n) Then best(n) = d
|
|
Do
|
|
If A(s) = -1 Or A(s) = s Then Exit Do
|
|
If d+best(s) <= best(n) Then Exit Sub
|
|
If s = 0 Then Exit Do
|
|
s -= 1
|
|
Loop
|
|
|
|
d += 1
|
|
For i = 0 To s
|
|
B(i) = A(i)
|
|
Next
|
|
|
|
k = 1
|
|
For i = 1 To s
|
|
k Shl= 1
|
|
If B(i) =- 1 AndAlso (f And k) = 0 Or B(i) = i Then
|
|
j = i
|
|
B(0) = j
|
|
While j
|
|
j -= 1
|
|
B(i-j) = A(j)
|
|
Wend
|
|
TrySwaps(B(), f Or k, s)
|
|
End If
|
|
Next
|
|
d -= 1
|
|
End Sub
|
|
|
|
Dim As Byte i, X(16)
|
|
For i = 0 To 16-1
|
|
X(i) = -1
|
|
best(i) = 0
|
|
Next i
|
|
X(0) = 0
|
|
|
|
For n = 1 To 13
|
|
d = 0
|
|
TrySwaps(X(), 1, n-1)
|
|
Print Using "##: ##"; n; best(n)
|
|
Next n
|
|
|
|
Sleep
|