보드 게임의 모든 이동 나열

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

요약
X와 O 말이 놓인 8x8 보드에서 한 플레이어의 합법적인 이동을 모두 나열한다. 각 말은 자신이 향한 줄에 있는 말의 수만큼 정확히 이동한다.
난이도

보통10점 중 5점

유형
시뮬레이션, 구현, 배열
정답자
아직 제출이 없습니다

문제

보드 게임 엔진의 일부를 작성합니다. 판의 배치와 한 명의 플레이어가 주어질 때, 그 플레이어가 둘 수 있는 모든 합법적인 이동을 나열해야 합니다.

게임은 모두 같은 색인 8×88 \times 8 칸의 격자판에서 진행됩니다. 행은 위에서 아래로 A부터 H까지, 열은 왼쪽에서 오른쪽으로 1부터 8까지 이름이 붙습니다. 따라서 각 칸은 행 문자 뒤에 열 숫자를 붙여 나타냅니다(예를 들어 A1은 가장 왼쪽 위 칸, H8은 가장 오른쪽 아래 칸입니다).

두 플레이어가 있으며, 각자의 말은 X와 O(숫자 0이 아니라 알파벳 "오")로 표기합니다. 어느 시점에나 각 플레이어는 판 위에 1개 이상 12개 이하의 말을 가집니다. 이동은 다음 규칙을 따릅니다.

  1. 말은 직선으로만 움직입니다 — 왼쪽, 오른쪽, 위, 아래, 또는 두 대각선 방향 중 하나입니다.
  2. 말이 움직이는 칸 수는, 움직이는 방향의 행·열·대각선에 현재 놓인 양쪽 플레이어의 말 전체 개수와 같습니다. 말은 반드시 정확히 그 칸 수만큼 움직여야 하며, 그보다 많거나 적게 움직일 수 없습니다.
  3. 말은 자기 편 말을 뛰어넘을 수 있습니다.
  4. 말은 상대 편 말을 뛰어넘을 수 없습니다.
  5. 말은 상대 편 말이 있는 칸에 도착하여 그 말을 잡을 수 있습니다.
  6. 말은 이미 자기 편 말이 있는 칸에는 도착할 수 없습니다.

입력

입력은 하나 이상의 판 배치로 이루어집니다. 각 배치는 8개의 문자로 이루어진 8줄로 주어지며, 각 문자는 X, O, 또는 .(마침표)입니다. X와 O는 말이 놓인 칸을, .은 빈 칸을 나타냅니다. 각 판 바로 다음 줄에는 X 또는 O 문자 하나가 있으며, 이는 이동을 나열할 플레이어를 가리킵니다. 입력은 파일의 끝에서 종료됩니다.

출력

각 판에 대해, 지정된 플레이어의 모든 합법적인 이동을 한 줄에 하나씩 출력합니다. 각 줄은 출발 칸과 도착 칸을 그 순서대로 하이픈 - 하나로 이어서 나타냅니다(예: A1-B2). 각 칸은 행 문자 뒤에 열 숫자를 붙여 적습니다. 해당 판에서 그 플레이어가 둘 수 있는 이동이 없으면 대신 No moves are possible을 출력합니다. 연속한 판의 출력 사이는 빈 줄 하나로 구분합니다.

출력이 유일하게 정해지도록, 다음 순서를 정확히 지켜 이동을 나열합니다. 판의 칸을 위에서 아래로, 각 행 안에서는 왼쪽에서 오른쪽으로 훑습니다. 지정된 플레이어의 각 말에 대해, 여덟 방향을 시계 방향 순서로 — 위, 오른쪽 위, 오른쪽, 오른쪽 아래, 아래, 왼쪽 아래, 왼쪽, 왼쪽 위 — 검사하여, 합법적인 이동을 발견한 순서대로 출력합니다.

예제3

  1. 예제 1

    입력
    O.......
    O......X
    O.....XX
    O....XXX
    .O...XXX
    ........
    ..O..XXX
    ........
    O
    ..OXO...
    ..OOO...
    ........
    ........
    ........
    ........
    ........
    ........
    X
    
    예상 출력
    A1-A2
    A1-C3
    A1-E1
    B1-A2
    B1-B3
    B1-D3
    B1-F1
    C1-B2
    C1-C4
    C1-D2
    C1-G1
    D1-C2
    D1-D5
    D1-F3
    D1-H1
    E2-D2
    E2-D3
    E2-E6
    E2-G4
    E2-F2
    E2-F1
    G3-F3
    G3-H4
    G3-H3
    G3-F2
    
    No moves are possible
    
  2. 예제 2

    입력
    ........
    ........
    ........
    ...O....
    ........
    ........
    ........
    ........
    O
    
    예상 출력
    D4-C4
    D4-C5
    D4-D5
    D4-E5
    D4-E4
    D4-E3
    D4-D3
    D4-C3
    
  3. 예제 3

    입력
    XO......
    OO......
    ........
    ........
    ........
    ........
    ........
    ........
    X
    
    예상 출력
    No moves are possible