Um diagrama de estado da pilha mostra como os valores em uma pilha são alterados na outra. Por exemplo, este é um diagrama de estado da pilha:
3 0 2 1 0
Isso significa que existe inicialmente uma pilha contendo 3 valores (o 3 peça). Estes valores são indexados de 0 a 2, com 0 no topo: 2 1 0. A próxima parte 0 2 1 0descreve o estado final da pilha: o valor que estava originalmente no topo da pilha também foi copiado para trás.
Essas transformações ocorrem em uma pilha que suporta vários tipos de dados:
- O tipo "value", que é originalmente o que está na pilha. Pode ser uma string, um número inteiro etc., mas seu valor não precisa ser conhecido.
- O tipo "lista", que é uma lista que contém valores de qualquer tipo de dados.
Para modelar essa transformação, as seguintes operações são permitidas:
S: Troque os dois valores no topo da pilha:2 1 0→2 0 1D: Duplique o valor no topo da pilha:1 0→1 0 0R: Remova o valor superior da pilha.2 1 0→2 1L: Transforme o valor superior em uma lista de um elemento que contém esse valor:2 1 0→2 1 (0)C: Concatene as duas principais listas da pilha:2 (1) (0)→2 (1 0)U: Coloque todos os valores de uma lista na pilha:2 (1 0)→2 1 0
Eles são equivalentes aos comandos Underload~ : ! a * ^ , desde que nenhum outro comando seja usado.
S, D, R, E Lpode ser utilizado com quaisquer valores no topo da pilha, mas Ce Udeve ter listas no topo da pilha para a função. Um envio cujas sequências geradas tentam pré-executar operações inválidas (como Dem uma pilha vazia ou Uem uma não-lista) está errado e deve ser punido com correção.
Para resolver um diagrama de estado da pilha, encontre uma sequência de comandos que transformarão corretamente o estado inicial da pilha no novo. Por exemplo, uma solução para 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
Sua tarefa é escrever um programa que pega um diagrama de estado da pilha e gera uma solução.
Casos de teste
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
Isso é código-golfe , então a resposta mais curta e válida (em bytes) vence.
Clista de necessidades está na primeira e na segunda posição da pilha? ou o elemento na segunda posição pode ser adicionado a uma lista no topo?
Cprecisa de listas em ambas as posições. Não faz sentido concatenar um valor e uma lista.