#P1592. Postscript
Postscript
本题没有可用的提交语言。
描述
时间是1976年,一家刚刚起步的小公司发明了第一台(尽管还很粗糙)激光PostScript打印机。他们聘请你编写该PostScript打印机设备驱动程序的1.0版本。由于业内一些唱反调的人认为PostScript打印机不会有市场,所以1.0版本功能非常有限(只有两种字体)。
设备驱动程序会读取一系列命令,这些命令描述了输出页面上文本字符的位置(图形功能将在2.0版本中实现)。每个页面是一个的字符网格。每个网格位置只能包含以下字符:ABCDEFGHIJKLMNOPQRSTUVWXYZ .*
。
上述字母字符和空格构成了第一种字体(C1)的字符集。星号(*
)是创建放大版Courier字体(C5)的基础字符。每个C5字符定义在一个(行)(列)的网格中,网格中只包含星号(*
)或句点(.
)。C5字体的字符如下:
.***.. ****.. .****. ****.. *****. *****. .****. *...*. *****.
*...*. *...*. *...*. *...*. *..... *..... *..... *...*. ..*...
*****. ****.. *..... *...*. ***... ***... *..**. *****. ..*...
*...*. *...*. *..... *...*. *..... *..... *...*. *...*. ..*...
*...*. ****.. .****. ****.. *****. *..... .***.. *...*. *****.
A B C D E F G H I
..***. *...*. *..... *...*. *...*. .***.. ****.. .***.. ****..
...*.. *..*.. *..... **.**. **..*. *...*. *...*. *...*. *...*.
...*.. ***... *..... *.*.*. *.*.*. *...*. ****.. *...*. ****..
*..*.. *..*.. *..... *...*. *..**. *...*. *..... *..**. *..*..
.**... *...*. *****. *...*. *...*. .***.. *..... .****. *...*.
J K L M N O P Q R
.****. *****. *...*. *...*. *...*. *...*. *...*. *****. ......
*..... *.*.*. *...*. *...*. *...*. .*.*.. .*.*.. ...*.. ......
.***.. ..*... *...*. .*.*.. *.*.*. ..*... ..*... ..*... ......
....*. ..*... *...*. .*.*.. **.**. .*.*.. ..*... .*.... ......
****.. .***.. .***.. ..*... *...*. *...*. ..*... *****. ......
S T U V W X Y Z blank
注意,每个字符的第六列只包含句点,这是为了在字符串中定义自然的间距。
你的设备驱动程序要从输入流中读取格式化命令,并将C1和C5字体的字符格式化到一个的网格上,该网格最初每个位置都包含句点(即一张空白纸)。每个格式化命令可能会改变任何单元格位置的内容,并且可能会覆盖单元格位置。注意,两种字体中的空格以及C5字体中为空(包含句点)的单元格位置不会覆盖单元格的现有内容。命令也可能导致格式化内容超出页面的任一侧或底部,这种超出部分将被简单截断。格式化过程会一直持续,直到遇到页面结束命令。
输入流由一系列行组成,每行恰好包含一个命令及其参数。每个命令从第1列开始,以句点开头,后面跟着0到4个参数。设备驱动程序可能的输入命令如下:
所有命令都从输入行的第1列开始,参数(如果有)之间至少用一个空格分隔。每个命令的参数数量与上述表格规定的完全一致(输入的范围/值会符合要求,不会有多余或缺失的参数)。
.P
(放置)命令:将字体为F
的字符串放置在页面上,字符串的左上角位于位置(R, C)
,字符串的第一个字符放在该位置,然后水平向右继续排列。.L
(左对齐)命令:将字体为F
的字符串放置在页面上,字符串的左上角位于位置(R, 1)
,字符串的第一个字符放在该位置,然后水平向右继续排列。.R
(右对齐)命令:将字体为F
的字符串放置在页面上,字符串的右上角位于位置(R, 60)
,字符串的最后一个字符放在该位置,然后水平向左继续排列。.C
(居中)命令:将字体为F
的字符串在页面上水平居中放置,字符串的第一行位于第R
行。如果在网格上无法精确居中(即字符串在水平方向上占用的单元格数量为奇数),则字符串应在第31列两侧均匀居中。.EOP
命令:表示页面结束。该命令会让你的程序输出/刷新其内部缓冲区,并开始用下一行输入格式化一个新的空白页面。可以保证.EOP
是输入的最后一行/命令。
参数1表示命令中要使用的字体。参数2表示文本要放置的行(R
)。如果字体是C5,则文本将放置在第R
行到第R + 4
行。参数3(如果有)表示字符串最左边的位置。参数4是一个长度最多为60的有效(大写字母或空格)字符组成的字符串,用|
分隔。
输入
程序的输入将由一系列命令及其参数组成(每行恰好一个)。你要从一张“空白”纸开始,读取输入文件进行格式化和换页,直到文件结束。
输出
每次遇到.EOP
命令时,你要输出代表当前页面格式的网格。为了向评委表明页面结束,在每个输出页面后面要跟一个空行、一行60个连字符(-
)和另一个空行。
输入数据1
.C C5 3 |ACM|
.C C1 10 |SOUTH CENTRAL REGION PROBLEM FOUR SAMPLE OUTPUT|
.C C5 20 |OVERFLOW CENTERED LARGE FONT|
.C C5 30 |CENTERED|
.P C1 33 11 |LINE THAT OVERWRITES THROUGH CENTERED|
.L C1 40 |SMALL FONT LINE IS LEFT JUSTIFIED ON ROW FORTY|
.R C5 50 |RIGHT|
.P C5 57 10 |BOTTOM AND RIGHT TRUNCATION|
.EOP
输出数据1
............................................................
............................................................
......................***...****.*...*......................
.....................*...*.*...*.**.**......................
.....................*****.*.....*.*.*......................
.....................*...*.*.....*...*......................
.....................*...*..****.*...*......................
............................................................
............................................................
.......SOUTH.CENTRAL.REGION.PROBLEM.FOUR.SAMPLE.OUTPUT......
............................................................
............................................................
............................................................
............................................................
............................................................
............................................................
............................................................
............................................................
............................................................
............................................................
.****.*****.*...*.*****.*****.****..*****.****........*.....
*...*.*.....**..*.*.*.*.*.....*...*.*.....*...*.......*.....
*.....***...*.*.*...*...***...****..***...*...*.......*.....
*.....*.....*..**...*...*.....*..*..*.....*...*.......*.....
.****.*****.*...*..***..*****.*...*.*****.****........*****.
............................................................
............................................................
............................................................
............................................................
............................................................
.......****.*****.*...*.*****.*****.****..*****.****........
......*...*.*.....**..*.*.*.*.*.....*...*.*.....*...*.......
......*.....***...*.*.*...*...***...****..***...*...*.......
......*...LINE.THAT.OVERWRITES*THROUGH.CENTERED.*...*.......
.......****.*****.*...*..***..*****.*...*.*****.****........
............................................................
............................................................
............................................................
............................................................
............................................................
SMALL.FONT.LINE.IS.LEFT.JUSTIFIED.ON.ROW.FORTY..............
............................................................
............................................................
............................................................
............................................................
............................................................
............................................................
............................................................
............................................................
............................................................
..............................****..*****..****.*...*.*****.
..............................*...*...*...*.....*...*.*.*.*.
..............................****....*...*..**.*****...*...
..............................*..*....*...*...*.*...*...*...
..............................*...*.*****..***..*...*..***..
............................................................
............................................................
.........****...***..*****.*****..***..*...*........***..*..
.........*...*.*...*.*.*.*.*.*.*.*...*.**.**.......*...*.**.
.........****..*...*...*.....*...*...*.*.*.*.......*****.*.*
.........*...*.*...*...*.....*...*...*.*...*.......*...*.*..
------------------------------------------------------------
来源
美国中南部1995年