Su tarea es generar un patrón de malabarismo válido completando una plantilla determinada. Pero primero, probablemente necesite saber cómo se denota ese patrón.
Introducción a Siteswap
Siteswap es la notación establecida para los patrones de malabares Funciona dividiendo el patrón en ritmos. En cada latido, su mano izquierda y derecha se alternan para lanzar una pelota. Cada lanzamiento (es decir, cada latido) se denota con un número que indica cuándo se lanza esa bola a continuación, esto corresponde directamente a la altura del lanzamiento.
Veamos algunos ejemplos. Vea animaciones de todo esto aquí .
Cascada de 3 bolas
El patrón más simple de 3 bolas. Cada bola se lanza en cada tercer tiempo (manos alternas). Al escribir los latidos, esto se ve a continuación (las líneas ASCII conectan dos latidos a los que se lanza la misma bola):
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
└─┼─┼─┘ │ │
└─┼───┘ │
└─────┘
Observe cómo cada bola lanzada en un L
latido, se lanza luego en un R
latido. Los patrones de intercambio de sitios se repiten implícitamente, por lo que este patrón generalmente se denota como 333
, aunque simplemente 3
también sería suficiente.
441
Aquí hay un ejemplo un poco más complicado con el sitewap 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
│ │ └─┘ │ │
└─┼─────┘ │
└───────┘
Observe cómo los lanzamientos pares van a la misma mano desde la que fueron lanzados, mientras que los lanzamientos impares van a la otra mano.
423
A veces solo quieres sostener una pelota durante un tiempo en lugar de lanzarla. Todo eso significa que esta bola se lanza la próxima vez que sea el turno de esta mano, es decir, 2 golpes más tarde. Entonces, sostener una pelota es equivalente a a 2
en el patrón:
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
significa que la mano actual está vacía en ese ritmo, como muestra este patrón:
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
└───┼───┼─┘ │
└───┼─────┘
└───────>
Malabares multiplex
Sin embargo, este problema sería un poco demasiado simple con vanilla siteswap. ¡Ingrese patrones multiplex! El malabarismo múltiple significa que lanzas múltiples bolas de una mano al mismo tiempo. Por ejemplo, en la cascada de 3 bolas anterior, si fueran dos lanzan una bola adicional en cada tercer golpe, el patrón se volvería [33]33
y se vería así:
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
└┴──┼─┼──┴┘ │ │
└─┼──────┘ │
└────────┘
Aquí hay otro ejemplo, donde el tiro multiplex tiene dos alturas / longitudes diferentes. Se podría denotar como [34]11
o [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
││ └─┴──┘│ │
│└────────┘ │
└────────────┘
(Tenga en cuenta que el 1
lanzamiento al compás 2
aterriza al compás 3
e inmediatamente se lanza nuevamente (como otro 1
) para aterrizar al compás 4
y ser parte del segundo lanzamiento múltiple).
El intercambio de sitios para la animación al comienzo de esta publicación fue [53]15121
.
Validez del patrón
Para que un patrón sea semánticamente válido, el número de bolas en una mano debe corresponder siempre al número de lanzamientos indicados en ese tiempo. Esto significa que no debe haber bolas que caigan a un ritmo con un 0
, debe haber solo una bola que caiga a un ritmo con cualquier otro dígito, y debe haber n bolas que caigan a un ritmo múltiple, donde n es el número de dígitos en ese tiro multiplex. El patrón también debe poder repetirse sin problemas.
Ejemplos de patrones inválidos son 543
(todas las bolas aterrizarían en el mismo tiempo), 240
(la 2
tierra aterrizaría en el 0
tiempo) o 33[24]
(ninguna bola cae en el tiempo multiplex, pero dos bolas caen en los otros dos tiempos).
El reto
Tomará un patrón de intercambio de sitios que contiene comodines y generará un patrón válido, con esos comodines rellenados.
Tome como entrada (a través de stdin, argumento de línea de comando, archivo o parámetro de función) una cadena del formato
n s
Donde n
es un número entero que indica el número de bolas que se utilizarán, y s
es un patrón de intercambio de sitios ( sin espacios en blanco). Puede suponer que es sintácticamente correcto: todos los corchetes coinciden y no están anidados, y no hay caracteres inesperados. Todos los lanzamientos serán de un solo dígito ( 0
- 9
). Sin embargo , algunos ritmos solo se pueden denotar como a _
, que se debe completar con un solo o un lanzamiento múltiple en la salida.
Nota: algo así como [_3]
lo que no sea parte de la entrada. O falta todo el tiempo o se da el tiempo completo.
Produce un patrón válido, que puede ser malabarizado con el número dado de bolas y concuerda con el patrón de entrada en todos los tiempos especificados. Si no es posible un patrón válido con las entradas dadas, salida !
. La salida también se realizará a través de stdout, a un archivo o como un valor de retorno de función.
Nota: La salida no debe contener corchetes o ceros innecesarios en tiros multiplex. Por lo tanto, las salidas que contienen [3]
o [03]
no son aceptadas, debe generarlas en su 3
lugar. El orden de los dígitos en un lanzamiento múltiple no es relevante.
Nota: Usted puede omitir patrones que son duplicados bajo permutaciones cíclicas. Por ejemplo, para la entrada 3 __
(tenga en cuenta los dos comodines), ambos 42
y 24
son respuestas válidas (entre otros), pero que en realidad describen el mismo patrón. Puede generar ambos o solo uno de ellos, pero tendrá que hacerlo de manera consistente.
Este es el código de golf , el código más corto gana (sujeto a los bonos enumerados al final de la pregunta).
Puede usar JugglingLab para jugar con patrones para ver si son válidos y cómo se ven.
Ejemplos
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.
Bonos
- Si su respuesta puede manejar "dígitos" hasta 35, denotados por letras (10 = A, 11 = B, ...), reste 20 caracteres . Puede decidir si esas letras deben ser mayúsculas, minúsculas o mayúsculas y minúsculas. (JugglingLab puede manejarlos en minúsculas si desea ver algunos patrones locos).
- Si su respuesta genera todas las soluciones válidas, reste 20 caracteres .
L*n^(n*choose(n+11,n+2))
dónden
está la cantidad de comodines yL
la cantidad de caracteres en el patrón. No exactamente eficiente.3 __
tiene cada resultado dos veces, con los latidos intercambiados), pero supongo que es mi culpa por no especificar eso. Sin embargo, agregaré una cláusula para permitir omitirlos si eso ayuda a guardar bytes.