Wczoraj zadałem to pytanie na temat przetasowań riffle. Wydaje się, że wczorajsze pytanie było nieco zbyt trudne, więc jest to powiązane, ale o wiele łatwiejsze zadanie.
Dzisiaj jesteś proszony o ustalenie, czy permutacja jest tak naprawdę przetasowaniem riffle. Nasza definicja losowego przetasowania jest dostosowana do naszego ostatniego pytania:
Pierwszą częścią losowania jest podział. W partycji podziel talię kart na dwie części. Te dwa podrozdziały muszą być ciągłe, wzajemnie się wykluczające i wyczerpujące. W prawdziwym świecie chcesz, aby twoja partycja była jak najbliższa, jak to możliwe, jednak w tym wyzwaniu nie jest to rozważane, wszystkie partycje, w tym te, które są zdegenerowane (jedna partycja jest pusta), są jednakowo ważne.
Po ich podzieleniu karty są łączone w taki sposób, że karty zachowują względną kolejność w obrębie podziału, którego 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ść.
Zadanie
Biorąc pod uwagę permutację dowolną rozsądną metodą, ustal, czy reprezentuje ona prawidłowe losowanie karabinu. Powinieneś wypisać dwie różne stałe wartości: jedną dla „Tak, to jest losowe odtwarzanie riffla”, a drugą dla „Nie, to nie jest losowe odtwarzanie losowe”.
To jest golf golfowy, więc odpowiedzi będą liczone w bajtach, przy czym mniej bajtów będzie lepszych.
Przypadki testowe
1,3,2 -> True
3,2,1 -> False
3,1,2,4 -> True
2,3,4,1 -> True
4,3,2,1 -> False
1,2,3,4,5 -> True
1,2,5,4,3 -> False
5,1,4,2,3 -> False
3,1,4,2,5 -> True
2,3,6,1,4,5 -> False
[3,1,4,2,5]
.
[2,3,6,1,4,5]
.
[0, ..., n-1]
zamiast zamiast danych [1, ..., n]
wejściowych?
0
dla falsy, ale jakakolwiek liczba całkowita[1, +∞)
dla prawdy?