에일리어싱(aliasing)은 디지털 장치가 아날로그 원본을 유한한 해상도로 표본화할 때 생기는 왜곡을 가리키는 말이다. 컴퓨터 그래픽스에서 흔히 나타나는 문제로, 직선이나 매끄러운 곡선을 낱낱의 픽셀로 그리면 계단처럼 울퉁불퉁하게 보인다. 예를 들어 직선
$$y = mx + b$$
을 단순하게 그리면 다음과 비슷한 결과가 나온다.
***
**
***
***
매끄러운 직선이라기보다는 계단에 가깝다.

에일리어싱(계단 현상, jaggies)은 안티에일리어싱으로 완화할 수 있다. 픽셀을 여러 단계의 회색으로 칠해서, 멀리서 보았을 때 영상이 더 매끄럽게 보이도록 하는 방법이다.
여기서 사용하는 방법은 각 열마다 두 개의 픽셀을 칠한다. 모든 정수 $x$에 대해 $y = mx + b$를 구하고, 이를 정수 부분 $y_w$($y$ 이하의 가장 큰 정수)와 소수 부분 $y_f$로 나눈다. 그러면
$$y_w + y_f = y, \qquad 0 \le y_f < 1$$
이 성립한다. 예를 들어 $y = 23.56$이면 $y_w = 23$, $y_f = 0.56$이고, $y = -1.3$이면 $y_w = -2$, $y_f = 0.7$이다.
픽셀의 회색 농도를 $0.0$부터 $1.0$까지의 수로 나타내자. $0.0$은 완전한 흰색, $1.0$은 완전한 검은색이다. 열 $x$에서는 다음과 같이 칠한다.
이 방법으로 안티에일리어싱된 직선을 그리는 프로그램을 작성하라.
입력은 여러 개의 테스트 케이스로 이루어진다. 각 케이스는 한 줄에 두 수 $m$과 $b$가 주어지며, 이는 직선 $y = mx + b$의 기울기와 $y$절편이다. 두 값 모두 소수점 아래 최대 두 자리까지의 실수로 주어진다. $m$은 $0.00$ 이상 $0.50$ 이하, $b$는 $-20.00$ 이상 $20.00$ 이하이다.
$m$과 $b$가 모두 $0$인 줄은 입력의 끝을 의미하며, 그리지 않는다.
각 입력 줄마다 별도의 그림을 그린다. 그림은 문자 $20 \times 20$ 크기이며, 데카르트 평면에서 $0 \le x < 20$, $0 \le y < 20$인 영역을 나타낸다. 직선이 지나지 않는 자리는 공백(빈칸)으로 둔다.
칠해지는 각 픽셀에 대해 회색 농도를 구한 뒤, 소수 첫째 자리로 반올림하고(정확히 중간 값이면 올림), 아래 표에서 대응하는 문자를 고른다.
| 반올림한 회색 농도 | 0.0 | 0.1 | 0.2 | 0.3 | 0.4 | 0.5 | 0.6 | 0.7 | 0.8 | 0.9 | 1.0 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 문자 | . | : | - | = | + | t | w | * | # | % | @ |
문자는 차례대로 마침표, 콜론, 붙임표, 등호, 더하기, 소문자 t, 소문자 w, 별표, 우물 정, 백분율, 골뱅이이다. $y_f$와 회색 농도는 반드시 정확히 계산해야 한다.
그림은 위쪽부터 아래로 출력한다. 즉 첫 줄이 $y = 19$, 마지막 줄이 $y = 0$이다. 각 줄은 20개의 문자로 이루어지며, 바로 앞과 뒤에 세로 막대(|)를 붙여 출력한다. 각 그림 뒤에는 밑줄(_) 22개로 이루어진 줄을 한 줄 출력한다.