Esse desafio está relacionado a alguns dos recursos da linguagem MATL, como parte do evento de linguagem do mês de maio de 2018 . Desafio associado : Área de transferência de funções: colar .
Introdução
O MATL possui várias pranchetas , nas quais é possível armazenar valores (cópia) para serem recuperados posteriormente (colar). Algumas áreas de transferência são automáticas , o que significa que a cópia é automaticamente acionada por determinados eventos. Esse desafio se concentra em uma das pranchetas automáticas, denominada área de transferência de entrada de função ou simplesmente área de transferência de função .
Essa área de transferência armazena as entradas nas quatro chamadas mais recentes para as funções normais de captação de entradas. Funções normais são o tipo mais comum de funções no MATL. Entrada de entrada significa que a função recebe pelo menos uma entrada (funções que não recebem entrada não são consideradas pela área de transferência da função).
Isso é melhor explicado com os seguintes exemplos, que usam duas funções normais:
+
, que exibe dois números da pilha e aumenta sua soma.U
, que exibe um número e empurra seu quadrado.
Exemplo 1 :
3 2 + 6 + 12 4 U + +
produz o resultado 39
. O código é interpretado da seguinte maneira:
- Literais numéricos como
3
ou12
são empurrados para a pilha - Funções como
+
acionar suas entradas e enviar suas saídas para a pilha.
As chamadas de função, em ordem cronológica, são:
3 2 +
dá5
5 6 +
dá11
4 U
dá16
12 16 +
28
11 28 +
dá39
.
A área de transferência pode ser vista como uma lista de quatro listas. Cada lista interna contém as entradas para uma chamada de função, com as chamadas mais recentes primeiro . Dentro de cada lista interna, as entradas estão em sua ordem original .
Então, depois de executar o código, o conteúdo da área de transferência é (em notação Python):
[[11, 28], [12, 16], [4], [5, 6]]
Exemplo 2 :
10 20 U 30 +
deixa números 10
e 430
na pilha. A pilha é exibida de baixo para cima no final do programa.
As chamadas de função são
20 U
dá400
400 30 +
dá430
Como houve apenas duas chamadas de função, algumas das listas internas que definem a área de transferência estarão vazias . Observe também como 10
não é usado como entrada para nenhuma função.
Assim, o conteúdo da área de transferência após a execução do código é:
[[400, 30], [20], [], []]
Exemplo 3 (inválido):
10 20 + +
é considerado inválido, porque +
falta uma entrada para a segunda (em MATL, isso implicitamente acionaria a entrada do usuário).
O desafio
Entrada : uma sequência S com números literais +
e U
separados por espaços.
Saída : o conteúdo da área de transferência função após analisar a string S .
Esclarecimentos:
- Você pode usar quaisquer dois símbolos consistentes para representar essas funções, exceto dígitos. Além disso, você pode usar qualquer símbolo consistente como separador, em vez de espaço.
- Somente as duas funções indicadas serão consideradas.
- A sequência de entrada conterá pelo menos um número literal e pelo menos uma função.
- Todos os números serão inteiros positivos, possivelmente com mais de um dígito.
- É possível que alguns literais numéricos não sejam utilizados por nenhuma função, como no exemplo 2.
- A entrada é garantida como um código válido, sem a necessidade de números adicionais. Portanto, uma string como no exemplo 3 nunca ocorrerá.
- O rastreamento de listas internas vazias na saída pode ser omitido. Portanto, o resultado no exemplo 2 pode ser
[[400, 30], [20]]
- Qualquer formato de saída razoável e inequívoco é aceitável. Por exemplo, uma cadeia com vírgula como separador interno e vírgula como separador exterior:
400,30;20;;
.
Regras adicionais:
A entrada e a saída podem ser obtidas por qualquer meio razoável .
Programas ou funções são permitidos, em qualquer linguagem de programação . As brechas padrão são proibidas .
O menor código em bytes vence.
Casos de teste
Input
Output
3 2 + 6 + 12 4 U + +
[[11, 28], [12, 16], [4], [5, 6]]
15 3 4 + 2 U 8 + U +
[[7, 144], [12], [4, 8], [2]]
3 6 9 12 + + 10 8 U 6
[[8], [6, 21], [9, 12], []]
8 41 12 25 4 5 33 7 9 10 + + + + + + + +
[[41, 105], [12, 93], [25, 68], [4, 64]]
10 1 1 + U U U U U
[[65536], [256], [16], [4]]
M
?
M
. Farei isso no desafio "colar"
[[28, 11], [16, 12], [4], [6, 5]]
saída é válida para o primeiro exemplo?