Topswops: Difference between revisions

Content added Content deleted
(→‎{{header|Raku}}: Add alternate version)
(Added 11l)
Line 38: Line 38:
*   [[Sorting algorithms/Pancake sort]]
*   [[Sorting algorithms/Pancake sort]]
<br><br>
<br><br>

=={{header|11l}}==
{{trans|Python:_Faster_Version}}

<lang 11l>V best = [0] * 16

F try_swaps(&deck, f, =s, d, n)
I d > :best[n]
:best[n] = d

V i = 0
V k = 1 << s
L s != 0
k >>= 1
s--
I deck[s] == -1 | deck[s] == s
L.break
i [|]= k
I (i [&] f) == i & d + :best[s] <= :best[n]
R d
s++

V deck2 = copy(deck)
k = 1
L(i2) 1 .< s
k <<= 1
I deck2[i2] == -1
I (f [&] k) != 0
L.continue
E I deck2[i2] != i2
L.continue

deck[i2] = i2
L(j) 0 .. i2
deck2[j] = deck[i2 - j]
try_swaps(&deck2, f [|] k, s, 1 + d, n)

F topswops(n)
:best[n] = 0
V deck0 = [-1] * 16
deck0[0] = 0
try_swaps(&deck0, 1, n, 0, n)
R :best[n]

L(i) 1..12
print(‘#2: #.’.format(i, topswops(i)))</lang>

{{out}}
<pre>
1: 0
2: 1
3: 2
4: 4
5: 7
6: 10
7: 16
8: 22
9: 30
10: 38
11: 51
12: 63
</pre>


=={{header|360 Assembly}}==
=={{header|360 Assembly}}==