Este desafío consiste en codificar un intérprete para un lenguaje de descripción de pintura Mondrian (MPDL).
Definición del lenguaje
El lenguaje opera en una pila de rectángulos. Un rectángulo se define por su coordenada superior izquierda y su coordenada inferior derecha. Las coordenadas deben ser enteros. La pila se inicializa con un solo rectángulo con atributos(1,1,254,254)
Cada comando tiene el siguiente formato:
<character><integer>
Hay tres comandos:
v<integer>
: realice una división vertical en el último rectángulo de la pila, en la posición indicada por el parámetro (como porcentaje). El rectángulo de origen se elimina de la pila y se reemplaza con los dos nuevos rectángulos que resultan de la división. El rectángulo izquierdo se empuja sobre la pila, luego el rectángulo derecho. Como las coordenadas del rectángulo son enteros, las fracciones deben redondearse al mayor entero más pequeño.
h<integer>
: división horizontal. El rectángulo superior se empuja sobre la pila, luego el rectángulo inferior.
c<integer>
: elimina el último rectángulo de la pila y lo pinta al color dado como parámetro. 1 = blanco, 2 = rojo, 3 = azul, 4 = amarillo
Desafío
Escriba un programa que tome como parámetro una descripción de pintura y cree una representación de mapa de bits de 256x256 de los rectángulos pintados. Los rectángulos se deben separar con una línea negra de 3 píxeles. Un rectángulo de uno o dos píxeles debe tener sus píxeles no negros ocultos por los píxeles negros del borde.
La entrada se puede leer como un parámetro o como un archivo, depende de usted. Los comandos deben estar separados por un espacio. Puede suponer que el archivo de entrada tiene la sintaxis correcta y no tiene espacios finales o iniciales, pestañas, etc. El resultado puede mostrarse directamente en la pantalla o guardarse en un archivo.
El código más corto gana.
Prueba
La siguiente fuente:
v25 h71 v93 h50 c4 c1 c1 c2 h71 c3 h44 c1 c1
Debe producir la Composición II en rojo, azul y amarillo :
v30 v50 c1 c5 h70 v50 c1 c3 c2
.
v
y losh
argumentos deben estar en píxeles