아날로그 시계 그리기

시간 제한1초메모리 제한128 MB

요약
HH:MM 형식의 시각이 주어지면 시침과 분침을 선분으로 래스터화해 고정 크기 ASCII 아날로그 시계 문자판을 정해진 문자 규칙에 따라 그린다.
난이도

보통10점 중 7점

유형
기하, 시뮬레이션, 구현, 수학
정답자
아직 제출이 없습니다

문제

우리의 낡은 시계가 네 시를 알리는 종을 친 뒤, 그 마지막 소리와 함께 나뭇가지 더미로 부서져 버렸습니다. 시계를 고치는 데 필요한 기술은 오래전에 잊혀 사라졌기에, 우리는 시계를 컴퓨터 프로그램으로 대체하기로 했습니다.

쉬운 일이라고요? 한 가지 더 말씀드릴 것이 있습니다. 최근 외계 생명체에 대한 연구에 따르면, 그들은 디지털 세계에 살고 있어 바늘 두 개가 움직이는 전통적인 시계판을 읽지 못한다고 합니다. 그것은 그들의 기술 수준을 넘어서는 일입니다. 그래서 보안 위원회는, 시간 정보를 인간이 아닌 존재로부터 지키기 위해 새 시계가 바로 그런 전통적인 "아날로그" 방식의 표시를 사용해야 한다고 결정했습니다.

입력

입력은 여러 개의 인스턴스로 이루어집니다. 각 인스턴스는 콜론으로 구분된 두 정수 HH (0≤H≤230 \le H \le 23)와 MM (0≤M≤590 \le M \le 59)이 한 줄에 주어집니다. MM은 항상 두 자리로 주어지고, HH는 한 자리 또는 두 자리입니다. 즉 H=0H = 0인 경우를 제외하면 앞에 00이 붙지 않습니다.

마지막 인스턴스 다음 줄에는 단어 END가 주어집니다.

출력

각 입력 인스턴스 H:M에 대해, HH시 MM분을 나타내는 ASCII 아트 시계판을 아래 규칙에 따라 그리세요.

시계의 테두리는 한 변이 5151글자인 정사각형입니다. 이 글자들은 대문자 X이지만, 네 모서리와 열 번째마다 오는 글자는 항상 @입니다. 숫자 33, 66, 99, 1212는 각각 알맞은 변의 가운데에 놓이며, 숫자와 테두리 사이에는 정확히 한 칸의 공백이 있습니다. 1212에서는 두 숫자 11과 22 사이에 한 칸의 공백이 있습니다. 시계판의 중심에는 항상 별표 *가 놓입니다. 시각적으로 비어 있는 칸은 모두 단순한 공백입니다.

두 바늘은 시각에 따라 달라지는 유일한 요소입니다. 아래 설명에서는 각 글자 칸(공백이든 아니든)을 한 변이 11인 정사각형으로 보고, 좌표계의 원점 (0,0)(0, 0)을 별표가 있는 칸의 중심에 두며, 첫 번째 축은 오른쪽을, 두 번째 축은 위쪽을 향한다고 가정합니다.

시침은 (0,0)(0, 0)에서 시작하는 길이 1515의 선분입니다. 1212시에 똑바로 위를 가리키며, 매 분 같은 각도만큼 균일하게 회전합니다. 분침은 (0,0)(0, 0)에서 시작하는 길이 2121의 선분으로, 매 정시마다 똑바로 위를 가리키고 역시 매 분 시계 방향으로 균일하게 회전합니다. 분침은 시침보다 위에 있다고 보므로, 시침을 나타내는 글자는 분침의 일부에 가려질 수 있습니다.

수직 방향과 이루는 각이 DD도인 직선은 다음과 같이 그립니다. 0≤D≤450 \le D \le 45이면, 각 행 ii마다 글자 하나를 찍되, 기하학적 직선 위에 정확히 놓인 점 (xi,i)(x_i, i)(xix_i는 실수)에 가장 가까운 정수 좌표 (ni,i)(n_i, i)에 찍습니다. 45≤D≤9045 \le D \le 90이면, 각 열 ii마다 글자 하나를 찍되, 직선 위의 실수 점 (i,yi)(i, y_i)에 가장 가까운 정수 좌표 (i,ki)(i, k_i)에 찍습니다.

어떤 위치 (i,j)(i, j)에 그려지는 글자는 그 직선의 두 이웃 글자에 따라 결정됩니다. 그 글자는

  • (i−1,j)(i-1, j)와 (i+1,j)(i+1, j) 두 위치에도 글자가 있으면 빼기 기호 -,
  • (i,j−1)(i, j-1)와 (i,j+1)(i, j+1) 두 위치에도 글자가 있으면 세로줄 |,
  • (i−1,j+1)(i-1, j+1)와 (i+1,j−1)(i+1, j-1) 위치에 글자가 있으면 역슬래시 \,
  • (i−1,j−1)(i-1, j-1)와 (i+1,j+1)(i+1, j+1) 두 위치에도 글자가 있으면 슬래시 /,
  • 그 외의 경우에는 소문자 o입니다.

(0,0)(0, 0)에서 시작하는 길이 SS의 선분은 위와 똑같이 직선의 글자들을 만들되, 칸의 중심과 원점 사이의 거리가 SS 이하인 글자, 즉 0<∣(0,0),(i,j)∣≤S0 < |(0,0),(i,j)| \le S인 글자만, 그리고 직선의 한쪽 방향으로만 찍어서 그립니다.

남은 애매한 부분은 예제 출력을 참고하여 해결하세요. 인접한 시계판 사이에는 빈 줄을 하나씩 넣어 구분합니다.

