Wyzwanie polega na kodowaniu tłumacza dla języka opisu malarstwa Mondrian (MPDL).
Definicja języka
Język działa na stosie prostokątów. Prostokąt jest zdefiniowany przez jego lewą górną współrzędną i dolną prawą współrzędną. Współrzędne muszą być liczbami całkowitymi. Stos jest inicjowany pojedynczym prostokątem z atrybutami(1,1,254,254)
Każde polecenie ma następujący format:
<character><integer>
Istnieją trzy polecenia:
v<integer>
: wykonaj podział pionowy na ostatnim prostokącie w stosie, w miejscu wskazanym przez parametr (w procentach). Prostokąt źródłowy jest usuwany ze stosu i zastępowany dwoma nowymi prostokątami wynikającymi z podziału. Lewy prostokąt jest wciskany na stosie, a następnie prawy prostokąt. Ponieważ współrzędne prostokąta są liczbami całkowitymi, ułamki powinny być zaokrąglane do największej mniejszej liczby całkowitej.
h<integer>
: podział poziomy. Górny prostokąt jest wciskany na stosie, a następnie dolny prostokąt.
c<integer>
: usuwa najnowszy prostokąt ze stosu i maluje go na kolor podany jako parametr. 1 = biały, 2 = czerwony, 3 = niebieski, 4 = żółty
Wyzwanie
Napisz program, który przyjmuje jako parametr opis malowania i tworzy bitmapę 256 x 256 reprezentacji malowanych prostokątów. Prostokąty muszą być oddzielone czarną linią 3 piksele. Prostokąt z jednym lub dwoma pikselami powinien mieć ukryte czarne piksele poza obramowaniem.
Dane wejściowe można odczytać jako parametr lub jako plik, zależnie od Ciebie. Polecenia powinny być oddzielone spacją. Możesz założyć, że plik wejściowy ma poprawną składnię i nie ma spacji końcowych ani wiodących, tabulatorów itp. Dane wyjściowe można wyświetlić bezpośrednio na ekranie lub zapisać w pliku, zależnie od Ciebie.
Najkrótszy kod wygrywa.
Test
Następujące źródło:
v25 h71 v93 h50 c4 c1 c1 c2 h71 c3 h44 c1 c1
Powinien produkować Kompozycję II w kolorze czerwonym, niebieskim i żółtym :
v30 v50 c1 c5 h70 v50 c1 c3 c2
.
v
ah
argumenty powinny być w pikselach