Задний план
Искусство ASCII - это практика создания изображений с использованием текста ASCII для формирования фигур.
Псевдоним - это эффект, создаваемый большими «пикселями» ASCII-графики размером с символы. Изображение становится блочным и плохо различимым. Сглаживание устраняет этот эффект, создавая градиент и смягчая жесткие края ASCII-графики.
Соревнование
Ваша задача состоит в том, чтобы написать самую короткую из возможных программ, которая возьмет часть искусства ASCII и выведет версию, которая была сглажена.
Что за сглаживание?
Все искусство ASCII будет состоять из двух типов символов: пробелы и непробельные символы. Для каждого символа, не являющегося пробелом, ваша программа должна определить, находится ли она в положении, в котором она должна быть сглажена. Если это так, то вам нужно заменить его на правильный символ. Если это не так, то персонаж остается прежним.
Как вы узнаете, должен ли персонаж быть сглаженным? Ответ зависит от символов, которые находятся непосредственно выше, ниже, слева и справа от символа ( не диагонали ). Вот диаграмма того, когда требуется сглаживание, где ?
и x
может обозначать любой непробельный символ.
x? -> d?
? ?
?x -> ?b
? ?
? ?
?x -> ?F
? ?
x? -> Y?
x -> ; Note: This character has been changed from _ to ;
? ?
? ?
x -> V
?x -> ?>
x? -> <?
x -> @
Ввод (и пример предварительного сглаживания ASCII art)
Во-первых, будет две строки ввода (в STDIN), число H, за которым следует число W. Затем будет H строк ровно по W символов каждая (исключая символ новой строки). Эти следующие строки будут искусством ASCII, которое должно быть сглажено. Вот пример ввода (не красивый, но тестовый):
7
9
888888
888888
999 98 7
666666
666666
6666
6
Вывод (и пример сглаженного искусства)
Ваша программа должна выводить в STDOUT искусство ASCII (тех же размеров), которое было сглажено. Вот вывод для вышеуказанного ввода. Обратите внимание, как символы границы обрабатываются как ограничивающие пробелы.
d8888>
d8888F
<99 98 @
Y6666b
Y6666>
Y66F
V
Это может выглядеть не очень хорошо (из-за пробела между строками в блоке кода), это выглядит лучше с большим ASCII-изображением, а качество зависит от используемого шрифта.
Другой пример
вход
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
Выход
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
Правила, ограничения и примечания
Ваша программа должна быть написана только для печатных символов ASCII, чтобы мы могли создавать рисунки из этих программ. Кроме этого, применяются стандартные правила игры в гольф.
_
стало;
потому, что работает лучше.