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: incolla .
introduzione
MATL ha diversi appunti , in cui è possibile memorizzare valori (copia) da recuperare in seguito (incolla). Alcuni appunti sono automatici , il che significa che la copia viene automaticamente attivata da determinati eventi. Questa sfida si concentra su uno degli appunti automatici, chiamati appunti di input di funzioni , o semplicemente appunti di funzioni .
Questo appunti memorizza gli input delle quattro chiamate più recenti in normali funzioni di input-input. Le funzioni normali sono il tipo più comune di funzioni in MATL. Input-taking significa che la funzione accetta almeno un input (le funzioni che non accettano alcun input non sono considerate dagli appunti della funzione).
Questo è meglio spiegato con i seguenti esempi, che usano due normali funzioni:
+, che estrae due numeri dallo stack e spinge la loro somma.U, che fa apparire un numero e spinge il suo quadrato.
Esempio 1 :
3 2 + 6 + 12 4 U + +
produce il risultato 39. Il codice viene interpretato come segue:
- Numerali letterali come
3o12vengono inseriti nello stack - Funzioni come
+pop i loro input e spingere i loro output nello stack.
Le chiamate di funzione, in ordine cronologico, sono:
3 2 +dà55 6 +dà114 Udà1612 16 +2811 28 +dà39.
Gli appunti possono essere visualizzati come un elenco di quattro elenchi. Ogni elenco interno contiene gli input per una chiamata di funzione, con prima le chiamate più recenti . All'interno di ciascun elenco interno, gli input sono nel loro ordine originale .
Quindi, dopo aver eseguito il codice, i contenuti degli appunti sono (in notazione Python):
[[11, 28], [12, 16], [4], [5, 6]]
Esempio 2 :
10 20 U 30 +
lascia i numeri 10e 430in pila. Lo stack viene visualizzato dal basso verso l'alto alla fine del programma.
Le chiamate di funzione sono
20 Udà400400 30 +dà430
Poiché ci sono state solo due chiamate di funzione, alcuni degli elenchi interni che definiscono gli appunti saranno vuoti . Nota anche come 10non viene utilizzato come input per nessuna funzione.
Pertanto, i contenuti degli appunti dopo aver eseguito il codice sono:
[[400, 30], [20], [], []]
Esempio 3 (non valido):
10 20 + +
è considerato non valido, poiché +manca un input per il secondo (in MATL ciò implicherebbe implicitamente l'input dell'utente).
La sfida
Input : una stringa S con numero letterale +e U, separata da spazi.
Uscita : il contenuto della funzione di appunti dopo valutare la stringa S .
chiarimenti:
- È possibile utilizzare due simboli coerenti per rappresentare tali funzioni, ad eccezione delle cifre. Inoltre, puoi utilizzare qualsiasi simbolo coerente come separatore, anziché spazio.
- Saranno prese in considerazione solo le due funzioni indicate.
- La stringa di input conterrà almeno un numero letterale e almeno una funzione.
- Tutti i numeri saranno numeri interi positivi, possibilmente con più di una cifra.
- È possibile che alcuni letterali numerici non vengano utilizzati da nessuna funzione, come nell'esempio 2.
- È garantito che l'input sia un codice valido, senza richiedere numeri aggiuntivi. Quindi una stringa come nell'esempio 3 non si verificherà mai.
- È possibile ommettere trailing liste interne vuote nell'output. Quindi il risultato nell'esempio 2 può essere
[[400, 30], [20]] - È accettabile qualsiasi formato di output ragionevole e inequivocabile. Ad esempio, una stringa con virgola come separatore interno e virgola come separatore esterno:
400,30;20;;.
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
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. Lo farò nella sfida "incolla"
[[28, 11], [16, 12], [4], [6, 5]]output è valido per il primo esempio?