#P2122. Japan Plotter Driver

Japan Plotter Driver

题目描述

你所在的一家日本公司生产能够绘制精美图片的绘图仪设备。为了支持那些没有这种特殊硬件的客户,你被要求编写一个模拟驱动程序,模拟绘图仪的工作并在计算机屏幕上打印图片。

绘图仪由几种简单的绘图命令驱动:

  • POINT x y:在给定坐标处绘制一个小圆圈。
  • TEXT x y txt:在给定坐标处显示一行文本。
  • LINE x1 y1 x2 y2:在指定的两点之间绘制一条直线。
  • CLEAR x1 y1 x2 y2:清除给定的矩形区域。
  • PRINT:打印输出页面并终止当前任务。

模拟驱动程序使用ASCII字符来表示图片,每个字符代表坐标系中的一个基本单位。左上角字符的坐标为(1,1)。X轴向右延伸,Y轴向下延伸。

命令模拟方式

  • POINT:在给定坐标处放置小写字母"o"。
  • TEXT:显示单行文本,第一个字符位于给定坐标,文本始终向右延伸。
  • LINE:模拟两点之间的直线,根据方向使用字符:横线("-")、竖线("|")、斜线("/")或反斜线("")。
  • CLEAR:用空格填充指定的矩形区域,包括边界行和列。
  • PRINT:打印图片,并用加号("+")、减号("-")和竖线("|")组成的边框包围。

重叠字符规则

  • 如果同一字符被多次绘制,保持不变。
  • 如果只有竖线和横线重叠,结果为加号("+")。
  • 如果只有斜线和反斜线重叠,结果为小写字母"x"。
  • 其他情况显示星号("*")。

输入说明

输入包含多个脚本。每个脚本以两个整数X和Y开始,表示页面的尺寸。接下来的每一行包含一个命令。命令总是大写,参数之间用一个空格分隔。PRINT命令总是脚本的最后一条命令。输入以两个0结束。

输出说明

对于每个脚本,输出模拟的图片,按照上述规则生成。每个图片后输出一个空行。

示例输入 1

20 10
LINE 3 2 11 10
LINE 3 10 11 2
LINE 20 3 8 3
TEXT 6 8 TEST
LINE 19 1 19 10
LINE 17 10 17 1
LINE 16 1 16 10
LINE 13 6 20 6
CLEAR 20 5 15 7
LINE 18 1 18 10
TEXT 12 10 NICEPICTURE
POINT 1 1
POINT 3 2
PRINT
1 1
POINT 1 1
CLEAR 1 1 1 1
PRINT
3 3
LINE 2 1 2 3
LINE 1 2 3 2
LINE 2 3 2 1
LINE 3 2 1 2
LINE 2 1 2 3
LINE 1 2 3 2
PRINT
0 0

示例输出 1

+--------------------+
|o              |||| |
|  *       /    |||| |
|   \   --*-----++++-|
|    \   /      |||| |
|     \ /         |  |
|      x     --   |  |
|     / \         |  |
|    /TES*      |||| |
|   /     \     |||| |
|  /       \NICE****U|
+--------------------+

+-+
| |
+-+

+---+
| | |
|-+-|
| | |
+---+