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 A
travé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 A
para 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 A
te A
suceden dos veces.
2A -> AA
Similar,
A2BC -> ABBC
3DE -> DDDE
3N2BC3XY2 -> NNNBBCXXXY
Tenga en cuenta en el último ejemplo que la final 2
no 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 A
resolución. Luego, las copias de la B
resolución.
Tenga en cuenta que A
no se cuadruplica: después de la primera copia de los 2
actos 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 2
está 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 2
hace que el segundo 2
se duplique. Entonces, las siguientes dos acciones se duplicarán. La primera copia de 2
duplica la siguiente acción 3
, que debe resolverse por completo antes de resolver la siguiente copia de 2
. La primera copia de 3
triples B
, y la segunda copia se triplica C
. Ahora, la segunda copia aún pendiente de 2
duplica 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 E
simplemente 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/3
casos juntos?x
directamente sin copiarlo primero en una variableb
delimitada al lambda interno, pero Firefox no evalúa la condición del bucle correctamente. Específicamente, sex
vuelve 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
memset
y haciendo que la pila vaya en la otra dirección.Sin golf
fuente
Pitón (84)
S
es la pila de multiplicadores (arriba si está al frente). Se inicializa con suficientes1
para manejar acciones no multiplicadas.Dependiendo de si la acción actual
c
es genérica o no, agregamos su resultado multiplicado a la salidaR
o 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
pop
o asignar elementos en ellas.fuente