예제3

  1. 예제 1

    입력
    1:03
    14:27
    END
    
    예상 출력
    @XXXXXXXXX@XXXXXXXXX@XXXXXXXXX@XXXXXXXXX@XXXXXXXXX@
    X                                                 X
    X                       1 2                       X
    X                                                 X
    X                                                 X
    X                              o                  X
    X                              |                  X
    X                              |                  X
    X                              o                  X
    X                             o                   X
    @                             |                   @
    X                             o                   X
    X                            o                    X
    X                            |  o                 X
    X                            o  o                 X
    X                           o  o                  X
    X                           |  o                  X
    X                           o /                   X
    X                          o o                    X
    X                          | o                    X
    @                          o/                     @
    X                         oo                      X
    X                         |o                      X
    X                         o                       X
    X                        oo                       X
    X 9                      *                      3 X
    X                                                 X
    X                                                 X
    X                                                 X
    X                                                 X
    @                                                 @
    X                                                 X
    X                                                 X
    X                                                 X
    X                                                 X
    X                                                 X
    X                                                 X
    X                                                 X
    X                                                 X
    X                                                 X
    @                                                 @
    X                                                 X
    X                                                 X
    X                                                 X
    X                                                 X
    X                                                 X
    X                                                 X
    X                                                 X
    X                        6                        X
    X                                                 X
    @XXXXXXXXX@XXXXXXXXX@XXXXXXXXX@XXXXXXXXX@XXXXXXXXX@
    
    @XXXXXXXXX@XXXXXXXXX@XXXXXXXXX@XXXXXXXXX@XXXXXXXXX@
    X                                                 X
    X                       1 2                       X
    X                                                 X
    X                                                 X
    X                                                 X
    X                                                 X
    X                                                 X
    X                                                 X
    X                                                 X
    @                                                 @
    X                                                 X
    X                                                 X
    X                                                 X
    X                                                 X
    X                                                 X
    X                                                 X
    X                                                 X
    X                                                 X
    X                                                 X
    @                                                 @
    X                                    o--          X
    X                                 o-o             X
    X                              o-o                X
    X                          o--o                   X
    X 9                      *o                     3 X
    X                        o                        X
    X                         o                       X
    X                         |                       X
    X                         o                       X
    @                          o                      @
    X                          |                      X
    X                          o                      X
    X                           o                     X
    X                           |                     X
    X                           o                     X
    X                            o                    X
    X                            |                    X
    X                            o                    X
    X                             o                   X
    @                             |                   @
    X                             o                   X
    X                              o                  X
    X                              |                  X
    X                              |                  X
    X                              o                  X
    X                                                 X
    X                                                 X
    X                        6                        X
    X                                                 X
    @XXXXXXXXX@XXXXXXXXX@XXXXXXXXX@XXXXXXXXX@XXXXXXXXX@
    
  2. 예제 2

    입력
    10:10
    END
    
    예상 출력
    @XXXXXXXXX@XXXXXXXXX@XXXXXXXXX@XXXXXXXXX@XXXXXXXXX@
    X                                                 X
    X                       1 2                       X
    X                                                 X
    X                                                 X
    X                                                 X
    X                                                 X
    X                                                 X
    X                                                 X
    X                                                 X
    @                                                 @
    X                                                 X
    X                                                 X
    X                                                 X
    X                                                 X
    X                                         oo      X
    X                                       oo        X
    X            oo                       oo          X
    X              \                     /            X
    X               oo                 oo             X
    @                 \              oo               @
    X                  oo           /                 X
    X                    \        oo                  X
    X                     \     oo                    X
    X                      oo oo                      X
    X 9                      *                      3 X
    X                                                 X
    X                                                 X
    X                                                 X
    X                                                 X
    @                                                 @
    X                                                 X
    X                                                 X
    X                                                 X
    X                                                 X
    X                                                 X
    X                                                 X
    X                                                 X
    X                                                 X
    X                                                 X
    @                                                 @
    X                                                 X
    X                                                 X
    X                                                 X
    X                                                 X
    X                                                 X
    X                                                 X
    X                                                 X
    X                        6                        X
    X                                                 X
    @XXXXXXXXX@XXXXXXXXX@XXXXXXXXX@XXXXXXXXX@XXXXXXXXX@
    
  3. 예제 3

    입력
    0:00
    END
    
    예상 출력
    @XXXXXXXXX@XXXXXXXXX@XXXXXXXXX@XXXXXXXXX@XXXXXXXXX@
    X                                                 X
    X                       1 2                       X
    X                                                 X
    X                        |                        X
    X                        |                        X
    X                        |                        X
    X                        |                        X
    X                        |                        X
    X                        |                        X
    @                        |                        @
    X                        |                        X
    X                        |                        X
    X                        |                        X
    X                        |                        X
    X                        |                        X
    X                        |                        X
    X                        |                        X
    X                        |                        X
    X                        |                        X
    @                        |                        @
    X                        |                        X
    X                        |                        X
    X                        |                        X
    X                        |                        X
    X 9                      *                      3 X
    X                                                 X
    X                                                 X
    X                                                 X
    X                                                 X
    @                                                 @
    X                                                 X
    X                                                 X
    X                                                 X
    X                                                 X
    X                                                 X
    X                                                 X
    X                                                 X
    X                                                 X
    X                                                 X
    @                                                 @
    X                                                 X
    X                                                 X
    X                                                 X
    X                                                 X
    X                                                 X
    X                                                 X
    X                                                 X
    X                        6                        X
    X                                                 X
    @XXXXXXXXX@XXXXXXXXX@XXXXXXXXX@XXXXXXXXX@XXXXXXXXX@