Questa sfida consiste nel codificare un interprete per un linguaggio di descrizione della pittura di Mondrian (MPDL).
Definizione della lingua
La lingua funziona su una pila di rettangoli. Un rettangolo è definito dalla sua coordinata superiore sinistra e coordinata inferiore destra. Le coordinate devono essere numeri interi. Lo stack è inizializzato con un singolo rettangolo con attributi(1,1,254,254)
Ogni comando ha il seguente formato:
<character><integer>
Esistono tre comandi:
v<integer>
: esegue una divisione verticale sull'ultimo rettangolo nello stack, nella posizione indicata dal parametro (in percentuale). Il rettangolo di origine viene rimosso dalla pila e sostituito con i due nuovi rettangoli risultanti dalla divisione. Il rettangolo sinistro viene inserito nella pila, quindi il rettangolo destro. Poiché le coordinate rettangolari sono numeri interi, le frazioni devono essere arrotondate al numero intero più piccolo più grande.
h<integer>
: divisione orizzontale. Il rettangolo superiore viene inserito nella pila, quindi il rettangolo inferiore.
c<integer>
: rimuove l'ultimo rettangolo dalla pila e lo colora al colore indicato come parametro. 1 = bianco, 2 = rosso, 3 = blu, 4 = giallo
Sfida
Scrivi un programma che accetta come parametro una descrizione del disegno e crea una rappresentazione bitmap 256x256 dei rettangoli dipinti. I rettangoli devono essere separati con una linea nera di 3 pixel. Un rettangolo di uno o due pixel dovrebbe avere i suoi pixel non neri nascosti dai pixel neri del bordo.
L'input può essere letto come parametro o come file, fino a te. I comandi dovrebbero essere separati da uno spazio. Si può presumere che il file di input abbia una sintassi corretta e non abbia spazi, schede, ecc. Finali o iniziali. L'output può essere visualizzato direttamente sullo schermo o salvato in un file, fino a te.
Vince il codice più corto.
Test
La seguente fonte:
v25 h71 v93 h50 c4 c1 c1 c2 h71 c3 h44 c1 c1
Dovrebbe produrre la composizione II in rosso, blu e giallo :
v30 v50 c1 c5 h70 v50 c1 c3 c2
.
v
e glih
argomenti dovrebbero essere in pixel