Losowanie riffle jest rodzajem losowania, w którym talia jest podzielona na dwie partycje, a następnie partycje są łączone z powrotem, aby utworzyć nową tasowaną talię.
Karty są łączone ze sobą w taki sposób, że karty zachowują swój względny porządek w obrębie partycji, której są członkami . Na przykład, jeśli karta A znajduje się przed kartą B w talii, a karty A i B znajdują się w tej samej partycji, karta A musi znajdować się przed kartą B w wyniku końcowym, nawet jeśli liczba kart między nimi wzrosła. Jeśli A i B znajdują się w różnych partycjach, mogą być w dowolnej kolejności, niezależnie od kolejności początkowej, w wyniku końcowym.
Każde losowanie karabinów można następnie traktować jako permutację oryginalnej talii kart. Na przykład permutacja
1,2,3 -> 1,3,2
jest losowym tasowaniem. Jeśli tak podzielisz talię
1, 2 | 3
widzimy, że każda karta w 1,3,2
tej samej kolejności względem każdej innej karty na partycji. 2
jest nadal po 1
.
Z drugiej strony poniższa permutacja nie jest przetasowaniem riffla.
1,2,3 -> 3,2,1
Widzimy to, ponieważ dla wszystkich dwóch (nietrywialnych) partycji
1, 2 | 3
1 | 2, 3
istnieje para kart, które nie zachowują względnej kolejności. W pierwszej partycji 1
i 2
zmień ich kolejność, podczas gdy w drugiej partycji 2
i 3
zmień ich kolejność.
Widzimy jednak, że 3, 2, 1
można to zrobić poprzez skomponowanie dwóch przetasowań karabinowych,
1, 3, 2 + 2, 3, 1 = 3, 2, 1
W rzeczywistości dość prostym faktem, który można udowodnić, jest to, że można dokonać dowolnej permutacji, łącząc pewną liczbę permutacji ruffle shuffle.
Zadanie
Twoim zadaniem jest stworzenie programu lub funkcji, która pobiera permutację (o rozmiarze N ) jako dane wejściowe i generuje najmniejszą liczbę permutacji losowych riffle (o rozmiarze N ), które można połączyć w celu utworzenia permutacji wejściowej. Nie trzeba samemu odtwarzać losowego tasowania riffów, ile ich jest.
To jest golf golfowy, więc odpowiedzi będą liczone w bajtach, przy czym mniej bajtów będzie lepszych.
Możesz podać 1 lub 0 dla permutacji tożsamości.
Przypadki testowe
1,3,2 -> 1
3,2,1 -> 2
3,1,2,4 -> 1
2,3,4,1 -> 1
4,3,2,1 -> 2
4,3,2,1
być 2
? Najpierw dzielimy się na środku i zyskujemy, 3,1,4,2
a następnie ponownie