Questa sfida è legata ad alcune delle funzionalità del linguaggio MATL, nell'ambito dell'evento Lingua del mese di maggio 2018 . Sfida associata: Appunti di funzione: copia .
introduzione
Gli appunti delle funzioni di MATL memorizzano (" copiano ") gli input delle quattro chiamate più recenti alle normali funzioni di input. Le funzioni normali sono il tipo più comune di funzioni in MATL. Input-taking significa che la funzione accetta almeno un input. I contenuti degli appunti memorizzati possono essere inseriti nello stack ("incollati").
Questa sfida prenderà il contenuto degli appunti come input. Si supporrà che tutte le funzioni che hanno prodotto quello stato degli appunti abbiano preso uno o più numeri interi positivi come input. Quindi lo stato degli Appunti può essere rappresentato da un elenco di elenchi di numeri. (Per ulteriori informazioni su come vengono effettivamente riempiti gli Appunti, consultare la relativa sfida; ma non è necessario per quello attuale).
Interpretazione del contenuto degli appunti
Esempio 1
Il primo elenco interno fa riferimento alla più recente chiamata di funzione e così via, quindi lo stato degli Appunti
[[11, 28], [12, 16], [4], [5, 6]]
indica che l'ultima chiamata di funzione ha due ingressi, vale a dire 11
, 28
; la penultima chiamata ha avuto ingressi 12
, 16
; ecc. (Questo stato degli appunti è prodotto dal codice nel primo esempio della sfida correlata).
Esempio 2
Se non ci sono state abbastanza chiamate di funzione , alcuni elenchi interni finali negli appunti saranno vuoti:
[[7, 5], [], [], []]
(Questo è prodotto da un programma che aggiunge semplicemente 7
e 5
).
Esempio 3
Le chiamate di funzione possono avere un numero qualsiasi di ingressi , ma almeno 1
(le funzioni che non accettano ingressi non cambiano lo stato degli Appunti). Quindi è anche possibile quanto segue.
[[3], [2, 40, 34], [7, 8, 15], []]
Accesso al contenuto degli appunti
Il contenuto degli Appunti di funzione viene inserito nello stack usando la funzione MATL M
(che, a proposito, non è una funzione normale, ma una funzione di Appunti). Questa funzione accetta un intero positivo come input e inserisce parte del contenuto degli appunti nello stack, come segue. Con riferimento allo stato degli appunti nell'esempio 1:
[[11, 28], [12, 16], [4], [5, 6]]
1M
restituisce tutti gli input alla chiamata di funzione più recente. Così, per l'esempio considerato, dà11
,28
.- Analogamente,
2M
,3M
e4M
restituire tutti gli ingressi alla seconda, terza e quarta chiamate di funzione più recenti. Così2M
dà12
,16
;3M
dà4
; e4M
dà5
,6
. - I numeri oltre a
4
selezionare i singoli input per far funzionare le chiamate che hanno richiesto più di un input. Quindi5M
restituisce l' ultimo input alla chiamata più recente . Nel nostro caso questo dà28
.6M
restituisce l' input individuale precedente , che è11
.7M
restituisce l'ultimo input della penultima chiamata, ovvero16
, e8M
restituisce12
. Ora9M
dà6
. Nota come4
viene ignorato l' input perché era l' unico input nella sua chiamata di funzione. Infine,10M
dà5
.
Per lo stato degli appunti nell'esempio 3:
[[3], [2, 40, 34], [7, 8, 15], []]
1M
dà3
.2M
dà2
,40
,34
.3M
dà7
,8
,15
.4M
ha un comportamento indefinito (ai fini di questa sfida), perché ci sono state solo tre chiamate di funzione.5M
dà34
.6M
dà40
.7M
dà2
.8M
dà15
.9M
dà8
,10M
dà7
.11M
,12M
, ... hanno anche un comportamento indefinito .
La sfida
Input :
- lo stato degli appunti, come un elenco di elenchi o qualsiasi altro formato ragionevole;
- un numero intero positivo n .
Output : il risultato della funzione di chiamata M
con n come input. L'output sarà uno o più numeri con un separatore non ambiguo, o in qualsiasi formato ragionevole come un elenco o un array.
chiarimenti:
- Lo stato degli Appunti è composto da quattro elenchi di numeri. Alcuni degli elenchi finali possono essere vuoti, come negli esempi 2 e 3. Se si preferisce, è possibile inserire gli Appunti senza quegli elenchi vuoti finali. Quindi l'esempio 3 diventerebbe
[[3], [2, 40, 34], [7, 8, 15]]
. - Tutti i numeri negli Appunti saranno numeri interi positivi, possibilmente con più di una cifra.
- Il numero n è garantito per essere valido. Quindi, per esempio 3 sopra,
n
non può essere4
o11
.
Regole aggiuntive:
Input e output possono essere presi con qualsiasi mezzo ragionevole .
Programmi o funzioni sono consentiti, in qualsiasi linguaggio di programmazione . Sono vietate le scappatoie standard .
Vince il codice più breve in byte.
Casi test
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