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 :
v
y losh
argumentos deben estar en píxelesv30 v50 c1 c5 h70 v50 c1 c3 c2
.Respuestas:
Perl 5 + ImageMagick - 297
Algo para comenzar:
Toma entrada en la línea de comando y genera
a.gif
.fuente
Haskell - 335
El programa lee las instrucciones como una línea de stdin , si esto es inaceptable, hágamelo saber.
Se compila en un programa que toma banderas -w ancho -h altura -o archivo de salida .Emite un archivo "a.svg", si eso no se borra inmediatamente del código. Dado que la salida es una imagen vectorial, no es 'píxel perfecto'.Esta es la primera vez que trabajo con el paquete Diagramas, no dude en señalar cualquier error que haya cometido. Especialmente cualquier backend que me permita generar resultados con menos código sería bueno.
Puede ver algunos de los primeros pasos que tomé al desarrollar el código en http://paste.hskll.org/get/1737 . Se diferencia del código anterior en las importaciones y carece de main ya que paste.hskll.org proporciona su propio entorno principal y de dibujo.
fuente
Python -
434 405 377 364361Mi primer golf de pitón. Esto probablemente se puede mejorar MUCHO, por lo que se agradece cualquier comentario.
fuente
a+=[x]
lugar dea.append(x)
. Y split no necesita un argumento si se separa por espacios en blanco.HTML + JavaScript ES6 (407)
Probado con Firefox 32.0.3
fuente
x.charAt(0)
->x[0]
;x.substr
->x.slice
;white yellow
->#fff #ff0
;document.getElementById("c")
->c
... y másHTML + JavaScript (ES6) 335
Demasiado similar a @mika answer - marcando CW.
fuente