Sommario
È stato creato un nuovo linguaggio di manipolazione delle stringhe, usando solo i caratteri $+#-!*|@>
! Il tuo compito è implementare un interprete per il minor numero di byte possibile.
Ingresso
Una stringa, che è una singola riga di questa lingua. Questo può essere preso in qualsiasi modo ragionevole (stdin, parametro di funzione, argomento della riga di comando ecc.) O come variabile predefinita. Se il programma richiede input utente, accetta tutti gli input utente richiesti da stdin e nient'altro, vedi sotto. Puoi presumere che sia un programma valido.
Produzione
Qualunque sia la lingua prodotta, le specifiche di seguito. È necessario generare una stringa, in qualsiasi modo ragionevole (stdout, output di funzione, ecc.) O un valore variabile. Quando la lingua viene emessa in modo esplicito, questo deve passare a stdout. Le scappatoie standard sono vietate.
Specifiche linguistiche
Elaborazione e sintassi
Il linguaggio ha una forma molto semplice di elaborazione in quanto esegue solo la manipolazione di stringhe: inizia con una stringa vuota ( ""
) e la modifica con ogni termine. Un termine è composto da una o due parti: una funzione (sotto) seguita eventualmente da un parametro (sotto), che modifica il suo comportamento. I termini sono separati da pipe ( |
). Puoi presumere che non sarà un programma vuoto e nessun termine sarà vuoto. Dovresti emettere il valore alla fine del programma.
funzioni
La lingua ha solo 6 funzioni, come mostrato di seguito. Ogni funzione accetta uno o zero parametri.
+
concatena le stringhe (accetta un parametro stringa, lo concatena al valore corrente)!
inverti l'ordine dei caratteri del valore corrente (nessun parametro)*
ripeti la stringa (accetta un parametro intero, ripete il valore corrente più volte)-
rimuove tutte le occorrenze di un valore (accetta un parametro stringa, rimuove tutte le occorrenze di un valore dal valore corrente)$
[pseudo-] mescola casualmente il valore corrente (nessun parametro)<
emette il valore corrente sustdout
(nessun parametro)
Valori
Questi sono i valori che possono essere passati alle funzioni, rappresentati da regex che li corrisponderebbe:
@[^|]*
una stringa letterale, incluso qualsiasi carattere diverso da pipe. Potrebbe essere vuoto.#[0-9]+
un intero letterale>
la riga successiva distdin
. Se utilizzato con*
, converti in intero.
Casi test
╔════════════════════════╤═════════════╤══════════════╗
║code │input │output ║
╟────────────────────────┼─────────────┼──────────────╢
║+>|!|+@hello|*> │13 │31hello31hello║
║ │2 │ ║
╟────────────────────────┼─────────────┼──────────────╢
║+>|+@abcdefg|$ │hello │hcloeebafdlg ║
╟────────────────────────┼─────────────┼──────────────╢
║+@how areyou|-@o|-> │w │h areyu ║
╟────────────────────────┼─────────────┼──────────────╢
║+@out|<|*#3 │ │out ║
║ │ │outoutout ║
╟────────────────────────┼─────────────┼──────────────╢
║+> │what ever 345│what ever 345 ║
╟────────────────────────┼─────────────┼──────────────╢
║+@$pe<i@l|<|-@$pe<i@l|+>│A|$o $pe<!@| │$pe<i@l ║
║ │ │A|$o $pe<!@| ║
╟────────────────────────┼─────────────┼──────────────╢
║<|+>|!|< │input text | ║
║ │ │txet tupni ║
║ │ │txet tupni ║
╟────────────────────────┼─────────────┼──────────────╢
║+@># │ |># ║
╚════════════════════════╧═════════════╧══════════════╝
Si noti che il caso di test 2 è casuale, quindi qualsiasi permutazione dei caratteri al suo interno è valida. Inoltre, gli output nella tabella sono separati da nuove righe, ma il tuo programma non deve fare lo stesso. L'ultimo valore in ogni caso è l'output finale.
Interprete python di esempio (senza golf)
Provalo online! IMO meglio se lo esegui tramite IDLE o qualunque cosa tu usi. (L'ho passato a golf a 424 byte dopo, ma sono sicuro che molto si può fare di meglio).
<
si incontrano. È obbligatorio?
+@>#
? Ho usato anche io #
.