일본 플로터 드라이버
면접 대비시간 제한1초메모리 제한128 MB
POINT, TEXT, LINE, CLEAR, PRINT 명령을 ASCII 격자에서 실행하고, 겹친 문자를 정해진 규칙으로 합쳐 각 그림을 테두리와 함께 출력한다.
문제
당신이 근무하는 회사는 멋진 그림을 그릴 수 있는 플로터(plotter) 장치를 생산합니다. 특수 하드웨어가 없는 고객을 위해, 플로터의 동작을 흉내 내어 그 그림을 화면에 출력하는 에뮬레이션 드라이버를 작성해야 합니다.
플로터는 다음 몇 가지 그리기 명령으로 구동됩니다.
POINT x y— 주어진 좌표에 작은 원을 찍습니다.TEXT x y txt— 주어진 좌표에 한 줄의 문자열을 표시합니다.LINE x1 y1 x2 y2— 지정한 두 점 사이에 선을 그립니다.CLEAR x1 y1 x2 y2— 지정한 직사각형 영역을 지웁니다.PRINT— 출력 페이지를 인쇄하고 현재 작업을 종료합니다.
에뮬레이션 드라이버는 몇 개의 ASCII 문자로 그림을 표현하며, 문자 하나가 좌표계의 기본 단위입니다. 왼쪽 위 문자의 좌표는 (1, 1)이고, X축은 오른쪽, Y축은 아래쪽을 향합니다.
각 명령은 다음과 같이 처리됩니다.
- POINT: 주어진 좌표에 소문자
o를 찍습니다. - TEXT: 한 줄의 문자열을 표시하며, 첫 글자가 주어진 좌표에 놓이고 문자열은 항상 오른쪽으로 이어집니다.
- LINE: 두 점 사이의 직선을 흉내 냅니다. 선은 방향에 따라 대시(
-), 파이프(|), 슬래시(/), 백슬래시(\) 중 하나의 문자로 이루어집니다. - CLEAR: 경계가 되는 행과 열을 포함하여 해당 직사각형 영역을 공백으로 채웁니다.
- PRINT: 그림을 플러스(
+), 마이너스(-), 파이프(|) 문자로 만든 테두리로 감싸 인쇄합니다.
한 문자 위에 여러 대상이 겹쳐 그려질 때는 다음 규칙을 따릅니다.
- 같은 문자가 여러 번 그려지면, 그대로 사용합니다.
- 파이프와 마이너스 문자만 관여하면, 플러스(
+)가 됩니다. - 슬래시와 백슬래시만 관여하면, 소문자
x가 됩니다. - 그 외의 경우에는 별표(
*)가 표시됩니다.
드라이버에 스크립트가 주어지기 전, 특별한 전처리기가 모든 잘못된 명령을 걸러 냅니다. 따라서 모든 좌표는 페이지 범위 안에 있다고 가정할 수 있습니다. 또한 LINE 명령에서 두 점은 항상 서로 다르며, 선은 반드시 수직, 수평, 또는 두 축에 대해 45° 각도 중 하나입니다. LINE과 CLEAR 명령에서 두 점의 상대적 위치에 대한 가정은 없습니다. TEXT 명령의 문자열은 항상 대문자와 숫자로만 이루어집니다.
입력
입력은 여러 개의 스크립트로 이루어집니다. 각 스크립트는 공백으로 구분된 두 정수 X와 Y가 있는 줄로 시작하며(), 이 값은 페이지의 크기를 나타냅니다. 이후의 각 줄에는 위 명령 중 정확히 하나가 담깁니다. 명령은 항상 대문자이고, 명령의 인자들은 하나의 공백으로 구분됩니다.
PRINT 명령은 항상 스크립트의 마지막 명령입니다. PRINT 뒤에는 새로운 스크립트가 시작됩니다. 입력은 두 개의 0으로 끝나며, 이는 스크립트로 간주하지 않습니다.
출력
각 스크립트에 대해 위에서 설명한 대로 만들어진 그림을 출력합니다. 서로 이웃한 두 그림 사이에는 빈 줄 하나를 둡니다.