Gestern habe ich diese Frage zu Riffle Shuffles gestellt. Es scheint, dass die gestrige Frage etwas zu schwierig war, daher ist diese Frage eine verwandte, aber viel einfachere Aufgabe.
Heute werden Sie gefragt, ob eine Permutation tatsächlich ein Riffle-Shuffle ist. Unsere Definition von Riffle Shuffle wurde von unserer letzten Frage übernommen:
Der erste Teil des Shuffle ist die Kluft. In der Divide-Partition wird das Kartenspiel in zwei Teile geteilt. Die beiden Unterabschnitte müssen fortlaufend sein, sich gegenseitig ausschließen und erschöpfend sein. In der realen Welt möchten Sie Ihre Partition so gleichmäßig wie möglich gestalten. Bei dieser Herausforderung spielt dies jedoch keine Rolle. Alle Partitionen, einschließlich entarteter Partitionen (eine Partition ist leer), werden gleichermaßen berücksichtigt.
Nach der Partitionierung werden die Karten so zusammengefügt, dass die relative Reihenfolge der Karten in der Partition erhalten bleibt, in der sie Mitglied sind . Wenn die Karte zum Beispiel A vor Karte B im Deck und Karten A und B sind in der gleichen Partition, Karte A muss vor der Karte sein B im Endergebnis, auch wenn die Anzahl der Karten zwischen ihnen erhöht. Wenn sich A und B in unterschiedlichen Partitionen befinden, können sie im Endergebnis unabhängig von ihrer Startreihenfolge in beliebiger Reihenfolge sein.
Jedes Riffle-Shuffle kann dann als eine Permutation des ursprünglichen Kartenstapels angesehen werden. Zum Beispiel die Permutation
1,2,3 -> 1,3,2
ist ein Riffle Shuffle. Wenn Sie das Deck so teilen
1, 2 | 3
Wir sehen, dass jede Karte in 1,3,2
der Partition dieselbe relative Reihenfolge zu jeder anderen Karte in der Partition hat. 2
ist immer noch hinterher 1
.
Andererseits ist die folgende Permutation kein Riffle-Shuffle.
1,2,3 -> 3,2,1
Wir können dies sehen, weil für alle zwei (nicht-trivialen) Partitionen
1, 2 | 3
1 | 2, 3
Es gibt ein Paar Karten, deren relative Reihenfolge nicht eingehalten wird. In der ersten Partition 1
und 2
ändern Sie ihre Reihenfolge, während in der zweiten Partition 2
und 3
ändern Sie ihre Reihenfolge.
Aufgabe
Bestimmen Sie bei einer Permutation mit einer vernünftigen Methode, ob es sich um ein gültiges Riffle Shuffle handelt. Sie sollten zwei unterschiedliche konstante Werte ausgeben, einen für "Ja, das ist ein Riffle-Shuffle" und einen für "Nein, das ist kein Riffle-Shuffle".
Dies ist Codegolf, daher werden die Antworten in Bytes bewertet, wobei weniger Bytes besser sind.
Testfälle
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]
statt [1, ..., n]
als Eingabe nehmen?
0
für falsch, aber eine ganze Zahl[1, +∞)
für wahr?