Діаграма стану стека показує, як значення однієї стеки змінюються на іншу. Наприклад, це схема стану стека:
3 0 2 1 0
Це означає, що існує стек, який спочатку містить 3 значення ( 3
частина). Ці значення проіндексовані від 0 до 2, з 0 на вершині: 2 1 0
. Наступна частина 0 2 1 0
описує остаточний стан стека: значення, яке було спочатку на вершині стека, було скопійовано також на зворотну сторону.
Ці перетворення відбуваються на стеку, який підтримує декілька типів даних:
- Тип "значення" - це те, що спочатку є в стеці. Це може бути рядок, ціле число тощо, але його значення не потрібно знати.
- Тип "список", який представляє собою список, що містить значення будь-якого типу даних.
Для моделювання цього перетворення дозволяються такі операції:
S
: Поміняйте два значення на вершині стека:2 1 0
→2 0 1
D
: Скопіюйте значення у верхній частині стека:1 0
→1 0 0
R
: Видаліть верхнє значення зі стека.2 1 0
→2 1
L
: Перетворіть верхнє значення в одноелементний список, що містить це значення:2 1 0
→2 1 (0)
C
: Об'єднайте два найкращі списки на стеку:2 (1) (0)
→2 (1 0)
U
: Поставте всі значення зі списку на стек:2 (1 0)
→2 1 0
Вони еквівалентні командам Underload~ : ! a * ^
, за умови, що інші команди не використовуються.
S
, D
, R
І L
може використовуватися з будь-якими значеннями на вершині стека, але C
і U
повинні мати списки на вершині стека функції. Подання, згенеровані послідовності намагаються заздалегідь виконати недійсні операції (наприклад, D
у порожній стеці чи U
у списку), є неправильним і має бути покарано виправленим.
Щоб вирішити діаграму стану стека, знайдіть послідовність команд, які правильно перетворять початковий стан стека в новий. Наприклад, одне рішення 3: 0 2 1 0
є LSLCSLCULSLCLSLDCSC USLCU
:
2 1 0
L 2 1 (0)
S 2 (0) 1
L 2 (0) (1)
C 2 (0 1)
S (0 1) 2
L (0 1) (2)
C (0 1 2)
U 0 1 2
L 0 1 (2)
S 0 (2) 1
L 0 (2) (1)
C 0 (2 1)
L 0 ((2 1))
S ((2 1)) 0
L ((2 1)) (0)
D ((2 1)) (0) (0)
C ((2 1)) (0 0)
S (0 0) ((2 1))
C (0 0 (2 1))
U 0 0 (2 1)
S 0 (2 1) 0
L 0 (2 1) (0)
C 0 (2 1 0)
U 0 2 1 0
Ваше завдання - написати програму, яка приймає діаграму стану стека і виводить рішення.
Випробування
2 1 0 ->
3 2 0 -> SR
9 -> RRRRRRRRR
2 0 1 0 -> LSLCDCUR
2 0 1 1 -> SD
6 2 -> RRSRSRSR
5 0 1 2 3 4 -> LSLCSLCSLCSLCU
4 2 0 1 3 2 -> LSLCSLSCSLCULSLSCSLSCLSLDCSCUSLCU
Це код-гольф , тому найкоротша відповідна відповідь (у байтах) виграє.
C
потрібні списки на верхній і другій позиції стека? або елемент на другій позиції може бути доданий до списку вгорі?
C
списки потреб на обох посадах. Немає сенсу поєднувати значення та список.