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 0
descreve 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 1
D
: Duplique o valor no topo da pilha:1 0
→1 0 0
R
: Remova o valor superior da pilha.2 1 0
→2 1
L
: 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 L
pode ser utilizado com quaisquer valores no topo da pilha, mas C
e U
deve ter listas no topo da pilha para a função. Um envio cujas sequências geradas tentam pré-executar operações inválidas (como D
em uma pilha vazia ou U
em 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.
fonte
C
lista 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?C
precisa de listas em ambas as posições. Não faz sentido concatenar um valor e uma lista.Respostas:
Python 3, 84 bytes
Uso:
Explicação: Para começar, duplicamos o zero e o agrupamos em uma lista:
Esta é a nossa base. Agora vou explicar um algoritmo geral que se transforma
... 1 0 (x)
em... 1 0 (i x)
um inteiro arbitrárioi
. Vou usar como exemploi = 2
e temos uma lista arbitrária(x)
. Começamos envolvendo nossa lista atual(x)
em outra lista:Agora, repetimos os seguintes
i
tempos de sequência :Agora estamos prontos para inserir os 2 na lista
(x)
. Isso é o seguinte:Observe que continuamos pressionando novos números inteiros à esquerda. Então o primeiro
(0)
ficamos à direita.Depois de inserir todos os números inteiros necessários na lista, removemos o restante da pilha trocando e removendo n time (
SR
). Finalmente, descompactamos nossa lista e excluímos a primeira0
que inserimos para iniciar nossa lista (UR
).fonte
s
vez del
?l
foi definido no meu REPL.DLLSLSCSLSCSLSCSLSCLSLSCDURLCULCULSCLSLSCSLSCSLSCLSLSCDURLCULCULSCLSLSCSLSCLSLSCDURLCULCULSCLSLSCLSLSCDURLCULCULSCLLSLSCDURLCULCULSCSRSRSRSRUR
). Ele tenta executar umaS
instrução quando há apenas 1 valor na pilha.CJam, 54 bytes
Apenas uma tradução da solução Python da orlp para o CJam. Não há nada novo aqui.
Explicação:
fonte