Inspiração
Essa pergunta é inspirada nas cartas Throne Room e King's Court do popular jogo de cartas Dominion .
Como parte de sua vez, desempenha-se uma sequência de ações. Essas duas ações específicas fazem com que a próxima ação seja repetida duas ou três vezes *. Outras ações "genéricas" causam efeitos específicos no jogo, mas não estaremos interessados nos detalhes, simplesmente rotulá-los com letras.
O caso interessante é quando uma Sala do Trono ou Corte do Rei afeta outra Sala do Trono da Corte do Rei, fazendo com que o efeito de duplicação ou triplicação seja duplicado ou triplicado. Longas cadeias de salas do trono, cortes do rei e ações multiplicadas podem confundir até jogadores experientes do Dominion.
Seu objetivo é escrever um código que resolva corretamente essas cadeias, usando o mínimo de bytes possível. Descreverei os requisitos do programa antes de explicar como as cadeias se resolvem nas regras de domínio.
* Tecnicamente, você escolhe a ação afetada como parte da resolução da Sala do Trono ou da Corte do Rei, mas essa visão é mais limpa para esse desafio.
Requisitos do programa
Escreva um programa ou função nomeada . Ele deve incluir a cadeia de ações executadas (STDIN ou entrada de função) e gerar ou imprimir a cadeia de ações resultante a partir dos efeitos da duplicação e triplicação. Menos bytes ganha.
Entrada
Uma sequência que representa a sequência de ações executadas. Ações genéricos são representados por letras maiúsculas A
através Z
. A ação especial de duplicação, Throne Room, é representada pelo personagem 2
, e a ação triplicadora de King's Court por 3
,
O número de caracteres (ações) estará entre 1 e 30, inclusive. Você pode ter a entrada final em uma nova linha, se desejar.
Exemplo de entrada: WA23G3GA
Resultado
Uma sequência de letras maiúsculas A
para Z
. Essa deve ser a sequência de ações genéricas que resultam da resolução dos efeitos de duplicação e triplicação, na ordem em que ocorrem.
Você pode ter a saída final em uma nova linha, se desejar. Caso contrário, não deve haver caracteres adicionais.
Exemplo de saída: WAGGGGGGAAA
.
Como duplicar e triplicar funciona em Dominion
Aqui, mostrarei como as cadeias de salas do trono 2
e as cortes do rei 3
funcionam de acordo com as regras do domínio.
Depois de jogar a 2
, a próxima ação a ser resolvida acontece duas vezes. Então, se você primeiro jogar 2
, então A
, você começa A
a acontecer duas vezes.
2A -> AA
Similarmente,
A2BC -> ABBC
3DE -> DDDE
3N2BC3XY2 -> NNNBBCXXXY
Observe no último exemplo que a final 2
não teve nada para dobrar, por isso não teve efeito.
O interessante acontece quando os efeitos de duplicação ou triplicação são eles mesmos duplicados ou triplicados. Por exemplo,
22AB -> AABB
Primeiro você joga 2
. Então, você joga outro 2
, que é duplicado do anterior 2
. Como resultado, as próximas duas ações são duplicadas. Primeiro, as duas cópias da A
resolução. Então, as cópias da B
resolução.
Observe que A
não é quadruplicado: após a primeira cópia dos 2
atos no primeiro A
, a próxima cópia atua na próxima ação não resolvida, que é B
. Sem o B
, teríamos
22A -> AA
onde a segunda cópia de 2
está aguardando a próxima ação dobrar, mas nenhuma ação ocorre.
Finalmente, vejamos um exemplo complexo.
223BCDE -> BBBCCCDDE
Como antes, o primeiro 2
faz com que o segundo 2
seja dobrado. Portanto, as próximas duas ações serão duplicadas. A primeira cópia de 2
duplica a próxima ação 3
, que deve ser resolvida completamente antes de resolver a próxima cópia de 2
. A primeira cópia de 3
triplos B
e a segunda cópia triplica C
. Agora, a segunda cópia ainda em espera 2
dobra a próxima ação ainda não resolvida, que é D
. Depois disso, nenhum efeito de duplicação ou triplicação permanece, e a ação final E
simplesmente acontece.
Casos de teste
Estes são dados 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
para baixo da pilha para tratar ações não multiplicadas da mesma forma que ações multiplicadas. Poderia, por favor, explicar mais sobre como você manipula as várias pilhas? Em particular, o que \ faz para "trazer a pilha de repetições para o topo"?