Ce défi consiste à coder un interpréteur pour un langage de description de peinture Mondrian (MPDL).
Définition du langage
Le langage fonctionne sur une pile de rectangles. Un rectangle est défini par sa coordonnée supérieure gauche et sa coordonnée inférieure droite. Les coordonnées doivent être des entiers. La pile est initialisée avec un seul rectangle avec des attributs(1,1,254,254)
Chaque commande a le format suivant:
<character><integer>
Il existe trois commandes:
v<integer>
: effectuer un fractionnement vertical sur le dernier rectangle de la pile, à la position indiquée par le paramètre (en pourcentage). Le rectangle source est supprimé de la pile et remplacé par les deux nouveaux rectangles résultant du fractionnement. Le rectangle gauche est poussé sur la pile, puis le rectangle droit. Comme les coordonnées rectangulaires sont des entiers, les fractions doivent être arrondies au plus grand entier le plus petit.
h<integer>
: fente horizontale. Le rectangle supérieur est poussé sur la pile, puis le rectangle inférieur.
c<integer>
: supprime le dernier rectangle de la pile et le peint à la couleur donnée en paramètre. 1 = blanc, 2 = rouge, 3 = bleu, 4 = jaune
Défi
Écrivez un programme qui prend en paramètre une description de peinture et crée une représentation bitmap 256x256 des rectangles peints. Les rectangles doivent être séparés par une ligne noire de 3 pixels. Un rectangle d'un ou deux pixels doit avoir ses pixels non noirs masqués par les pixels noirs de bordure.
L'entrée peut être lue comme un paramètre ou comme un fichier, selon vous. Les commandes doivent être séparées par un espace. Vous pouvez supposer que le fichier d'entrée a une syntaxe correcte et n'a pas d'espaces de fin ou de début, des tabulations, etc. La sortie peut être directement affichée à l'écran, ou enregistrée dans un fichier, jusqu'à vous.
Le code le plus court gagne.
Tester
La source suivante:
v25 h71 v93 h50 c4 c1 c1 c2 h71 c3 h44 c1 c1
Devrait produire la composition II en rouge, bleu et jaune :
v30 v50 c1 c5 h70 v50 c1 c3 c2
.
v
et lesh
arguments doivent être en pixels