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 -> @ )
首先,将有两行输入(对STDIN),一个数字H后面跟着一个数字W,然后是每个W字符的H行(不包括换行符)。下面这些行将是需要反别名的ASCII艺术。下面是一个示例输入(不是很漂亮,而是一个测试):
7
9
888888
888888
999 98 7
666666
666666
6666
6 您的程序应该输出到STDOUT的ASCII艺术(相同的维度),这已经被反别名。这是上面输入的输出。请注意如何将边框字符视为边框空格。
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字符编写,这样我们就可以从程序中获得艺术。除此之外,还适用标准规则--高尔夫规则。
发布于 2012-04-12 21:01:45
H=input()
W=input()+1
I=' '.join(raw_input()for i in' '*H)
for i in range(H):print''.join(map(lambda(s,a,b,c,d):(s*5+'dY<'+s+'bF>'+s+';V@'+' '*16)[16*(s==' ')+8*(a==' ')+4*(b==' ')+2*(c==' ')+(d==' ')],zip(I,I[1:]+' ',' '+I,I[W:]+' '*W,' '*W+I))[i*W:i*W+W-1])该程序将输入读入单个字符串I (空格分隔行),压缩包含该字符及其四个周围字符的5元组列表,然后使用字符串索引查找结果字符。
https://codegolf.stackexchange.com/questions/5450
复制相似问题