Ispirazione
Questa domanda è ispirata alle carte Throne Room e King's Court del famoso gioco di carte per la costruzione di mazzi Dominion .
Come parte del proprio turno, si gioca una sequenza di azioni. Queste due azioni particolari fanno ripetere l'azione successiva per due o tre volte *. Altre azioni "generiche" causano effetti di gioco specifici, ma non saremo interessati ai dettagli, semplicemente etichettandoli con lettere.
Il caso interessante è quando una Throne Room o King's Court colpisce un'altra Throne Room di King's Court, facendo raddoppiare o triplicare l'effetto di raddoppiare o triplicare. Le lunghe catene di stanze del trono, re corti e azioni moltiplicate possono confondere anche i giocatori dominatori esperti.
Il tuo obiettivo è scrivere codice che risolva correttamente queste catene, usando il minor numero di byte possibile. Descriverò i requisiti del programma prima di spiegare come le catene si risolvono nelle regole del Dominio.
* Tecnicamente, scegli l'azione interessata come parte della risoluzione di Throne Room o King's Court, ma questa visione è più chiara per questa sfida.
Requisiti del programma
Scrivi un programma o una funzione denominata . Dovrebbe includere la catena di azioni eseguite (STDIN o input di funzione) e produrre o stampare la catena di azioni risultante dagli effetti del raddoppio e del triplo. Vince il minor numero di byte.
Ingresso
Una stringa che rappresenta la sequenza di azioni eseguite. Azioni generiche sono rappresentate da lettere maiuscole A
attraverso Z
. La speciale azione di raddoppio Throne Room è rappresentata dal personaggio 2
e l'azione tripla King's Court di 3
,
Il numero di personaggi (azioni) sarà compreso tra 1 e 30, inclusi. Se lo desideri, potresti avere la fine dell'input in una riga.
Esempio di input: WA23G3GA
Produzione
Una stringa di lettere maiuscole A
a Z
. Questa dovrebbe essere la sequenza di azioni generiche che risulta dalla risoluzione degli effetti di raddoppio e triplicazione, nell'ordine in cui si verificano.
Se lo desideri, potresti avere l'output in una nuova riga. Altrimenti non dovrebbero esserci caratteri aggiuntivi.
Uscita Esempio: WAGGGGGGAAA
.
Come funziona il raddoppio e il triplo in Dominion
Qui, esaminerò il modo in cui le catene di stanze del trono 2
e le corti del re 3
funzionano secondo le regole del dominio.
Dopo aver giocato a 2
, l'azione successiva da risolvere si verifica due volte. Quindi, se giochi per la prima volta 2
, poi A
, ti A
accadranno due volte.
2A -> AA
Allo stesso modo,
A2BC -> ABBC
3DE -> DDDE
3N2BC3XY2 -> NNNBBCXXXY
Nota nell'ultimo esempio che la finale 2
non aveva nulla da raddoppiare, quindi non ha avuto alcun effetto.
La cosa interessante accade quando gli effetti di raddoppio o triplicazione vengono raddoppiati o triplicati. Per esempio,
22AB -> AABB
Per prima cosa suoni 2
. Quindi ne giochi un altro 2
, che è raddoppiato rispetto al precedente 2
. Di conseguenza, le due azioni successive vengono raddoppiate. Innanzitutto, le due copie di A
risoluzione. Quindi, le copie di B
risoluzione.
Si noti che A
non è quadruplicato: dopo la prima copia di 2
atti sul primo A
, la copia successiva agisce sull'azione successiva non risolta, che è B
. Senza il B
, avremmo
22A -> AA
dove la seconda copia di 2
è in attesa che la prossima azione raddoppi, ma non arriva alcuna azione.
Infine, diamo un'occhiata a un esempio complesso.
223BCDE -> BBBCCCDDE
Come prima, la prima 2
fa 2
raddoppiare la seconda . Quindi, le prossime due azioni saranno raddoppiate. La prima copia di 2
raddoppia l'azione successiva 3
, che deve essere risolta completamente prima di risolvere la copia successiva di 2
. La prima copia di 3
triple B
e la seconda copia di triple C
. Ora, la seconda copia ancora in attesa di 2
raddoppia la prossima azione ancora irrisolta, che è D
. Dopo questo, non rimangono effetti di raddoppio o triplo e l'azione finale E
semplicemente accade.
Casi test
Questi sono dati come (input,output)
.
(FY, FY)
(A2BC, ABBC)
(3DE, DDDE)
(3N2BC3XY2, NNNBBCXXXY)
(WA23G3GA, WAGGGGGGAAA)
(32, )
(33RST, RRRSSSTTT)
(2A32B2CDEFG, AABBCCDDEEFG)
(A2A323AB2CD2D2E3ABC, AAAAAABBBCCDDDDEEAAABBBC)
(P22LL3Q2Q22T, PLLLLQQQQQTT)
(322322ABCDEFGHIJKLMN, AABBCCDDEEEFFGGHHIJKLMN)
1
sotto la pila per trattare le azioni non moltiplicate come quelle moltiplicate. Potresti spiegare di più su come si destreggiano tra le varie pile? In particolare, cosa fa \ "per portare in cima lo stack di rep"?