Ieri ho posto questa domanda sulle mescolanze di riffle. Sembra che la domanda di ieri sia stata un po 'troppo difficile, quindi questa domanda è un compito correlato ma molto più semplice.
Oggi ti viene chiesto di determinare se una permutazione è in realtà un riordino del riffle. La nostra definizione di riffle shuffle è adattata dalla nostra ultima domanda:
La prima parte dello shuffle è la divisione. Nella divisione dividere il mazzo di carte in due. Le due sottosezioni devono essere continue, reciprocamente esclusive ed esaustive. Nel mondo reale vuoi rendere la tua partizione il più vicino possibile, tuttavia in questa sfida questa non è una considerazione, tutte le partizioni incluse quelle che sono degenerate (una partizione è vuota) sono della stessa considerazione.
Dopo che sono state partizionate, le carte vengono congiunte in modo tale che le carte mantengano il loro ordine relativo all'interno della partizione di cui fanno parte . Ad esempio, se la carta A è prima della carta B nel mazzo e le carte A e B si trovano nella stessa partizione, la carta A deve trovarsi prima della carta B nel risultato finale, anche se il numero di carte tra loro è aumentato. Se A e B si trovano in partizioni diverse, possono essere in qualsiasi ordine, indipendentemente dal loro ordine di partenza, nel risultato finale.
Ogni shuffle di riffle può quindi essere visto come una permutazione del mazzo di carte originale. Ad esempio la permutazione
1,2,3 -> 1,3,2
è un riffle shuffle. Se dividi il mazzo in questo modo
1, 2 | 3
vediamo che ogni carta in 1,3,2
ha lo stesso ordine relativo ad ogni altra carta nella sua partizione. 2
è ancora dopo 1
.
D'altra parte la seguente permutazione non è un riordino di riffle.
1,2,3 -> 3,2,1
Possiamo vederlo perché per tutte e due le partizioni (non banali)
1, 2 | 3
1 | 2, 3
c'è una coppia di carte che non mantiene i relativi ordini. Nella prima partizione 1
e 2
modifica il loro ordine, mentre nella seconda partizione 2
e 3
modifica il loro ordine.
Compito
Data una permutazione tramite qualsiasi metodo ragionevole, determinare se rappresenta un shuffle riffle valido. Dovresti generare due valori costanti distinti uno per "Sì, questo è un riordino del riffle" e uno per "No, questo non è un riordino del riffle".
Questo è code-golf, quindi le risposte verranno classificate in byte con meno byte migliori.
Casi test
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]
invece che [1, ..., n]
come input?
0
per falsy ma qualsiasi numero intero[1, +∞)
per verità?