fundo
A arte ASCII é a prática de criar imagens usando texto ASCII para formar formas.
Alias é o efeito criado pelos grandes "pixels" da arte ASCII, que são do tamanho de caracteres. A imagem fica com blocos e difícil de ver. A suavização de serrilhado remove esse efeito criando um gradiente e suavizando as arestas rígidas da arte ASCII.
O desafio
Seu desafio é escrever o programa mais curto possível, que terá uma obra de arte ASCII e produzirá uma versão com anti-alias.
Que tipo de anti-aliasing?
Toda a arte ASCII consistirá em dois tipos de símbolos: Espaços e espaços não em branco. Para cada caractere que não seja um espaço em branco, seu programa deve determinar se está em uma posição em que precisa ser suavizado. Se for, é necessário substituí-lo pelo caractere correto. Se não for, o personagem permanece o mesmo.
Como você sabe se um personagem precisa ser anti-alias? A resposta depende dos caracteres imediatamente acima, abaixo, esquerda e direita do caractere ( não nas diagonais ). Aqui está um gráfico de quando o anti-aliasing é necessário, onde ?
e x
pode representar qualquer caractere que não seja um espaço em branco.
x? -> d?
? ?
?x -> ?b
? ?
? ?
?x -> ?F
? ?
x? -> Y?
x -> ; Note: This character has been changed from _ to ;
? ?
? ?
x -> V
?x -> ?>
x? -> <?
x -> @
Entrada (e exemplo de arte ASCII pré-anti-aliasing)
Primeiro, haverá duas linhas de entrada (para STDIN), um número H seguido de um número W. Haverá, então, linhas H com exatamente W caracteres cada (excluindo a nova linha). Estas linhas a seguir serão a arte ASCII que precisa ser anti-alias. Aqui está um exemplo de entrada (não bonito, mas um teste):
7
9
888888
888888
999 98 7
666666
666666
6666
6
Saída (e exemplo arte anti-alias)
Seu programa deve gerar para STDOUT a arte ASCII (das mesmas dimensões), que foi anti-alias. Aqui está a saída para a entrada acima. Observe como os caracteres de borda são tratados como espaços em branco.
d8888>
d8888F
<99 98 @
Y6666b
Y6666>
Y66F
V
Isso pode não parecer tão bom (devido ao espaço entre as linhas no bloco de código), fica melhor com arte ASCII maior e a qualidade depende da fonte exata usada.
Outro exemplo
Entrada
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
Saída
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
Regras, restrições e notas
Seu programa deve ser escrito apenas em caracteres ASCII imprimíveis, para que possamos criar arte com os programas. Fora isso, as regras padrão de código de golfe se aplicam.
_
tornou-se;
porque funciona melhor.