Hintergrund
ASCII-Kunst ist das Erstellen von Bildern mithilfe von ASCII-Text, um Formen zu bilden.
Aliasing ist der Effekt, der durch die großen "Pixel" der ASCII-Grafik erzeugt wird, die der Größe der Zeichen entsprechen. Das Bild wird blockig und schwer zu sehen. Anti-Aliasing entfernt diesen Effekt, indem ein Farbverlauf erstellt und die harten Kanten der ASCII-Grafik geglättet werden.
Die Herausforderung
Ihre Herausforderung besteht darin, das kürzestmögliche Programm zu schreiben, das ein Stück ASCII-Kunst aufnimmt und eine Version ausgibt, die geglättet wurde.
Welche Art von Anti-Aliasing?
Alle ASCII-Zeichen bestehen aus zwei Arten von Symbolen: Leerzeichen und Nicht-Leerzeichen. Für jedes Nicht-Whitespace-Zeichen muss Ihr Programm ermitteln, ob es sich an einer Position befindet, an der ein Anti-Aliasing erforderlich ist. Wenn dies der Fall ist, müssen Sie es durch das richtige Zeichen ersetzen. Ist dies nicht der Fall, bleibt der Charakter derselbe.
Woher weißt du, ob ein Charakter geglättet werden muss? Die Antwort hängt von den Zeichen ab, die unmittelbar über, unter, links und rechts vom Zeichen stehen ( nicht von den Diagonalen ). Hier ist ein Diagramm , wenn Anti-Aliasing erforderlich ist, wo ?
und x
für jede Nicht-Leerzeichen stehen kann.
x? -> d?
? ?
?x -> ?b
? ?
? ?
?x -> ?F
? ?
x? -> Y?
x -> ; Note: This character has been changed from _ to ;
? ?
? ?
x -> V
?x -> ?>
x? -> <?
x -> @
Eingabe (und Beispiel für eine Pre-Anti-Aliasing-ASCII-Grafik)
Zuerst gibt es zwei Eingabezeilen (für STDIN), eine Zahl H, gefolgt von einer Zahl W. Dann gibt es H Zeilen mit jeweils genau W Zeichen (ohne die neue Zeile). Diese folgenden Zeilen sind ASCII-Zeichen, die geglättet werden müssen. Hier ist eine Beispieleingabe (nicht schön, aber ein Test):
7
9
888888
888888
999 98 7
666666
666666
6666
6
Ausgabe (und Beispiel Anti-Alias-Art)
Ihr Programm sollte die ASCII-Grafik (mit den gleichen Abmessungen), die mit Anti-Alias versehen wurde, an STDOUT ausgeben. Hier ist der Ausgang für den obigen Eingang. Beachten Sie, wie die Umrandungszeichen als angrenzende Leerzeichen behandelt werden.
d8888>
d8888F
<99 98 @
Y6666b
Y6666>
Y66F
V
Dies sieht möglicherweise nicht so gut aus (aufgrund des Abstands zwischen den Zeilen im Codeblock), bei größeren ASCII-Grafiken sieht es besser aus, und die Qualität hängt von der genauen verwendeten Schriftart ab.
Ein anderes Beispiel
Eingang
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
Ausgabe
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
Regeln, Einschränkungen und Hinweise
Ihr Programm sollte nur in druckbaren ASCII-Zeichen geschrieben sein, damit wir Kunst aus den Programmen machen können. Ansonsten gelten die Standard-Code-Golf-Regeln.
_
ist geworden,;
weil es besser funktioniert.