Inspiracja
To pytanie jest inspirowane kartami Sala Tronowa i King's Court z popularnej gry karcianej Dominion .
W ramach swojej tury wykonuje się sekwencję akcji. Te dwie szczególne akcje powodują, że kolejna gra powtarza się dwa lub trzy razy *. Inne „ogólne” działania powodują określone efekty w grze, ale nie będziemy zainteresowani szczegółami, po prostu oznaczając je literami.
Interesujący jest przypadek, gdy Sala Tronowa lub Dwór Królewski wpływa na inną Salę Tronową Dworu Królewskiego, powodując podwojenie lub potrojenie efektu podwojenia lub potrojenia. Długie łańcuchy Sal Tronowych, Sądy Króla i zwielokrotnione akcje mogą dezorientować nawet doświadczonych graczy Dominium.
Twoim celem jest napisanie kodu, który poprawnie rozwiąże te łańcuchy, używając jak najmniej bajtów. Opiszę wymagania programu przed wyjaśnieniem, w jaki sposób łańcuchy rozwiązują reguły Dominium.
* Technicznie rzecz biorąc, wybierasz akcję, której dotyczy problem w ramach rozpatrywania sali tronowej lub królewskiego dworu, ale ten widok jest bardziej przejrzysty w przypadku tego wyzwania.
Wymagania programowe
Napisz program lub nazwaną funkcję . Powinien przyjmować łańcuch wykonanych akcji (STDIN lub wejście funkcji) i generować lub drukować wynikowy łańcuch działań na podstawie efektów podwojenia i potrojenia. Wygrywa najmniej bajtów.
Wejście
Ciąg reprezentujący sekwencję odtwarzanych akcji. Działania ogólne są reprezentowane przez wielkie litery A
za pomocą Z
. Specjalna akcja podwajania Sala tronowa jest reprezentowana przez postać 2
, a potrójna akcja Królewski Dwór przez 3
,
Liczba znaków (akcji) będzie wynosić od 1 do 30 włącznie. Jeśli chcesz, możesz wprowadzić koniec w nowej linii.
Przykładowe dane wejściowe: WA23G3GA
Wynik
Ciąg wielkich liter A
do Z
. Powinna to być sekwencja działań ogólnych, które wynikają z rozwiązania efektu podwojenia i potrojenia w kolejności, w jakiej występują.
Jeśli chcesz, możesz mieć koniec wyjściowy w nowej linii. W przeciwnym razie nie powinno być żadnych dodatkowych znaków.
Przykład Wydajność: WAGGGGGGAAA
.
Jak działa podwojenie i potrojenie w Dominion
Tutaj omówię, jak działają sieci pokojów tronowych 2
i sądy królewskie 3
zgodnie z zasadami Dominium.
Po zagraniu a 2
następna akcja, która ma zostać rozstrzygnięta, odbywa się dwa razy. Jeśli więc po raz pierwszy zagrasz 2
, zdarzy A
się A
to dwa razy.
2A -> AA
Podobnie,
A2BC -> ABBC
3DE -> DDDE
3N2BC3XY2 -> NNNBBCXXXY
Zauważ w ostatnim przykładzie, że finał 2
nie miał nic do podwojenia, więc nie miał żadnego efektu.
Interesująca rzecz dzieje się, gdy efekty podwojenia lub potrojenia same się podwoją lub potroją. Na przykład,
22AB -> AABB
Najpierw grasz 2
. Następnie grasz w inną 2
, która jest podwojona w stosunku do poprzedniej 2
. W rezultacie kolejne dwa działania są podwojone. Po pierwsze, dwie kopie A
postanowienia. Następnie kopie B
postanowienia.
Zauważ, że A
nie jest czterokrotnie: po pierwszej kopii 2
aktów pierwszego A
, kolejna kopia działa na następną nierozwiązaną akcję, czyli B
. Bez tego B
mielibyśmy
22A -> AA
gdzie druga kopia 2
oczekuje na podwojenie następnej akcji, ale żadna akcja nie nadchodzi.
Na koniec spójrzmy na złożony przykład.
223BCDE -> BBBCCCDDE
Tak jak poprzednio, pierwszy 2
powoduje 2
podwojenie drugiego . Kolejne dwa działania zostaną podwojone. Pierwsza kopia 2
podwaja kolejną akcję 3
, którą należy rozwiązać całkowicie przed rozpatrzeniem kolejnej kopii 2
. Pierwsza kopia 3
trójek B
, a druga kopia trójek C
. Teraz, jeszcze czekająca druga kopia 2
podwaja kolejną wciąż nierozwiązaną akcję, czyli D
. Po tym nie zostają już żadne efekty podwojenia lub potrojenia, a ostateczna akcja E
po prostu się dzieje.
Przypadki testowe
Są one podane jako (input,output)
.
(FY, FY)
(A2BC, ABBC)
(3DE, DDDE)
(3N2BC3XY2, NNNBBCXXXY)
(WA23G3GA, WAGGGGGGAAA)
(32, )
(33RST, RRRSSSTTT)
(2A32B2CDEFG, AABBCCDDEEFG)
(A2A323AB2CD2D2E3ABC, AAAAAABBBCCDDDDEEAAABBBC)
(P22LL3Q2Q22T, PLLLLQQQQQTT)
(322322ABCDEFGHIJKLMN, AABBCCDDEEEFFGGHHIJKLMN)
1
pod stos, aby traktować nieprzemnożone akcje tak samo jak pomnożone. Czy mógłbyś wyjaśnić więcej na temat żonglowania różnymi stosami? W szczególności, co \ robi, aby „przenieść stos powtórzeń na szczyt”?