Bulgarian Solitaire ist ein Einzelspielerspiel, das Martin Gardner in seiner mathematischen Kolumne in Scientific American bekannt gemacht hat .
Sie haben N
identische Karten, die in Stapel aufgeteilt sind. Sie nehmen eine Karte von jedem Stapel und bilden mit den entfernten Karten einen neuen Stapel. Sie wiederholen diesen Vorgang, bis Sie einen Zustand erreicht haben, den Sie bereits gesehen haben. Wenn Sie also fortfahren, wird die Schleife wiederholt.
Angenommen, Sie haben 8
Karten, die in einen Stapel 5
und einen Stapel aufgeteilt sind 3
. Wir schreiben die Stapelgrößen in absteigender Reihenfolge : 5 3
. Hier ist eine Abschrift des Spiels:
5 3
4 2 2
3 3 1 1
4 2 2
Sie entfernen zuerst eine Karte von jedem der beiden Stapel, wobei Stapel von 4
und 2
und ein neu erstellter Stapel von 2
Geben übrig bleiben 4 2 2
. Im nächsten Schritt verringern sich diese, 3 1 1
gefolgt von einem neuen Stapel von 3
. Schließlich leert der letzte Schritt die Stapel von Größe 1
und produziert, 4 2 2
was bereits erschienen ist, also hören wir auf.
Beachten Sie, dass die Summe der Stapelgrößen gleich bleibt.
Ihr Ziel ist es, eine solche Abschrift des Spiels aus einer bestimmten Startkonfiguration zu drucken. Dies ist Code Golf, also gewinnen die wenigsten Bytes.
Eingang
Eine Liste positiver Zahlen in absteigender Reihenfolge, die die anfänglichen Stapelgrößen darstellt. Eingabe über STDIN oder Funktionseingabe. Sie können jede gewünschte listenartige Struktur verwenden.
Sie erhalten nicht die Gesamtzahl der Karten N
als Eingabe.
Ausgabe
Drucken Sie die Reihenfolge der Stapelgrößen aus, die das Spiel des bulgarischen Solitaire durchläuft. Beachten Sie, dass ein Druck erforderlich ist und nicht zurückgegeben wird. Jeder Schritt sollte eine eigene Zeile sein.
Jede Zeile sollte eine Folge positiver Zahlen in absteigender Reihenfolge ohne Nein enthalten 0
. Möglicherweise haben Sie Trennzeichen und Start- und End-Token (z. B. [3, 3, 1, 1]
). Die Zahlen können mehrere Ziffern haben, daher sollten sie irgendwie getrennt werden.
Drucken Sie die angezeigten Stapelaufteilungen bis einschließlich einer Wiederholung. Die erste Zeile sollte also die Eingabe sein, und die letzte Zeile sollte eine Wiederholung einer vorherigen Zeile sein. Es sollte keine anderen Wiederholungen geben.
Testfälle
>> [1]
1
1
>> [2]
2
1 1
2
>> [1, 1, 1, 1, 1, 1, 1]
1 1 1 1 1 1 1
7
6 1
5 2
4 2 1
3 3 1
3 2 2
3 2 1 1
4 2 1
>> [5, 3]
5 3
4 2 2
3 3 1 1
4 2 2
>> [3, 2, 1]
3 2 1
3 2 1
>> [4, 4, 3, 2, 1]
4 4 3 2 1
5 3 3 2 1
5 4 2 2 1
5 4 3 1 1
5 4 3 2
4 4 3 2 1
v$input()$
mitQ
. 2. Wenn Sie die Liste in absteigender Reihenfolge speichern, brauchen Sie überhaupt nichtN
:W!}QYQ~Y]Q=Q_S+fTmtdQ]lQ;Q