Натхнення
Це питання натхнене картками Throne Room та King's Court від популярної карткової гри Dominion .
У рамках своєї черги людина відтворює послідовність дій. Ці дві конкретні дії призводять до повторення наступної відтвореної дії два-три рази *. Інші "загальні" дії спричиняють конкретні ігрові ефекти, але нас не цікавлять деталі, просто позначивши їх літерами.
Цікавий випадок, коли Тронний зал або Королівський суд впливає на іншу Тронну кімнату Королівського двору, внаслідок чого ефект подвоєння або потроєння сам по собі збільшується вдвічі або втричі. Довгі ланцюги номерів престолів, королівські суди та багаторазові дії можуть збентежити навіть досвідчених гравців Домініону.
Ваша мета - написати код, який правильно розв’язує ці ланцюги, використовуючи якомога менше байтів. Я опишу вимоги до програми, перш ніж поясню, як ланцюги вирішуються в правилах Dominion.
* Технічно ви обираєте дію, на яку постраждали, як частину рішення Тронної кімнати або Королівського двору, але ця думка є більш чистою для цього виклику.
Вимоги до програми
Напишіть програму або названу функцію . Він повинен виконувати ланцюжок відтворених дій (STDIN або функція введення) та виводити або друкувати результуючу ланцюжок дій з ефектів подвоєння та утроєння. Виграє найменше байт.
Вхідні дані
Рядок, що представляє послідовність відтворених дій. Родові дії представлені великими літерами A
наскрізь Z
. Спеціальна дія подвоєння "Тронна кімната" представлена персонажем 2
, а подвоєне дійство "Царський двір" 3
-
Кількість символів (дій) буде від 1 до 30 включно. За бажанням у вас може бути кінець вводу в новому рядку.
Приклад введення: WA23G3GA
Вихідні дані
Рядок з великої літери A
до Z
. Це має бути послідовність родових дій, що виникає в результаті вирішення подвоєних та потрійних ефектів у порядку, ніж вони відбуваються.
Ви можете мати кінець виходу в новому рядку, якщо бажаєте. В іншому випадку не повинно бути додаткових символів.
Приклад виведення: WAGGGGGGAAA
.
Як працює подвоєння та потроєння в Домініоні
Тут я перегляну, як працюють ланцюги кімнат престолів 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
подвоює наступну ще не вирішену дію, яка є 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
під стек трактує необмежені дії так само, як і множинні. Не могли б ви пояснити більше про те, як ви жонглюєте різними стеками? Зокрема, що \ робить, щоб "довести стек реп до вершини"?