Діаграма стану стека показує, як значення однієї стеки змінюються на іншу. Наприклад, це схема стану стека:
3 0 2 1 0
Це означає, що існує стек, який спочатку містить 3 значення ( 3частина). Ці значення проіндексовані від 0 до 2, з 0 на вершині: 2 1 0. Наступна частина 0 2 1 0описує остаточний стан стека: значення, яке було спочатку на вершині стека, було скопійовано також на зворотну сторону.
Ці перетворення відбуваються на стеку, який підтримує декілька типів даних:
- Тип "значення" - це те, що спочатку є в стеці. Це може бути рядок, ціле число тощо, але його значення не потрібно знати.
- Тип "список", який представляє собою список, що містить значення будь-якого типу даних.
Для моделювання цього перетворення дозволяються такі операції:
S: Поміняйте два значення на вершині стека:2 1 0→2 0 1D: Скопіюйте значення у верхній частині стека:1 0→1 0 0R: Видаліть верхнє значення зі стека.2 1 0→2 1L: Перетворіть верхнє значення в одноелементний список, що містить це значення: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списки потреб на обох посадах. Немає сенсу поєднувати значення та список.