sfondo
L'arte ASCII è la pratica di creare immagini usando il testo ASCII per formare forme.
L'aliasing è l'effetto creato dai grandi "pixel" dell'arte ASCII, che sono le dimensioni dei caratteri. L'immagine diventa bloccata e difficile da vedere. L'antialiasing rimuove questo effetto creando un gradiente e ammorbidendo i bordi duri dell'arte ASCII.
La sfida
La tua sfida è quella di scrivere il programma più breve possibile che prenderà un pezzo di arte ASCII e produrrà una versione che è stata anti-alias.
Che tipo di anti-aliasing?
Tutta l'arte ASCII sarà composta da due tipi di simboli: spazi e non spazi bianchi. Per ogni personaggio non bianco, il tuo programma deve determinare se si trova in una posizione in cui deve essere anti-alias. In tal caso, è necessario sostituirlo con il carattere corretto. In caso contrario, il personaggio rimane lo stesso.
Come fai a sapere se un personaggio deve essere anti-aliasing? La risposta dipende dai caratteri che si trovano immediatamente sopra, sotto, a sinistra ea destra del personaggio ( non le diagonali ). Ecco un grafico di quando è richiesto l'antialiasing, dove ?
e x
può rappresentare qualsiasi carattere non di spazi bianchi.
x? -> d?
? ?
?x -> ?b
? ?
? ?
?x -> ?F
? ?
x? -> Y?
x -> ; Note: This character has been changed from _ to ;
? ?
? ?
x -> V
?x -> ?>
x? -> <?
x -> @
Input (ed esempio arte ASCII pre-antialiasing)
Innanzitutto, ci saranno due righe di input (a STDIN), un numero H seguito da un numero W. Quindi ci saranno H righe di esattamente W caratteri ciascuna (esclusa la nuova riga). Queste righe seguenti saranno l'arte ASCII che deve essere anti-alias. Ecco un esempio di input (non bello, ma un test):
7
9
888888
888888
999 98 7
666666
666666
6666
6
Output (ed esempio arte anti-aliasing)
Il tuo programma dovrebbe inviare a STDOUT l'arte ASCII (delle stesse dimensioni), che è stata anti-alias. Ecco l'output per l'input sopra. Notare come i caratteri del bordo vengono trattati come spazi bianchi confinanti.
d8888>
d8888F
<99 98 @
Y6666b
Y6666>
Y66F
V
Questo potrebbe non sembrare così buono (a causa dello spazio tra le linee nel blocco di codice), sembra migliore con l'arte ASCII più grande e la qualità dipende dall'esatto carattere utilizzato.
Un altro esempio
Ingresso
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
Produzione
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
Regole, restrizioni e note
Il tuo programma dovrebbe essere scritto solo con caratteri ASCII stampabili, in modo da poter creare arte dai programmi. Oltre a ciò, si applicano le regole standard del code-golf.
_
è diventato;
perché funziona meglio.