PostScript 에뮬레이션

아직 제출이 없습니다시간 제한1초메모리 제한128 MB

문제

PostScript®는 레이저 프린터에서 널리 쓰이는 페이지 기술 언어입니다. 기본 측정 단위는 포인트(point)이며, 1인치는 정확히 72포인트입니다. 기본 좌표계는 익숙한 데카르트 좌표계로, 원점(x와 y 좌표가 모두 0인 점)은 페이지의 왼쪽 아래 모서리에 있습니다.

이 문제에서는 PostScript의 일부 명령만 처리하면 됩니다. 아래에 나열된 명령이 그 대상이며, 모든 명령은 소문자로 주어집니다. 설명에서 number라고 쓴 자리에는 부호와 소수점이 있을 수 있는 실수 값이 입력으로 들어옵니다. 한 명령에 숫자가 두 개 나오면 첫 번째는 x 좌표, 두 번째는 y 좌표입니다. 각 명령은 한 줄에 하나씩 주어지고, 명령의 구성 요소는 공백 하나로 구분되며, 명령 뒤에는 곧바로 줄바꿈 문자가 옵니다. 첫 번째 칸에 별표(*) 하나만 있는 줄이 나오면 입력이 끝납니다.

  • number rotatenumber는 각도(도 단위)입니다. 현재 원점을 중심으로 좌표계를 number도만큼 반시계 방향으로 회전합니다. 이미 그려진 선에는 영향을 주지 않습니다. 예: 90 rotate는 축을 반시계 방향으로 90° 회전시켜, 이제 양의 y축은 왼쪽을, 양의 x축은 위쪽을 가리키게 됩니다.
  • number number translate — 좌표계의 원점을 지정한 위치로 옮깁니다. 위치는 현재 원점을 기준으로 해석됩니다. 예: 세로 방향의 8.5" × 11" 페이지에서 612 792 translate는 원점을 오른쪽 위 모서리로 옮기며, 이후에는 x와 y가 모두 음수인 점만 실제 페이지 위에 놓입니다.
  • number number scale — 물체의 x, y 크기에 지정한 배율을 각각 곱합니다. 예: 3 2 scale 이후에는 (0, 0)에서 (72, 72)로 그은 선이, (명령 직전까지 원래 좌표계였다고 가정할 때) 왼쪽 아래 모서리에서 오른쪽으로 3인치, 위로 2인치인 점까지 그은 것처럼 그려집니다.
  • number number moveto — 현재 점을 지정한 절대 좌표로 옮깁니다. 예: 원래 좌표계에서 72 144 moveto는 현재 점을 왼쪽 가장자리에서 오른쪽으로 1인치, 아래 가장자리에서 위로 2인치인 위치로 옮깁니다.
  • number number rmovetomoveto와 같지만 좌표를 현재 위치에 대한 상대값으로 해석합니다. 예: 위 예 다음에 144 -36 rmoveto를 실행하면 현재 점이 오른쪽으로 2인치 더, 아래로 0.5인치 이동하여 (216, 108)이 됩니다. 숫자는 음수일 수 있습니다.
  • number number lineto — 현재 위치에서 지정한 절대 좌표까지 선을 그리고, 현재 위치를 그 점으로 옮깁니다. 예: (216, 108)에서 216 144 lineto는 (216, 144)까지 0.5인치 길이의 세로선을 그립니다.
  • number number rlinetolineto와 같지만 좌표를 현재 위치에 대한 상대값으로 해석하며, 그려진 선의 끝점이 새 현재 위치가 됩니다. 예: (216, 144)에서 0 144 rlineto는 (216, 288)까지 2인치 길이의 세로선을 그립니다.

이러한 PostScript 프로그램 하나를 읽어, rotate, translate, scale 명령을 쓰지 않고 같은 그림을 그리는 프로그램을 출력하세요. 입력의 모든 moveto, rmoveto, lineto, rlineto 명령은 (보통 숫자만 바뀐 채) 출력에도 나타나야 하고, rotate, translate, scale 명령은 출력에 전혀 나타나면 안 됩니다. 실행이 시작될 때는 원래 좌표계가 적용되어 있다고 가정합니다.

출력 형식. 한 줄에 명령 하나씩 출력합니다. 각 좌표 값은 소수점 아래 둘째 자리에서 반올림한 결과가 정수이면 정수로, 그렇지 않으면 소수점 아래 정확히 두 자리로 출력합니다. 값이 0이면 0으로 출력하고 -0은 쓰지 않습니다. 두 숫자와 명령 이름은 공백 하나로 구분합니다.