Inspiración
Esta pregunta está inspirada en las cartas Throne Room y King's Court del popular juego de cartas Dominion .
 
Como parte de su turno, uno juega una secuencia de acciones. Estas dos acciones particulares hacen que la acción que se juega a continuación se repita dos o tres veces *. Otras acciones "genéricas" causan efectos específicos del juego, pero no nos interesarán los detalles, simplemente etiquetándolos con letras.
El caso interesante es cuando una Sala del Trono o la Corte del Rey afecta a otra Sala del Trono de la Corte del Rey, haciendo que el efecto de duplicación o triplicación se duplique o triplique. Las largas cadenas de Salas del Trono, los Tribunales del Rey y las acciones multiplicadas pueden confundir incluso a los jugadores de Dominion con experiencia.
Su objetivo es escribir código que resuelva correctamente estas cadenas, utilizando la menor cantidad de bytes posible. Describiré los requisitos del programa antes de explicar cómo se resuelven las cadenas en las reglas de Dominion.
* Técnicamente, eliges la acción afectada como parte de la resolución de Throne Room o King's Court, pero esta vista es más limpia para este desafío.
Requerimientos del programa
Escribir un programa o función con nombre . Debe incluir la cadena de acciones jugadas (STDIN o entrada de función) y generar o imprimir la cadena de acciones resultante de los efectos de duplicar y triplicar. Pocos bytes ganan.
Entrada
Una cadena que representa la secuencia de acciones jugadas. Las acciones genéricas se representan con letras mayúsculas a Através Z. La acción especial de duplicación Throne Room está representada por el personaje 2, y la acción de triplicar King's Court por 3,
El número de caracteres (acciones) estará entre 1 y 30, inclusive. Puede hacer que la entrada finalice en una nueva línea si lo desea.
Entrada de ejemplo: WA23G3GA 
Salida
Una cadena de letras mayúsculas Apara Z. Esta debería ser la secuencia de acciones genéricas que resultan de resolver los efectos de duplicación y triplicación, en el orden en que ocurren.
Puede hacer que la salida finalice en una nueva línea si lo desea. No debería haber caracteres adicionales de lo contrario.
Ejemplo de salida: WAGGGGGGAAA.
Cómo funciona duplicar y triplicar en Dominion
Aquí, analizaré cómo funcionan las cadenas de Salas del Trono ( 2's) y Tribunales del Rey ( 3' s) según las reglas de Dominion.
Después de jugar a 2, la siguiente acción a resolver ocurre dos veces. Entonces, si juegas por primera vez 2, entonces Ate Asuceden dos veces.
2A -> AA
Similar,
A2BC -> ABBC
3DE -> DDDE
3N2BC3XY2 -> NNNBBCXXXY
Tenga en cuenta en el último ejemplo que la final 2no tenía nada que duplicar, por lo que no tuvo ningún efecto.
Lo interesante sucede cuando los efectos de duplicación o triplicación se duplican o triplican. Por ejemplo,
22AB -> AABB
Primero juegas 2. Luego, juegas otro 2, que se duplica al anterior 2. Como resultado, las siguientes dos acciones se duplican. Primero, las dos copias de la Aresolución. Luego, las copias de la Bresolución.
Tenga en cuenta que Ano se cuadruplica: después de la primera copia de los 2actos en el primero A, la siguiente copia actúa en la siguiente acción no resuelta, que es B. Sin el B, tendríamos
22A -> AA
donde la segunda copia de 2está esperando que la próxima acción se duplique, pero no se produce ninguna acción.
Finalmente, veamos un ejemplo complejo.
223BCDE -> BBBCCCDDE
Como antes, el primero 2hace que el segundo 2se duplique. Entonces, las siguientes dos acciones se duplicarán. La primera copia de 2duplica la siguiente acción 3, que debe resolverse por completo antes de resolver la siguiente copia de 2. La primera copia de 3triples B, y la segunda copia se triplica C. Ahora, la segunda copia aún pendiente de 2duplica la próxima acción aún sin resolver, que es D. Después de esto, no quedan efectos de duplicación o triplicación, y la acción final Esimplemente sucede.
Casos de prueba
Estos se dan como (input,output).
(FY, FY)
(A2BC, ABBC)
(3DE, DDDE)
(3N2BC3XY2, NNNBBCXXXY)
(WA23G3GA, WAGGGGGGAAA)
(32, )
(33RST, RRRSSSTTT)
(2A32B2CDEFG, AABBCCDDEEFG)
(A2A323AB2CD2D2E3ABC, AAAAAABBBCCDDDDEEAAABBBC)
(P22LL3Q2Q22T, PLLLLQQQQQTT)
(322322ABCDEFGHIJKLMN, AABBCCDDEEEFFGGHHIJKLMN)
                
1's debajo de la pila para tratar las acciones no multiplicadas de la misma manera que las multiplicadas. ¿Podrías explicar más acerca de cómo hacer malabares con las diferentes pilas? En particular, ¿qué hace \ para "llevar la pila de repeticiones a la cima"?Javascript -
162152bytesMinified:
Expandido:
Supongo que los lenguajes de golf basados en pila matarán a este, ya que es básicamente un ejercicio de apilamiento de funciones. :PAG
Resultados de muestra
fuente
2/3casos juntos?xdirectamente sin copiarlo primero en una variablebdelimitada al lambda interno, pero Firefox no evalúa la condición del bucle correctamente. Específicamente, sexvuelve negativo y el navegador se cuelga. Intente reemplazar, b = x; b--;con; x--;y ejecute la entradaA2A323AB2CD2D2E3ABC. Si alguien que lee esto puede descubrir por qué, ...C,
115111 bytesUtiliza entrada / salida estándar.
Guardado 4 usando
memsety haciendo que la pila vaya en la otra dirección.Sin golf
fuente
Pitón (84)
Ses la pila de multiplicadores (arriba si está al frente). Se inicializa con suficientes1para manejar acciones no multiplicadas.Dependiendo de si la acción actual
ces genérica o no, agregamos su resultado multiplicado a la salidaRo a la pila de multiplicadoresS.Todo se representa como una cadena en lugar de una lista de caracteres. Debido a que las cadenas son inmutables, desafortunadamente no podemos usar
popo asignar elementos en ellas.fuente