tło
Bardzo wykwalifikowani operatorzy kart potrafią zastosować technikę, w której tną talię idealnie na pół, a następnie idealnie przeplatają karty. Jeśli zaczną od posortowanej talii i wykonają tę technikę bezbłędnie 52 razy z rzędu, talia zostanie przywrócona do posortowanej kolejności. Twoim wyzwaniem jest zabranie talii kart do tablicy liczb całkowitych i ustalenie, czy można ją sortować za pomocą tylko losowania Faro.
Definicja
Matematycznie tasowanie Faro to permutacja 2 n elementów (dla dowolnej dodatniej liczby całkowitej n ), która przenosi element w pozycji i (indeksowane 1) do pozycji 2 i (mod 2 n +1). Chcielibyśmy również móc obsługiwać listy nieparzystej długości, więc w takim przypadku wystarczy dodać jeden element na końcu listy (Joker, jeśli masz jeden pod ręką), a Faro przetasuje nową listę jak wyżej, ale zignoruj dodany element fikcyjny podczas sprawdzania kolejności listy.
Cel
Napisz program lub funkcję, która pobierze listę liczb całkowitych i zwróci lub wyświetli prawdę, jeśli pewna liczba losowań Faro spowodowałaby posortowanie tej listy w kolejności nieskalującej (nawet jeśli ta liczba jest równa zero - małe listy powinny dać prawdę). W przeciwnym razie zwróć lub wygeneruj fałsz.
Przykłady
[1,1,2,3,5,8,13,21] => True
[5,1,8,1,13,2,21,3] => True
[9,36,5,34,2,10,1] => True
[1,0] => True
[0] => True
[] => True
[3,2,1] => True
[3,1,2] => False
[9,8,7,6,5,4,3,2,1,0] => True
[9,8,7,6,5,4,3,2,0,1] => False
[3,1,4,1,5,9,2,6,9] => False
[-1,-1,-1,-2] => True
Punktacja
To jest golf golfowy, więc wygrywa najkrótsze źródło w bajtach.
źródło
Odpowiedzi:
Pyth -
262524 bajtówUżywa skumulowanego zmniejszenia, aby wielokrotnie zastosować losowanie Faro i zachować wszystkie wyniki. Następnie mapuje go i sprawdza, czy podczas sortowania są niezmienne, a następnie używa sumy do sprawdzenia, czy wszystkie są prawdziwe. Zwraca wartość dodatnią lub zero.
Pakiet testowy .
źródło
MATL , 41 bajtów
Dane wyjściowe to
1
lub0
.Wyjaśnienie
Przykład
źródło