Votre tâche consiste à générer un modèle de jonglage valide en remplissant un modèle donné. Mais d'abord, vous devez probablement savoir comment un tel modèle est indiqué.
Introduction à Siteswap
Siteswap est la notation établie pour les modèles de jonglage. Il fonctionne en divisant le motif en battements. A chaque battement, votre main gauche et votre main droite alternent pour lancer une balle. Chaque lancer (c'est-à-dire chaque battement) est indiqué par un nombre qui indique quand cette balle est lancée ensuite - cela correspond directement à la hauteur du lancer.
Regardons quelques exemples. Voir les animations de tous ces éléments ici .
Cascade à 3 balles
Le motif à 3 balles le plus simple. Chaque balle est lancée à chaque troisième battement (mains alternées). L'écriture des temps ressemble à ceci (les lignes ASCII relient deux temps auxquels la même balle est lancée):
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
└─┼─┼─┘ │ │
└─┼───┘ │
└─────┘
Notez comment chaque balle lancée à un L
rythme, est jeté à côté à un des R
motifs beat.Siteswap répéter implicitement, de sorte que ce modèle est généralement notée 333
, mais simplement 3
serait également suffisante.
441
Voici un exemple un peu plus compliqué avec le 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
│ │ └─┘ │ │
└─┼─────┘ │
└───────┘
Notez comment les lancers pairs vont dans la même main qu'ils ont été lancés, tandis que les lancers impairs vont dans l'autre main.
423
Parfois, vous voulez simplement tenir une balle à travers un battement au lieu de la lancer. Cela signifie que cette balle est lancée la prochaine fois que c'est le tour de cette main, c'est-à-dire 2 temps plus tard. Donc, tenir une balle équivaut à un 2
dans le motif:
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
signifie que la main actuelle est vide à ce rythme, comme le montre ce schéma:
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
└───┼───┼─┘ │
└───┼─────┘
└───────>
Jonglage multiplex
Ce problème serait cependant un peu trop simple avec siteswap vanilla. Entrez les modèles multiplex! Le jonglage multiplex signifie que vous lancez plusieurs balles d'une main en même temps. Par exemple, dans la cascade de 3 balles ci-dessus, si vous étiez deux à lancer une balle supplémentaire à chaque troisième battement, le motif deviendrait [33]33
et ressemblerait à ceci:
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
└┴──┼─┼──┴┘ │ │
└─┼──────┘ │
└────────┘
Voici un autre exemple, où le jet multiplex a deux hauteurs / longueurs différentes. Il pourrait être désigné comme étant soit [34]11
ou [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
││ └─┴──┘│ │
│└────────┘ │
└────────────┘
(Notez que le 1
jeté au battement 2
atterrit au battement 3
et est immédiatement lancé à nouveau (comme un autre 1
) pour atterrir au battement 4
et faire partie du deuxième lancer multiplex.)
Le sitewap pour l'animation au début de ce post était [53]15121
.
Validité du modèle
Pour qu'un modèle soit sémantiquement valide, le nombre de balles dans une main doit toujours correspondre au nombre de lancers indiqué à ce temps. Cela signifie qu'il ne doit pas y avoir de balles atterrissant sur un battement avec un 0
, qu'il ne doit y avoir qu'une seule balle atterrissant sur un battement avec un autre chiffre unique, et qu'il doit y avoir n balles atterrissant sur un battement multiplex, où n est le nombre de chiffres dans ce lancer multiplex. Le motif doit également pouvoir se répéter de manière transparente.
Des exemples de motifs invalides sont 543
(toutes les balles atterriraient au même temps), 240
(les 2
atterriraient au 0
rythme) ou 33[24]
(aucune balle ne se poserait au battement multiplex, mais deux balles atterriraient aux deux autres temps).
Le défi
Vous prendrez un modèle siteswap qui contient des caractères génériques et produirez un modèle valide, avec ces caractères génériques remplis.
Prendre en entrée (via stdin, argument de ligne de commande, fichier ou paramètre de fonction) une chaîne au format
n s
Où n
est un entier indiquant le nombre de boules à utiliser, et s
est un modèle de siteswap ( sans espace). Vous pouvez supposer que c'est syntaxiquement correct - tous les crochets sont appariés et non imbriqués, et il n'y a pas de caractères inattendus. Tous les lancers seront des lancers à un chiffre ( 0
- 9
). Cependant , certains temps peuvent simplement être désignés par un _
, qui doit être rempli avec une sortie simple ou multiplex dans la sortie.
Remarque: quelque chose comme ça ne[_3]
fera pas partie de l'entrée. Soit le temps entier est manquant, soit le temps entier est donné.
Sortez un modèle valide, qui peut être jonglé avec le nombre de balles donné et est d'accord avec le modèle d'entrée dans tous les temps spécifiés. Si aucun modèle valide n'est possible avec les entrées données, sortez !
. La sortie sera également via stdout, vers un fichier ou comme valeur de retour de fonction.
Remarque: La sortie ne doit pas contenir de crochets ou de zéros inutiles dans les lancers multiplex. Donc, les sorties contenant [3]
ou [03]
ne sont pas acceptées, vous devez produire à la 3
place. L'ordre des chiffres dans une projection multiplex n'est pas pertinent.
Remarque: Vous pouvez omettre des modèles qui sont des doublons sous permutations cycliques. Par exemple, pour la saisie 3 __
(notez les deux caractères génériques), les deux 42
et 24
sont des réponses valides (entre autres), mais elles décrivent en fait le même modèle. Vous pouvez soit sortir les deux soit juste l'un d'eux, mais vous devrez le faire de manière cohérente.
C'est le code golf , le code le plus court gagne (sous réserve des bonus listés en bas de la question).
Vous pouvez utiliser JugglingLab pour jouer avec les motifs pour voir s'ils sont valides et à quoi ils ressemblent.
Exemples
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.
Bonus
- Si votre réponse peut gérer des "chiffres" jusqu'à 35, indiqués par des lettres (10 = A, 11 = B, ...), soustrayez 20 caractères . Vous pouvez décider si ces lettres doivent être majuscules, minuscules ou insensibles à la casse. (JugglingLab peut les gérer en minuscules si vous souhaitez consulter certains modèles insensés.)
- Si votre réponse génère toutes les solutions valides, soustrayez 20 caractères .
L*n^(n*choose(n+11,n+2))
oùn
est le nombre de caractères génériques etL
le nombre de caractères dans le motif. Pas vraiment efficace.3 __
chaque résultat est deux fois, avec les battements échangés), mais je suppose que c'est plutôt ma faute de ne pas le spécifier. J'ajouterai cependant une clause pour permettre de les omettre si cela aide à économiser des octets.