user
Topswops is a card game created by John Conway in the 1970's.

Assume you have a particular permutation of a set of   n   cards numbered   1..n   on both of their faces, for example the arrangement of four cards given by   [2, 4, 1, 3]   where the leftmost card is on top.

A round is composed of reversing the first   m   cards where   m   is the value of the topmost card.

Rounds are repeated until the topmost card is the number   1   and the number of swaps is recorded.

For our example the swaps produce:

```
    
    [2, 4, 1, 3]    # Initial shuffle
    [4, 2, 1, 3]
    [3, 1, 2, 4]
    [2, 1, 3, 4]
    [1, 2, 3, 4]

```

For a total of four swaps from the initial ordering to produce the terminating case where   1   is on top.

For a particular number    `n`    of cards,    `topswops(n)`    is the maximum swaps needed for any starting permutation of the   `n`   cards.

Task

The task is to generate and show here a table of    `n`    vs    `topswops(n)`    for    `n`    in the range   1..10   inclusive.

Note

Topswops   is also known as   Fannkuch   from the German word   *Pfannkuchen*   meaning   pancake.

Related tasks

* Number reversal game
* Sorting algorithms/Pancake sort
assistant
(formerly Perl 6)

```
sub swops(@a is copy) {
    my int $count = 0;
    until @a[0] == 1 {
        @a[ ^@a[0] ] .= reverse;
        ++$count;
    }
    $count
}

sub topswops($n) { max (1..$n).permutations.race.map: &swops }

say "$_ {topswops $_}" for 1 .. 10;

```

Output:

```
1 0
2 1
3 2
4 4
5 7
6 10
7 16
8 22
9 30
10 38
```

Alternately, using string manipulation instead. Much faster, though honestly, still not very fast.

```
sub swops($a is copy) {
    my int $count = 0;
    while (my \l = $a.ord) > 1 {
        $a = $a.substr(0, l).flip ~ $a.substr(l);
        ++$count;
    }
    $count
}

sub topswops($n) { max (1..$n).permutations.map: { .chrs.join.&swops } }

say "$_ {topswops $_}" for 1 .. 10;

```

Same output