Ihre Aufgabe ist es, ein gültiges Jongliermuster zu generieren, indem Sie eine vorgegebene Vorlage ausfüllen. Aber zuerst müssen Sie wahrscheinlich wissen, wie ein solches Muster bezeichnet wird.
Einführung in Siteswap
Siteswap ist die etablierte Notation für Jongliermuster. Es funktioniert durch Teilen des Musters in Beats. Bei jedem Schlag wechseln sich linke und rechte Hand beim Werfen eines Balls ab. Jeder Wurf (dh jeder Schlag) wird mit einer Zahl gekennzeichnet, die angibt, wann der Ball als nächstes geworfen wird - dies entspricht direkt der Höhe des Wurfs.
Schauen wir uns einige Beispiele an. Sehen Sie Animationen von all diesen hier .
3-Ball-Kaskade
Das einfachste 3-Ball-Muster. Jeder Ball wird bei jedem dritten Schlag geworfen (abwechselnde Hände). Das Ausschreiben der Beats sieht folgendermaßen aus (die ASCII-Linien verbinden zwei Beats, auf die derselbe Ball geworfen wird):
Beat 1 2 3 4 5 6 7 8 9
Hand L R L R L R L R L
Siteswap 3 3 3 3 3 3 3 3 3
└─┼─┼─┘ │ │
└─┼───┘ │
└─────┘
Beachten Sie, wie jeder Ball auf eine Kugel geworfen wird L
Schlag geworfen wird, als nächster auf einen R
Schlag geworfen wird. Sitewap-Muster wiederholen sich implizit, sodass dieses Muster normalerweise als bezeichnet wird 333
, obwohl dies einfach 3
auch ausreichen würde.
441
Hier ist ein etwas komplizierteres Beispiel mit dem siteswap 441 :
Beat 1 2 3 4 5 6 7 8 9
Hand L R L R L R L R L
Siteswap 4 4 1 4 4 1 4 4 1
│ │ └─┘ │ │
└─┼─────┘ │
└───────┘
Beachten Sie, wie Würfe mit gerader Nummer zu derselben Hand gehen, aus der sie geworfen wurden, während Würfe mit ungerader Nummer zur anderen Hand gehen.
423
Manchmal möchte man einfach einen Ball durch einen Schlag halten, anstatt ihn zu werfen. All das bedeutet, dass dieser Ball das nächste Mal geworfen wird, wenn diese Hand an der Reihe ist - dh 2 Schläge später. Das Halten eines Balls entspricht also einem 2
im Muster:
Beat 1 2 3 4 5 6 7 8 9
Hand L R L R L R L R L
Siteswap 4 2 3 4 2 3 4 2 3
│ └─┼─┘ │ │
│ └───┼─┘
└───────┘
50505
A 0
bedeutet, dass die aktuelle Hand bei diesem Schlag leer ist, wie dieses Muster zeigt:
Beat 1 2 3 4 5 6 7 8 9
Hand L R L R L R L R L
Siteswap 5 0 5 0 5 5 0 5 0
└───┼───┼─┘ │
└───┼─────┘
└───────>
Multiplex Jonglieren
Dieses Problem wäre bei Vanilla Siteswap allerdings etwas zu einfach. Geben Sie Multiplexmuster ein! Multiplex Jonglieren bedeutet, dass Sie mehrere Bälle gleichzeitig aus einer Hand werfen. Wenn Sie beispielsweise in der obigen 3-Ball-Kaskade bei jedem dritten Schlag zwei weitere Bälle werfen würden, würde das Muster folgendermaßen [33]33
aussehen:
Beat 1 2 3 4 5 6 7 8 9
Hand L R L R L R L R L
Siteswap [33] 3 3 [33] 3 3 [33] 3 3
└┴──┼─┼──┴┘ │ │
└─┼──────┘ │
└────────┘
Hier ist ein weiteres Beispiel, bei dem der Multiplex-Wurf zwei verschiedene Höhen / Längen hat. Es könnte bezeichnet werden als entweder [34]11
oder [43]11
:
Beat 1 2 3 4 5 6 7 8 9
Hand L R L R L R L R L
Siteswap [43] 1 1 [43] 1 1 [43] 1 1
││ └─┴──┘│ │
│└────────┘ │
└────────────┘
(Beachten Sie, dass der 1
im Takt geworfene Schlag im Takt 2
landet 3
und sofort wieder (als ein anderer 1
) geworfen wird , um im Takt zu landen4
Wurf und Teil des zweiten Multiplex-Wurfs zu sein.)
Der Seitenwechsel für die Animation am Anfang dieses Beitrags war [53]15121
.
Mustergültigkeit
Damit ein Muster semantisch gültig ist, muss die Anzahl der Bälle in einer Hand immer der Anzahl der Würfe entsprechen, die bei diesem Schlag angegeben wurden. Dies bedeutet, dass bei einem Schlag mit a keine Bälle landen 0
dürfen, dass bei einem Schlag mit einer anderen Ziffer nur ein Ball landen darf und dass bei einem Multiplexschlag n Bälle landen dürfen, wobei n die Anzahl der Stellen ist in diesem Multiplexwurf. Das Muster muss sich auch nahtlos wiederholen lassen.
Beispiele für ungültige Muster sind 543
(alle Bälle würden im selben Takt landen), 240
(die 2
würden im 0
Takt landen ) oder33[24]
(es landen keine Bälle im Multiplex-Takt, aber zwei Bälle landen auf den beiden anderen beiden Takten).
Die Herausforderung
Sie nehmen ein Siteswap-Muster, das Platzhalter enthält, und geben ein gültiges Muster aus, wobei diese Platzhalter ausgefüllt sind.
Nehmen Sie als Eingabe (über stdin, Befehlszeilenargument, Datei oder Funktionsparameter) eine Zeichenfolge des Formats
n s
Dabei n
handelt es sich um eine Ganzzahl, die die Anzahl der zu verwendenden Bälle angibt, und s
um ein Site-Swap-Muster ( ohne Leerzeichen). Sie können davon ausgehen, dass es syntaktisch korrekt ist - alle eckigen Klammern stimmen überein und sind nicht verschachtelt, und es gibt keine unerwarteten Zeichen. Alle Würfe sind einstellige Würfe ( 0
- 9
). Allerdings , einige Schläge können nur als eine bezeichnet werden _
, die mit einem einzigen oder einem Multiplex - Wurf in der Ausgabe gefüllt werden soll.
Hinweis: so etwas [_3]
wird nicht Bestandteil der Eingabe. Entweder fehlt der gesamte Beat oder es wird der gesamte Beat angegeben.
Geben Sie ein gültiges Muster aus, das mit der angegebenen Anzahl von Bällen jongliert werden kann und mit dem Eingabemuster in allen angegebenen Schlägen übereinstimmt. Wenn mit den angegebenen Eingaben kein gültiges Muster möglich ist, wird ausgegeben !
. Die Ausgabe erfolgt ebenfalls über stdout, in eine Datei oder als Funktionsrückgabewert.
Hinweis: Die Ausgabe darf bei Multiplex-Throws keine unnötigen eckigen Klammern oder Nullen enthalten. Also müssen Ausgaben, die enthalten [3]
oder [03]
nicht akzeptiert werden, 3
stattdessen ausgegeben werden. Die Reihenfolge der Ziffern in einem Multiplex-Wurf ist nicht relevant.
Hinweis: Sie können Muster weglassen, die bei zyklischen Permutationen doppelt vorhanden sind. ZB für die Eingabe 3 __
(beachten Sie die beiden Platzhalter), beide 42
und24
sind gültige Antworten (unter anderem), aber sie beschreiben tatsächlich das gleiche Muster. Sie können entweder beide oder nur einen von ihnen ausgeben, müssen dies jedoch konsequent tun.
Dies ist Codegolf , der kürzeste Code gewinnt (vorbehaltlich der unten in der Frage aufgeführten Boni).
Sie können verwenden JugglingLab verwenden mit Mustern , um zu sehen, ob sie gültig sind und wie sie aussehen.
Beispiele
Input Possible Outputs Comments
3 _ 3
[21]
[111]
3 4_3 423
4 4_2 4[51]2
4[42]2
4[321]2
3 _23_ 6231
4233
323[31]
2235
223[41]
0237
023[43]
[42]231
[32]23[11]
4 5_3 ! 5 and 3 will both land at the third beat, but
there is only a single throw at that beat. This
cannot be fixed with any throw in the blank.
2 5_4 ! Any possible throw in the wildcard (including a
0) will make a pattern for at least 3 balls.
3 54_ ! The only solution that would correspond to a
3-ball pattern is 540, which is not semantically
valid because the 5 and 4 both land at beat 3.
There are valid solutions, but they require at
least 4 balls.
Boni
- Wenn Ihre Antwort "Ziffern" mit bis zu 35 Buchstaben (10 = A, 11 = B, ...) verarbeiten kann, subtrahieren Sie diese 20 Zeichen ab . Sie können entscheiden, ob diese Buchstaben in Groß-, Klein- oder Kleinschreibung geschrieben werden sollen. (JugglingLab kann sie in Kleinbuchstaben verarbeiten, wenn Sie sich einige verrückte Muster ansehen möchten.)
- Wenn Ihre Antwort alle gültigen Lösungen ausgibt , subtrahieren Sie 20 Zeichen .
L*n^(n*choose(n+11,n+2))
won
die Anzahl der Platzhalter undL
die Anzahl der Zeichen im Muster ist. Nicht gerade effizient.3 __
jedes Ergebnis zweimal mit vertauschten Beats), überzählen, aber ich nehme an, dass das eher meine Schuld ist, wenn ich das nicht spezifiziere. Ich werde allerdings eine Klausel hinzufügen, um das Weglassen dieser zu ermöglichen, wenn dies das Speichern von Bytes erleichtert.