Este desafio foi publicado como parte do desafio do LotM de abril de 2018
Brain-Flak é uma linguagem turp-tarpit que ganhou bastante fama aqui no PPCG. A memória da língua é composto por duas pilhas, mas um "escondido" terceira pilha foi descoberto por Wh e na Wizard , levando a algumas novas formas interessantes de pensar programas Brain-Flak.
Então, que tal dar mais visibilidade à pobre terceira pilha escondida? Vamos criar uma linguagem em que a terceira pilha tenha o reconhecimento que merece! Aqui eu apresento o Terceiro Flak .
O idioma
No Third-Flak, existe apenas uma pilha, chamada terceira pilha. Operadores trabalham no terceiro pilha da mesma forma que fazem em Brain-Flak, mas aqui não há []
, {}
, <>
nilads e nenhuma {...}
mônada (assim os personagens única admissível em um terceiro programa-Flak são ()[]<>
). Aqui está o que cada operador faz (exemplos serão apresentados representando a terceira pilha com uma lista em que o último elemento é o topo da pilha):
()
é o único operador de dois caracteres no Third-Flak. Aumenta o topo da terceira pilha em 1. Exemplo:[1,2,3]
→[1,2,4]
(
,[
,<
: Todos os parênteses abertura que não estão abrangidos pelo processo anterior empurrar uma0
para a terceira pilha. Exemplo:[1,2,3]
→[1,2,3,0]
)
aparece dois elementos da terceira pilha e empurra sua soma. Exemplo:[1,2,3]
→[1,5]
]
exibe dois elementos da terceira pilha e empurra para trás o resultado da subtração do primeiro da segunda. Exemplo:[1,2,3]
→[1,-1]
>
aparece um elemento da terceira pilha. Exemplo[1,2,3]
→[1,2]
E aqui estão as outras regras da linguagem:
No início da execução, a terceira pilha contém apenas um único 0.
É proibido ter vazio
[]
ou<>
dentro de um programa (eles seriam noops de qualquer maneira se seguissem a semântica do Third-Flak, mas na verdade eles têm um significado diferente no Brain-Flak que não é possível recriar aqui).Os parênteses sempre precisam ser equilibrados, exceto pelo fato de que os parênteses finais no final do programa podem estar ausentes. Como exemplo,
[()<(()
é um programa Third-Flak válido (e a terceira pilha no final do programa seria[1,0,1]
).Um programa pode conter apenas os seis caracteres permitidos
()[]<>
. Os programas são garantidos como não vazios.
Nota: está implícito nas regras anteriores que você não precisará lidar com situações em que precisa sair de uma pilha vazia.
O desafio
Simples, escreva um intérprete para o Third-Flak. Seu programa deve ter como entrada um programa Third-Flak e retornar como saída o estado da terceira pilha no final do programa.
Seu formato de saída é flexível, desde que seja possível ler de forma inequívoca o estado da terceira pilha e o mesmo número sempre é codificado da mesma maneira (esta é apenas uma maneira de dizer que qualquer formato de saída que não seja flagrante tentar trapacear é bom).
Sua escolha de saída pode restringir o intervalo de números que você pode gerenciar, desde que isso não trivialize o desafio (já que isso seria uma brecha padrão ).
Casos de teste
Para cada caso de teste, a primeira linha é a entrada e a segunda linha, a pilha de saída representada como uma lista de números separados por espaço, onde a parte superior da pilha é o último elemento.
[()<(()
0 1 0 1
[((((()()()()()))
0 0 0 5
((([()][()][()])))
-3
[<<(((()()()())(((((
0 0 0 0 0 4 0 0 0 0 0
[()]<(([()])><[()]
-1 0 -1
(())(()()())(())(())(()()())(())(())(()()())(())(()()()()())(()())(()()()()())(())(()()())(())(()()()()())(())(())(())(())(()()()()())(())(())(()()())(())(())(()()())(())(()()()()())(()())(()()()()())(())(()()())(())(()()()()())(())(())(())(())(())(())(()())(())(())(())(()())(()()()())(())(()()()()())(()())(()())(()())(()()())(())(()())(())(()()()()())(()())(()()()()())(())(())(())(())(())(()())(())(())(())(()()()()())(())(())(()()()()())(())(())(()()()()())(())(())(()())(())(()())(())(()())(())(()())(())(()())(()())(()())(()())(()())(()())(()())(()())(())(()()()()())(())(())(()()())(())(())(()()())(())(()()()()())(()())(()()()()())(())(()()())(())(())(()()())(()())(())(()()()()())(())(())(()()())(())(())(()()())(())(()()()()())(()())(()()()()())(())(())(())(()()())(())(())(()()())(())(())(()()())(())(()()()()())(()())(()()()()())(()()())(())(()()())(())(())(())(()())(()()())(()())(())(()()()()())(()())(())(()()())(())(()()()()())(())(())(())(()()())(())(())(())(()())(())(()())(()()()())(())(())(()()()()())(()())(()())(())(()()())(())(())(())(())(()()())(()())(())(())(()()()()())(())(())(()()()()())(())(())(()()()()())(())(())(()())(())(()())(())(()())(())(()())(()())(()())(()())(())(()()()()())(()())(())(()()())(())(()()()()())(()()()()())(())(()()())(())(())(()())(())(()()()()())(())(()()()()())(())(())(())(()()()()())(())(())(()())(())(()())(())(()())(())(()())(())(()())(()())(()())(()())(())(()()()()())(()())(())(()()())(())(())(()())(())(()()()()())(()())(()()()()())(())(()()())(())(())(()()()()())(())(()()()()())(())(())(())(()())(())(()()()()())(())(())(()())(())(()())(())(()())(()())(()())(()())(())(()()()()())(()())(())(()()()()())(())(()()())(())(())(()())(())(()()()()())(()())(()()()()())(())(()()())(())(())(())(()())(()()()())(())(())(()())(())(()()()()())(())(())(()()()()())(())(())(()()()()())(())(())(()())(())(()())(())(()())(())(()())(())(()())(()())(()())(()())(()())(()())(())(()()())(())(())(()())(())(()()()()())(()())(()()()()())(()()())(())(())(()())(())(())(()()()()())(()()()())(()())(()())(()()())(())(()())(())(()()()()())(()())(()()()()())(())(())(())(()()()())(()()()())(()()
718 2
e
está aqui .
[()]
quebra a regra de que não precisa se preocupar com popping de uma pilha vazia