首页
学习
活动
专区
圈层
工具
发布

抗混叠
EN

Code Golf用户
提问于 2012-04-11 01:20:01
回答 1查看 3.8K关注 0票数 34

背景

ASCII艺术是通过使用ASCII文本形成形状来创建图像的实践。

混叠是ASCII艺术的大“像素”所产生的效果,这是字符的大小。图像变得块状,很难看到。反混叠通过创建渐变和软化ASCII艺术的硬边来消除这一效果。

挑战

您的挑战是编写尽可能最短的程序,这将采取一项ASCII艺术,并将输出一个版本,已被反别名。

什么类型的反混叠?

所有的ASCII艺术将包括两种类型的符号:空格和非空白。对于每个非空白字符,您的程序必须确定它是否处于需要反别名的位置。如果是,那么您需要用正确的字符替换它。如果不是,那么角色就会保持不变。

你怎么知道一个角色是否需要被反别名?答案取决于字符的上方、下方、左边和右边的字符(而不是对角线)。这是一个何时需要反混叠的图表,其中?x可以代表任何非空白字符。

代码语言:javascript
复制
 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艺术。下面是一个示例输入(不是很漂亮,而是一个测试):

代码语言:javascript
复制
7
9
  888888 
 888888  
999 98  7
 666666  
  666666 
   6666  
    6    

输出(和示例反别名技术)

您的程序应该输出到STDOUT的ASCII艺术(相同的维度),这已经被反别名。这是上面输入的输出。请注意如何将边框字符视为边框空格。

代码语言:javascript
复制
  d8888> 
 d8888F  
<99 98  @
 Y6666b  
  Y6666> 
   Y66F  
    V    

这看起来可能不太好(由于代码块中行之间的间隔),使用更大的ASCII技术,它看起来更好,质量取决于所使用的确切字体。

另一个示例

输入

代码语言:javascript
复制
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

输出

代码语言:javascript
复制
   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

规则、限制和Notes

您的程序应该只用可打印的ASCII字符编写,这样我们就可以从程序中获得艺术。除此之外,还适用标准规则--高尔夫规则。

EN

回答 1

Code Golf用户

发布于 2012-04-12 21:01:45

Python,259个字符

代码语言:javascript
复制
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元组列表,然后使用字符串索引查找结果字符。

票数 5
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/5450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档