sfondo
I gestori di carte molto abili sono capaci di una tecnica in base alla quale tagliano perfettamente un mazzo a metà, quindi intercalano perfettamente le carte. Se iniziano con un mazzo ordinato ed eseguono questa tecnica in modo impeccabile 52 volte di seguito, il mazzo verrà ripristinato in ordine. La tua sfida è quella di prendere un mazzo di carte un array intero e determinare se può essere ordinato usando solo shuffle di Faro.
Definizione
Matematicamente, un shuffle Faro è una permutazione su 2 n elementi (per qualsiasi numero intero positivo n ) che porta l'elemento in posizione i (1-indicizzato) in posizione 2 i (mod 2 n +1). Vorremmo anche essere in grado di gestire elenchi di lunghezza dispari, quindi in quel caso, aggiungi un elemento alla fine dell'elenco (un Joker, se ne hai uno utile) e Faro mescola il nuovo elenco come sopra, ma ignora l'elemento fittizio aggiunto quando si controlla l'ordine dell'elenco.
Obbiettivo
Scrivi un programma o una funzione che prende un elenco di numeri interi e restituisce o restituisce un valore vero se un certo numero di riordini Faro fa sì che tale elenco venga ordinato in ordine non crescente (anche se quel numero è zero - i piccoli elenchi dovrebbero dare un valore). In caso contrario, restituisce o genera un falso.
Esempi
[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
punteggio
Questo è il code-golf quindi vince la fonte più breve in byte.