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: cópia .
Introdução
A área de transferência de funções do MATL armazena ("copia") as entradas das quatro chamadas mais recentes para funções normais de recebimento 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. O conteúdo da área de transferência armazenada pode ser empurrado para a pilha ("colado").
Esse desafio terá o conteúdo da área de transferência como entrada. Será assumido que todas as funções que produziram esse estado da área de transferência usaram um ou mais números inteiros positivos como entradas. Portanto, o estado da área de transferência pode ser representado por uma lista de listas de números. (Para obter mais informações sobre como a área de transferência é realmente preenchida, consulte o desafio relacionado; mas isso não é necessário para o atual).
Interpretando o conteúdo da área de transferência
Exemplo 1
A primeira lista interna refere-se à chamada de função mais recente , etc. Assim, o estado da área de transferência
[[11, 28], [12, 16], [4], [5, 6]]
indica que a última chamada de função levou duas entradas, ou seja 11
, 28
; o segundo última chamada tomou entradas 12
, 16
; etc. (Este estado da área de transferência é produzido pelo código no primeiro exemplo do desafio relacionado).
Exemplo 2
Se não houver chamadas de função suficientes , algumas listas internas à direita na área de transferência estarão vazias:
[[7, 5], [], [], []]
(Isso é produzido por um programa que simplesmente adiciona 7
e 5
).
Exemplo 3
As chamadas de função podem ter qualquer número de entradas , mas sempre pelo menos 1
(funções que não recebem entradas não alteram o estado da área de transferência). Portanto, o seguinte também é possível.
[[3], [2, 40, 34], [7, 8, 15], []]
Acessando o conteúdo da área de transferência
O conteúdo da área de transferência da função é empurrado para a pilha usando a função MATL M
(que, a propósito, não é uma função normal, mas uma função da área de transferência). Essa função recebe um número inteiro positivo como entrada e empurra parte do conteúdo da área de transferência para a pilha, como segue. Com referência ao estado da área de transferência no exemplo 1:
[[11, 28], [12, 16], [4], [5, 6]]
1M
retorna todas as entradas para a chamada de função mais recente. Assim, por exemplo considerado, dá11
,28
.- Da mesma forma,
2M
,3M
e4M
retornar todas as entradas para o segundo, terceiro e chamadas de função quarta mais recentes. Então2M
dá12
,16
;3M
dá4
; e4M
dá5
,6
. - Números além de
4
selecionar entradas individuais para chamadas de função que receberam mais de uma entrada. Então,5M
retorna a última entrada para a chamada mais recente . No nosso caso, isso dá28
.6M
retorna a entrada individual anterior , que é11
.7M
retorna a última entrada da segunda última chamada, ou seja16
, e8M
fornece12
. Agora9M
dá6
. Observe como a entrada4
é ignorada porque foi a única entrada em sua chamada de função. Por fim,10M
dá5
.
Para o estado da área de transferência no exemplo 3:
[[3], [2, 40, 34], [7, 8, 15], []]
1M
dá3
.2M
dá2
,40
,34
.3M
dá7
,8
,15
.4M
tem um comportamento indefinido (para os fins deste desafio), porque houve apenas três chamadas de função.5M
dá34
.6M
dá40
.7M
dá2
.8M
dá15
.9M
dá8
,10M
dá7
.11M
,12M
... também têm um comportamento indefinido .
O desafio
Entrada :
- o estado da área de transferência, como uma lista de listas ou qualquer outro formato razoável;
- um número inteiro positivo n .
Saída : o resultado da chamada da função M
com n como entrada. A saída será um ou vários números com um separador inequívoco ou em qualquer formato razoável, como uma lista ou matriz.
Esclarecimentos:
- O estado da área de transferência consiste em quatro listas de números. Algumas das listas finais podem estar vazias, como nos exemplos 2 e 3. Se preferir, você pode inserir a área de transferência sem essas listas vazias. Então, o exemplo 3 se tornaria
[[3], [2, 40, 34], [7, 8, 15]]
. - Todos os números na área de transferência serão números inteiros positivos, possivelmente com mais de um dígito.
- O número n é garantido como válido. Portanto, por exemplo 3 acima,
n
não pode ser4
ou11
.
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
Clipboard state
Number
Output(s)
[[11, 28], [12, 16], [4], []]
2
12, 16
[[11, 28], [12, 16], [4], []]
5
28
[[7, 144], [12], [4, 8], [3, 4, 6]]
1
7, 144
[[7, 144], [12], [4, 8], [3, 4, 6]]
10
4
[[30], [40], [50, 60], [70, 80, 90]]
2
40
[[30], [40], [50, 60], [80, 90]]
7
90
[[15], [30], [2, 3, 5], [4, 5, 10]]
3
2, 3, 5
[[15], [30], [2, 3, 5], [4, 5, 10]]
7
2