tło
Sztuka ASCII to praktyka tworzenia obrazów przy użyciu tekstu ASCII do kształtowania kształtów.
Aliasing to efekt utworzony przez duże „piksele” grafiki ASCII, które mają wielkość znaków. Obraz staje się blokujący i trudny do zobaczenia. Wygładzanie usuwa ten efekt, tworząc gradient i zmiękczając twarde krawędzie sztuki ASCII.
Wyzwanie
Twoim wyzwaniem jest napisanie możliwie najkrótszego programu, który weźmie kawałek ASCII i wyświetli wersję, która została wygładzona.
Jaki rodzaj antyaliasingu?
Cała sztuka ASCII będzie się składać z dwóch rodzajów symboli: spacji i spacji. Dla każdego znaku niebiałego twój program musi ustalić, czy znajduje się w pozycji, w której należy go wygładzić. Jeśli tak, musisz zastąpić go prawidłowym znakiem. Jeśli tak nie jest, postać pozostaje ta sama.
Skąd wiesz, czy postać wymaga wygładzenia? Odpowiedź zależy od postaci, które znajdują się bezpośrednio powyżej, poniżej, lewej i prawej strony znaku ( nie przekątnych ). Oto wykres, kiedy wymagane jest wygładzanie, gdzie ?
i x
może oznaczać dowolny znak inny niż biały.
x? -> d?
? ?
?x -> ?b
? ?
? ?
?x -> ?F
? ?
x? -> Y?
x -> ; Note: This character has been changed from _ to ;
? ?
? ?
x -> V
?x -> ?>
x? -> <?
x -> @
Dane wejściowe (i przykładowa grafika ASCII sprzed antyaliasingu)
Najpierw będą dwa wiersze wprowadzania (do STDIN), liczba H, po której następuje liczba W. Następnie pojawią się H wiersze o dokładnie W znakach (z wyjątkiem nowej linii). Te kolejne wiersze będą sztuką ASCII, którą należy wygładzić. Oto przykładowe dane wejściowe (nie piękne, ale testowe):
7
9
888888
888888
999 98 7
666666
666666
6666
6
Wyjście (i przykładowa sztuka antyaliasingu)
Twój program powinien wypisać do STDOUT grafikę ASCII (o tych samych wymiarach), która została wygładzona. Oto dane wyjściowe dla powyższego wejścia. Zwróć uwagę, jak znaki obramowania są traktowane jako graniczące białe znaki.
d8888>
d8888F
<99 98 @
Y6666b
Y6666>
Y66F
V
To może nie wyglądać tak dobrze (ze względu na odstępy między wierszami w bloku kodu), lepiej wygląda z większą grafiką ASCII, a jakość zależy od dokładnej użytej czcionki.
Inny przykład
Wkład
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
Wydajność
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
Reguły, ograniczenia i uwagi
Twój program powinien być napisany tylko drukowalnymi znakami ASCII, abyśmy mogli tworzyć z nich dzieła sztuki. Poza tym obowiązują standardowe zasady gry w golfa kodowego.
_
stał się,;
ponieważ działa lepiej.