挑战在于为Mondrian绘画描述语言(MPDL)编写解释器。
语言定义
该语言在矩形堆栈上运行。矩形由其左上坐标和右下坐标定义。坐标必须是整数。使用具有属性的单个矩形初始化堆栈(1,1,254,254)
每个命令具有以下格式:
<character><integer>
有以下三个命令:
v<integer>
:在参数中指示的位置(以百分比表示)上对堆栈中的最新矩形执行垂直分割。将源矩形从堆栈中删除,并替换为拆分产生的两个新矩形。左边的矩形被压入堆栈,然后是右边的矩形。由于矩形坐标是整数,因此分数应四舍五入为最大的较小整数。
h<integer>
:水平分割。顶部矩形被压入堆栈,然后底部矩形被压入堆栈。
c<integer>
:从堆栈中删除最新的矩形,并将其绘制为参数指定的颜色。1 =白色,2 =红色,3 =蓝色,4 =黄色
挑战
编写一个程序,将绘制说明作为参数,并创建绘制矩形的256x256位图表示形式。矩形必须以3像素的黑线分隔。一个或两个像素矩形应使其非黑色像素被边框黑色像素隐藏。
输入可以作为参数或文件读取,由您决定。命令应以空格分隔。您可以假定输入文件的语法正确,并且没有尾部或前导空格,制表符等。输出可以直接显示在屏幕上,也可以保存到文件,由您自己决定。
最短的代码获胜。
测试
以下来源:
v25 h71 v93 h50 c4 c1 c1 c2 h71 c3 h44 c1 c1
应产生红色,蓝色和黄色的成分II:
v30 v50 c1 c5 h70 v50 c1 c3 c2
。
v
和h
参数应该以像素为单位