영감
이 질문은 유명한 데크 빌딩 카드 게임 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 스택을 맨 위로 가져 오려면"어떻게해야합니까?