背景
ASCII艺术是通过使用ASCII文本形成形状来创建图像的实践。
混叠是由ASCII艺术的大“像素”(即字符大小)产生的效果。图像变得块状且难以看清。抗锯齿功能通过创建渐变并软化ASCII艺术作品的硬边来消除这种影响。
挑战
您面临的挑战是编写尽可能最短的程序,该程序将花费一部分ASCII文字并输出经过抗锯齿的版本。
什么样的抗锯齿?
所有ASCII文字都将由两种类型的符号组成:空格和非空白。对于每个非空白字符,您的程序必须确定它是否处于需要消除锯齿的位置。如果是这样,则需要用正确的字符替换它。如果不是,则字符保持不变。
您如何知道角色是否需要消除锯齿?答案取决于字符上方,下方,左侧和右侧的字符(而不是对角线)。下面是当需要抗混叠的一个图表,其中?
和x
可以代表任何非空白字符。
x? -> d?
? ?
?x -> ?b
? ?
? ?
?x -> ?F
? ?
x? -> Y?
x -> ; Note: This character has been changed from _ to ;
? ?
? ?
x -> V
?x -> ?>
x? -> <?
x -> @
输入(以及示例抗锯齿前的ASCII艺术)
首先,会有两行输入(到STDIN),数字H之后是数字W。然后将有H行,每行正好是W个字符(不包括换行符)。以下几行将是需要反走样的ASCII艺术。这是一个示例输入(不是很漂亮,而是一个测试):
7
9
888888
888888
999 98 7
666666
666666
6666
6
输出(以及消除锯齿的示例)
您的程序应将经过抗锯齿处理的ASCII图形(相同尺寸)输出到STDOUT。这是上述输入的输出。注意如何将边框字符视为边框空白。
d8888>
d8888F
<99 98 @
Y6666b
Y6666>
Y66F
V
这可能看起来不太好(由于代码块中各行之间的间隔),使用较大的ASCII艺术效果看起来更好,并且质量取决于所使用的确切字体。
另一个例子
输入项
12
18
xx xxx xxx
xxxx xxx xxx
xxxxxx xxx xxx
xxx xxx xxx xxx
xxxx xxx xxx xxx
xxxxxx xxx xxx
xxxx xxx xxx
x xx xxx xxx x
xx xxx xxx xx
xxx xxx xxx xxx
xxxx xxx xxx xx
xxxxx xxx xxx x
输出量
db <xb <xb
dxxb Yxb Yxb
dxxxxb Yxb Yxb
dxx xxb xxb xxb
Yxxb xxF xxF xxF
YxxxxF dxF dxF
YxxF dxF dxF
; YF dxF dxF ;
xb dxF dxF dx
xxb <xF <xF <xx
xxxb Yxb Yxb Yx
Yxxx> Yx> Yx> V
规则,限制和注释
您的程序仅应使用可打印的ASCII字符编写,以便我们可以利用程序制作美术作品。除此之外,还适用标准代码高尔夫球规则。
_
已经成为;
因为它更好地工作。