Fondo
El arte ASCII es la práctica de crear imágenes usando texto ASCII para formar formas.
El alias es el efecto creado por los grandes "píxeles" del arte ASCII, que son del tamaño de los caracteres. La imagen se vuelve bloqueada y difícil de ver. El suavizado elimina este efecto al crear un degradado y al suavizar los bordes duros del arte ASCII.
El reto
Su desafío es escribir el programa más corto posible que tomará una pieza de arte ASCII y generará una versión que haya sido suavizada.
¿Qué tipo de anti-aliasing?
Todo el arte ASCII consistirá en dos tipos de símbolos: espacios y no espacios en blanco. Para cada carácter que no sea un espacio en blanco, su programa debe determinar si está en una posición en la que necesita ser suavizado. Si es así, debe reemplazarlo con el carácter correcto. Si no es así, el personaje permanece igual.
¿Cómo sabes si un personaje necesita ser suavizado? La respuesta depende de los caracteres que están inmediatamente arriba, abajo, a la izquierda y a la derecha del personaje ( no las diagonales ). Aquí hay una tabla de cuándo se requiere anti-aliasing, donde?
y x
puede representar cualquier carácter que no sea un espacio en blanco.
x? -> d?
? ?
?x -> ?b
? ?
? ?
?x -> ?F
? ?
x? -> Y?
x -> ; Note: This character has been changed from _ to ;
? ?
? ?
x -> V
?x -> ?>
x? -> <?
x -> @
Entrada (y ejemplo de arte ASCII pre-anti-aliasing)
Primero, habrá dos líneas de entrada (a STDIN), un número H seguido de un número W. Luego habrá líneas H de exactamente W caracteres cada una (excluyendo la nueva línea). Estas siguientes líneas serán el arte ASCII que necesita ser suavizado. Aquí hay un ejemplo de entrada (no hermoso, pero una prueba):
7
9
888888
888888
999 98 7
666666
666666
6666
6
Salida (y ejemplo de arte anti-alias)
Su programa debe enviar a STDOUT el arte ASCII (de las mismas dimensiones), que ha sido suavizado. Aquí está la salida para la entrada anterior. Observe cómo los caracteres de borde se tratan como espacios en blanco que bordean.
d8888>
d8888F
<99 98 @
Y6666b
Y6666>
Y66F
V
Esto podría no verse tan bien (debido al espacio entre líneas en el bloque de código), se ve mejor con un arte ASCII más grande, y la calidad depende de la fuente exacta utilizada.
Otro ejemplo
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
Salida
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
Reglas, restricciones y notas
Su programa debe escribirse solo en caracteres ASCII imprimibles, para que podamos hacer arte de los programas. Aparte de eso, se aplican las reglas estándar de código de golf.
_
se ha convertido;
porque funciona mejor.