영감
이 질문은 유명한 데크 빌딩 카드 게임 Dominion 의 Throne Room과 King 's Court 카드에서 영감을 얻었습니다 .

차례의 일환으로 일련의 행동을 취합니다. 이 두 가지 특정 동작으로 인해 다음에 수행 할 동작이 두세 번 반복됩니다 *. 다른 "일반적인"행동은 특정 게임 효과를 유발하지만, 우리는 특정 내용에 관심이 없으며 단순히 글자로 레이블을 붙입니다.
흥미로운 사례는 왕좌 또는 왕의 법원이 다른 왕좌의 왕실의 방에 영향을 주어 배가 또는 삼중 효과가 두 배 또는 세 배가되는 경우입니다. 왕좌의 긴 사슬, 왕궁, 여러 번의 행동으로 숙련 된 도미니언 플레이어들조차 혼란을 줄 수 있습니다.
목표는 가능한 적은 바이트를 사용하여 이러한 체인을 올바르게 해결하는 코드를 작성하는 것입니다. 체인이 Dominion 규칙에서 어떻게 해결되는지 설명하기 전에 프로그램 요구 사항에 대해 설명하겠습니다.
* 기술적으로, 당신은 왕좌 또는 왕궁 해결의 일부로 영향을받는 행동을 선택하지만,이 견해는이 도전에 더 깨끗합니다.
프로그램 요구 사항
쓰기 프로그램 이나 라는 이름의 기능을 . 재생되는 동작 체인 (STDIN 또는 기능 입력)을 가져 와서 이중 및 삼중 효과에서 결과 동작 체인을 출력하거나 인쇄해야합니다. 가장 적은 바이트가 이깁니다.
입력
재생되는 일련의 동작을 나타내는 문자열입니다. 일반 작업은을 A통해 대문자로 표시됩니다 Z. 왕좌 방은 문자로 표현되는 특수 배가 액션 2, 그리고 배로 작용에 의해 왕의 법원 3,
문자 수 (동작)는 1에서 30 (포함) 사이입니다. 원하는 경우 입력 줄 바꿈을 줄 바꿈 할 수 있습니다.
입력 예 : WA23G3GA
산출
대문자의 문자열 A에 Z. 두 배의 효과와 트리플 효과를 발생하는 순서대로 해결하는 일련의 일반적인 동작이어야합니다.
원하는 경우 출력을 줄 바꿈으로 끝낼 수 있습니다. 그렇지 않으면 추가 문자가 없어야합니다.
출력 예 : WAGGGGGGAAA.
Dominion에서 더블링 및 트리플 링 작동 방식
자, 내가 통해 어떻게 왕좌 방 체인 (갈거야 2'들)과 왕의 법원 ( 3도미 규칙에 따라의) 작동합니다.
을 재생하면 2해결해야 할 다음 동작이 두 번 발생합니다. 처음 플레이한다면, 2다음 A, 당신은 얻을 A두 번 일어나고.
2A -> AA
비슷하게,
A2BC -> ABBC
3DE -> DDDE
3N2BC3XY2 -> NNNBBCXXXY
마지막 예에서 결승 2은 두 배가 될 것이 없으므로 아무런 영향을 미치지 않습니다.
두 배 또는 세 배의 효과가 두 배 또는 세 배가되면 흥미로운 일이 발생합니다. 예를 들어
22AB -> AABB
먼저을 재생 2합니다. 그런 다음 다른을 재생 2하면 이전보다 두 배가됩니다 2. 결과적으로 다음 두 동작이 두 배가됩니다. 먼저, 두 개의 사본이 A해결됩니다. 그런 다음 확인 사본 B.
참고 A의 첫 번째 복사 한 후 : 배로되지 않은 2최초의 행위 A, 다음 카피는 다음 해결되지 않은 조치에 작용한다 B. 포함하지 않는 B, 우리는 거라고
22A -> AA
여기서 두 번째 사본은 2다음 동작이 두 배가되기를 기다리는 중이지만 동작이 없습니다.
마지막으로 복잡한 예를 살펴 보겠습니다.
223BCDE -> BBBCCCDDE
이전과 마찬가지로 첫 번째 2는 두 번째 2를 두 배로 만듭니다. 따라서 다음 두 동작이 두 배가됩니다. 첫 번째 사본은 2다음 조치 를 두 배로 늘리며 다음 조치를 3해결하기 전에 완전히 해결해야합니다 2. 3트리플 의 첫 번째 사본과 트리플 의 세 B번째 사본 C. 이제 여전히 대기중인 두 번째 사본은 2다음으로 해결되지 않은 다음 조치 인 2 배가됩니다 D. 그 후에도 배가되거나 배가되는 효과가 없으며 최종 조치 E가 발생합니다.
테스트 사례
이들은로 주어진다 (input,output).
(FY, FY)
(A2BC, ABBC)
(3DE, DDDE)
(3N2BC3XY2, NNNBBCXXXY)
(WA23G3GA, WAGGGGGGAAA)
(32, )
(33RST, RRRSSSTTT)
(2A32B2CDEFG, AABBCCDDEEFG)
(A2A323AB2CD2D2E3ABC, AAAAAABBBCCDDDDEEAAABBBC)
(P22LL3Q2Q22T, PLLLLQQQQQTT)
(322322ABCDEFGHIJKLMN, AABBCCDDEEEFFGGHHIJKLMN)
1곱하지 않은 동작을 곱한 동작과 동일하게 처리하기 위해 스택 아래 에를 밀어 넣는 트릭이 마음에 듭니다. 다양한 스택을 저글링하는 방법에 대해 더 자세히 설명해 주시겠습니까? 특히 "rep 스택을 맨 위로 가져 오려면"어떻게해야합니까?