Диаграмма состояния стека показывает, как значения одного стека меняются на другие. Например, это диаграмма состояний стека:
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нужны списки на обе позиции. Не имеет смысла объединять значение и список.