Contexte
L'art ASCII est la pratique de créer des images en utilisant du texte ASCII pour former des formes.
L'aliasing est l'effet créé par les grands "pixels" de l'art ASCII, qui correspondent à la taille des caractères. L'image devient bouchée et difficile à voir. L'anti-aliasing supprime cet effet en créant un dégradé et en adoucissant les contours de l'art ASCII.
Le défi
Votre défi est d’écrire le programme le plus court possible qui prendra un morceau d’art ASCII et produira une version anti-aliasée.
Quelle sorte d'anti-aliasing?
Tout l'art ASCII se composera de deux types de symboles: Espaces et non-blancs. Pour chaque caractère non-blanc, votre programme doit déterminer s'il est dans une position où il doit être anti-aliasé. Si c'est le cas, vous devez le remplacer par le caractère correct. Si ce n'est pas le cas, le personnage reste le même.
Comment savoir si un personnage doit être anti-aliasé? La réponse dépend des caractères qui se trouvent immédiatement au-dessus, en dessous, à gauche et à droite du caractère ( pas les diagonales ). Voici un tableau indiquant les cas où l’anti-aliasing est requis, où ?
et x
peut signifier tout caractère non-blanc.
x? -> d?
? ?
?x -> ?b
? ?
? ?
?x -> ?F
? ?
x? -> Y?
x -> ; Note: This character has been changed from _ to ;
? ?
? ?
x -> V
?x -> ?>
x? -> <?
x -> @
Entrée (et exemple d'art ASCII pré-anti-aliasing)
Tout d'abord, il y aura deux lignes d'entrée (à STDIN), un nombre H suivi d'un nombre W. Il y aura ensuite des lignes H de caractères exactement W (à l'exception de la nouvelle ligne). Les lignes suivantes constitueront l’art ASCII qui doit être anti-aliasé. Voici un exemple d'entrée (pas beau, mais un test):
7
9
888888
888888
999 98 7
666666
666666
6666
6
Sortie (et exemple d'art anti-aliasé)
Votre programme doit sortir vers STDOUT l’art ASCII (de mêmes dimensions), qui a été anti-aliasé. Voici la sortie pour l'entrée ci-dessus. Notez que les caractères de bordure sont traités comme des espaces blancs.
d8888>
d8888F
<99 98 @
Y6666b
Y6666>
Y66F
V
Cela peut ne pas sembler très bon (en raison de l'espace entre les lignes du bloc de code), il est plus esthétique avec les illustrations ASCII plus volumineuses et la qualité dépend de la police utilisée.
Un autre exemple
Contribution
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
Sortie
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
Règles, restrictions et notes
Votre programme doit être écrit en caractères ASCII imprimables uniquement, afin que nous puissions en faire des oeuvres. Autre que cela, les règles standard de code-golf s'appliquent.
_
est devenu;
parce que ça marche mieux.