Diese Herausforderung besteht darin, einen Interpreter für eine Mondrianische Bildbeschreibungssprache (MPDL) zu codieren .
Sprachdefinition
Die Sprache arbeitet mit einem Stapel Rechtecke. Ein Rechteck wird durch seine obere linke Koordinate und seine untere rechte Koordinate definiert. Koordinaten müssen ganze Zahlen sein. Der Stapel wird mit einem einzelnen Rechteck mit Attributen initialisiert(1,1,254,254)
Jeder Befehl hat das folgende Format:
<character><integer>
Es gibt drei Befehle:
v<integer>
: Führe eine vertikale Teilung des letzten Rechtecks im Stapel an der durch den Parameter angegebenen Position durch (in Prozent). Das Quellrechteck wird aus dem Stapel entfernt und durch die beiden neuen Rechtecke ersetzt, die sich aus der Aufteilung ergeben. Das linke Rechteck wird auf den Stapel geschoben, dann das rechte Rechteck. Da Rechteckkoordinaten Ganzzahlen sind, sollten Brüche auf die größte kleinere Ganzzahl gerundet werden.
h<integer>
: horizontale Teilung. Das obere Rechteck wird auf den Stapel geschoben, dann das untere Rechteck.
c<integer>
: Entfernt das letzte Rechteck vom Stapel und malt es in der als Parameter angegebenen Farbe. 1 = weiß, 2 = rot, 3 = blau, 4 = gelb
Herausforderung
Schreiben Sie ein Programm, das als Parameter eine Malbeschreibung verwendet und eine 256x256-Bitmap-Darstellung der gemalten Rechtecke erstellt. Die Rechtecke müssen mit einer schwarzen Linie von 3 Pixeln getrennt werden. Bei einem Ein-oder Zwei-Pixel-Rechteck sollten die nicht schwarzen Pixel durch die schwarzen Randpixel verdeckt sein.
Die Eingabe kann nach Belieben als Parameter oder als Datei gelesen werden. Die Befehle sollten durch ein Leerzeichen getrennt sein. Sie können davon ausgehen, dass die Eingabedatei die richtige Syntax aufweist und keine nachgestellten oder führenden Leerzeichen, Tabulatoren usw. enthält. Die Ausgabe kann direkt auf dem Bildschirm angezeigt oder in einer Datei gespeichert werden.
Der kürzeste Code gewinnt.
Prüfung
Die folgende Quelle:
v25 h71 v93 h50 c4 c1 c1 c2 h71 c3 h44 c1 c1
Sollte die Komposition II in Rot, Blau und Gelb produzieren :
v30 v50 c1 c5 h70 v50 c1 c3 c2
.
v
undh
Argumente sollten in Pixel angegeben werden