Loading Now

Bishop And Pawn

Bàn cờ vua là một bảng có 8*8 ô vuông

Mỗi ô trên bàn cờ được kí hiệu bằng 2 kí tự – 1 kí tự chữ cái và 1 kí tự số

  • Các cột hàng dọc được gán nhãn từ trái sang phải bằng các kí tự chữ cái từ 'a' tới 'h' 
  • Các hàng ngang được đánh số từ 1 tới 8 từ phía dưới lên trên
  • Vị trí mỗi một ô trên bàn cờ được thể hiện bằng xâu có 2 kí tự: kí tự đầu tiên thể hiện cột, kí tự thứ hai thể hiện hàng. Ví dụ như a8, b3, c2, ...

Cho tọa độ tượng trắng bishop và tốt đen pawn trên bàn cờ tiêu chuẩn,  kiểm tra xem tượng trắng có thể ăn tốt đen trong một nước đi hay không? 

Tượng là quân có thể di chuyển tới các ô trên cùng đường chéo, giống như hình minh họa bên dưới

Ví dụ

  • Với bishop = "a1" và pawn = "c3", kết quả bishopAndPawn(bishop, pawn) = true.

  • Với bishop = "h1" và pawn = "h3", kết quả bishopAndPawn(bishop, pawn) = false.

Đầu vào/Đầu ra

  • [Thời gian chạy] 0.5 giây

  • [Đầu vào] string bishop
    Tọa độ của con tượng trắng.
    Điều kiện:
    bishop.length = 2,
    'a' ≤ bishop[0] ≤ 'h',
    1 ≤ bishop[1] ≤ 8.

  • [Đầu vào] string pawn
    Tọa độ của con tốt đen.
    Điều kiện:
    pawn.length = 2,
    'a' ≤ pawn[0] ≤ 'h',
    1 ≤ pawn[1] ≤ 8.

  • [Đầu ra] boolean

Lý thuyết : 

  • Cho 1 ma trận n * n
  • Đường chéo chính là đường chéo đi từ ô (1, 1) đến ô (n, n), bao gồm các ô có dạng A[i][i] (i = 1 .. n)
  • Đường chéo phụ là đường chéo đi từ ô (1, n) đến ô (n, 1), bao gồm các ô có dạng A[i][n + 1 - i] (i = 1 .. n)
  • 2 ô và nằm trên cùng 1 đường chéo khi và chỉ khi chúng có tổng tọa độ hoặc hiệu tọa độ bằng nhau
  • Tức là, 2 ô (x, y) và (u, v) cùng đường chéo <=> x + y = u + v hoặc x - y = u - v
  • Hình ảnh minh họa

Hướng dẫn bài tập.

Code mẫu:

Ngôn ngữ C++:

bool bishopAndPawn(std::string bishop, std::string pawn)
{
    return (abs(bishop[0] - pawn[0]) == abs(bishop[1] - pawn[1]) && bishop[0] - pawn[0] != 0);
}

Post Comment

Contact