Mancala ist der Name einer Familie von Brettspielen, bei denen es sich normalerweise um eine Reihe von Tassen handelt, die mit Perlen gefüllt sind, die die Spieler manipulieren. Diese Herausforderung verwendet einen bestimmten Regelsatz für eine Solitaire-Variante des Spiels.
Das Brett besteht aus einem "Korb" an einem Ende, gefolgt von einer unendlichen Anzahl von Bechern, die ab 1 nummeriert sind. Einige der Becher enthalten eine bestimmte Anzahl von Perlen. Wenn die n
dritte Tasse genau n
Perlen enthält, können Sie die Perlen daraus "säen". Säen bedeutet, alle n
Perlen aus der Tasse zu nehmen und sie dann einzeln in jeder Tasse in Richtung Korb abzulegen. Die letzte Perle wird in den Korb gelegt. Der Spieler gewinnt, wenn sich alle Perlen auf dem Brett im Korb befinden.
Natürlich gibt es viele Bretter, die nicht gewinnbar sind, zum Beispiel, wenn genau eine Perle in der zweiten Tasse ist. Es gibt keine legalen Spiele, da nicht alle Tassen mit 0 Perlen gesät werden können und die zweite Tasse nicht genügend Perlen zum Säen hat. Dies macht offensichtlich keinen Spaß, daher besteht Ihre Aufgabe darin, gewinnbare Boards zu erstellen.
Aufgabe
Bei einer positiven Ganzzahl, die eine Anzahl von Perlen darstellt, wird eine Liste von nicht negativen Ganzzahlen ausgegeben, die die Anzahl der Perlen darstellen, die in jede Tasse gegeben werden sollten, um ein gewinnbares Brett wie oben beschrieben herzustellen. Diese Liste sollte keine nachgestellten Nullen enthalten.
Für eine bestimmte Anzahl von Perlen gibt es immer genau eine gewinnbare Board-Konfiguration.
Demonstration
Dies ist eine Demonstration, wie man das gewinnbare Brett für und die Eingabe von 4 spielt. Das gewinnbare Brett ist [0, 1, 3]
. Wir beginnen mit dem einzigen verfügbaren Zug und säen die Perlen aus der dritten Tasse, um sie zu erhalten [1, 2, 0]
. Jetzt haben wir tatsächlich eine Wahl, aber die einzig richtige ist, die erste Tasse zu säen und zu bekommen : [0, 2, 0]
. Dann säen wir die zweite Tasse nachgiebig [1, 0, 0]
und schließlich säen wir die erste Tasse erneut, um alle leeren Tassen zu erhalten.
Testfälle:
1 => [1]
2 => [0, 2]
3 => [1, 2]
4 => [0, 1, 3]
5 => [1, 1, 3]
6 => [0, 0, 2, 4]
7 => [1, 0, 2, 4]
8 => [0, 2, 2, 4]
9 => [1, 2, 2, 4]
10 => [0, 1, 1, 3, 5]
11 => [1, 1, 1, 3, 5]
12 => [0, 0, 0, 2, 4, 6]
13 => [1, 0, 0, 2, 4, 6]
14 => [0, 2, 0, 2, 4, 6]
15 => [1, 2, 0, 2, 4, 6]
16 => [0, 1, 3, 2, 4, 6]
17 => [1, 1, 3, 2, 4, 6]
18 => [0, 0, 2, 1, 3, 5, 7]
19 => [1, 0, 2, 1, 3, 5, 7]
20 => [0, 2, 2, 1, 3, 5, 7]
Vielen Dank an PeterTaylor für die Entwicklung eines Programms zur Erstellung von Testfällen!