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 :
v
undh
Argumente sollten in Pixel angegeben werdenv30 v50 c1 c5 h70 v50 c1 c3 c2
.Antworten:
Perl 5 + ImageMagick - 297
Etwas, mit dem man anfangen sollte:
Übernimmt die Eingabe in der Befehlszeile und generiert
a.gif
.quelle
Haskell - 335
Das Programm liest die Anweisungen als eine Zeile von stdin , wenn dies nicht akzeptabel ist, lassen Sie es mich wissen.
Kompiliert in ein Programm, das Flags -w width -h height -o outputfile akzeptiert .Gibt eine "a.svg" -Datei aus, wenn dies nicht sofort aus dem Code hervorgeht. Da es sich bei der Ausgabe um ein Vektorbild handelt, ist es nicht „pixelgenau“.Ich arbeite zum ersten Mal mit Diagrams -package und kann auf Fehler hinweisen, die ich gemacht habe. Besonders jedes Backend, mit dem ich weniger Code ausgeben könnte, wäre schön.
Einige der ersten Schritte, die ich bei der Entwicklung des Codes unternommen habe, finden Sie unter http://paste.hskll.org/get/1737 . Es unterscheidet sich vom obigen Code in Bezug auf Importe und es fehlt main, da paste.hskll.org eine eigene Haupt- und Zeichenumgebung bietet.
quelle
Python -
434 405 377 364361Mein erstes Pythongolf. Dies kann wahrscheinlich VIEL verbessert werden, so dass jedes Feedback geschätzt wird.
quelle
a+=[x]
statta.append(x)
. Und Split braucht kein Argument, wenn es durch Leerzeichen getrennt wird.HTML + JavaScript ES6 (407)
Getestet mit Firefox 32.0.3
quelle
x.charAt(0)
->x[0]
;x.substr
->x.slice
;white yellow
->#fff #ff0
;document.getElementById("c")
->c
... und mehrHTML + JavaScript (ES6) 335
Zu ähnlich wie @mika answer - Kennzeichnung CW.
quelle