Tên thay thế: ChessMoveQ
Đưa ra một danh sách tối đa 32 yếu tố, mỗi yếu tố bao gồm 4 yếu tố và danh sách thứ hai có 4 yếu tố, xác định xem di chuyển chi tiết trong đầu vào thứ hai có phải là một nước cờ hợp lệ hay không.
Danh sách đầu tiên cho biết vị trí của tất cả 32 miếng trên bảng. Mỗi yếu tố sẽ tuân theo cấu trúc <colour>, <piece-name>, <x-coord>, <y-coord>
, chẳng hạn như ["W", "K", 5, 1]
, chỉ ra rằng vua trắng đang ở trên 5, 1
( e1
trên bàn cờ bình thường). Tất cả các yếu tố của đầu vào đầu tiên sẽ là duy nhất. <x-coord>
và <y-coord>
sẽ luôn nằm trong khoảng từ 1 đến 8. Một ví dụ sẽ là:
[["B", "K", 3, 8], ["B", "Q", 1, 5], ["B", "N", 4, 7], ["B", "N", 7, 8],
["B", "B", 2, 4], ["B", "R", 4, 8], ["B", "R", 8, 8], ["B", "P", 1, 7],
["B", "P", 2, 7], ["B", "P", 3, 6], ["B", "P", 5, 6], ["B", "P", 6, 7],
["B", "P", 7, 7], ["B", "P", 8, 7], ["W", "K", 5, 1], ["W", "Q", 6, 3],
["W", "N", 3, 3], ["W", "B", 5, 2], ["W", "B", 6, 4], ["W", "R", 1, 1],
["W", "R", 8, 1], ["W", "P", 1, 3], ["W", "P", 2, 2], ["W", "P", 3, 2],
["W", "P", 4, 4], ["W", "P", 6, 2], ["W", "P", 7, 2], ["W", "P", 8, 3]]
đại diện cho hội đồng quản trị:
Đầu vào thứ hai sẽ bao gồm các cấu trúc giống như các danh sách con của danh sách đầu tiên, nhưng thay vì tọa độ x và y chỉ ra vị trí của mảnh, chúng đang chỉ ra nơi nó đang cố gắng di chuyển đến.
Đối với ví dụ trên, một nước đi hợp lệ có thể là ["W", "B", 4, 3]
(giám mục di chuyển một hình vuông về phía trước và bên trái), và một động thái không hợp lệ có thể là ["B", "R", 4, 1]
do người lính sẽ phải di chuyển qua hiệp sĩ, và con tốt để đến quảng trường. Vì di chuyển có thể đề cập đến nhiều mảnh ghép nhiều lần, bạn phải kiểm tra xem bất kỳ mảnh nào được chỉ định có thể thực hiện di chuyển, không chỉ một trong số chúng. Chẳng hạn, ví dụ đầu tiên chỉ hợp lệ cho một giám mục, nhưng nó vẫn là một động thái hợp lệ. Tuy nhiên, không phải tân binh đen nào có thể thực hiện động tác thứ hai, vì vậy nó không hợp lệ.
Nhiệm vụ của bạn là xác định xem di chuyển chi tiết trong đầu vào thứ hai có phải là một nước cờ hợp lệ hay không. Hiệu lực của một quy tắc khác nhau, tùy thuộc vào mảnh đang cố gắng di chuyển (nhấp vào tên của mảnh để biết sơ đồ di chuyển hợp lệ):
- Bất kỳ mảnh nào : Không có mảnh nào có thể di chuyển lên một hình vuông đã bị chiếm đóng, hoặc rời khỏi bảng, trừ khi hình vuông đó bị chiếm bởi một mảnh từ màu khác. Ví dụ, một mảnh màu trắng có thể di chuyển lên một hình vuông bị chiếm bởi một mảnh màu đen, nhưng không phải là một mảnh màu trắng. Ngoài ra, không có mảnh nào, ngoại trừ Hiệp sĩ, có thể di chuyển đến các ô vuông bị cản trở trực tiếp bởi một mảnh khác.
- Một động thái của mảnh B để vuông C là "trực tiếp bị che khuất" bởi mảnh Một nếu Một là trực tiếp, trong một thẳng (trực giao hoặc đường chéo) dòng, giữa B và C .
- Bất kỳ quân cờ nào : Vị trí của nhà vua cũng có thể ảnh hưởng đến hiệu lực của việc di chuyển quân cờ. Nếu một trong hai điều kiện này được đáp ứng, di chuyển không hợp lệ:
- Phơi bày nhà vua để kiểm tra, bằng cách di chuyển một mảnh ở cùng phía với vị vua đang gặp nguy hiểm. Điều này chỉ áp dụng nếu một mảnh không đối lập làm cho di chuyển, chứ không phải là một mảnh đối lập di chuyển để đặt nhà vua vào tầm kiểm soát.
- Rời nhà vua trong tầm kiểm soát, trong trường hợp này nó có di chuyển ra khỏi kiểm soát. Do đó, nếu nhà vua đang kiểm tra và di chuyển ra lệnh rằng một mảnh khác di chuyển, thì đó là một động thái không hợp lệ, trừ khi các mảnh khác đang ngăn chặn kiểm tra. Một mảnh có thể ngăn kiểm tra theo một trong hai cách: hoặc nó lấy mảnh kiểm tra thực hiện, hoặc nó cản trở đường đi giữa kiểm tra thực hiện mảnh và nhà vua.
- "Kiểm tra" là tình huống mà đối thủ của nhà vua có thể (nếu đến lượt họ di chuyển) hợp pháp di chuyển một mảnh lên vị vua đó. Quy tắc này không áp dụng đệ quy, tức là một vị vua đang trong tầm kiểm soát ngay cả khi di chuyển của đối thủ lên vị vua đó sẽ khiến vua của họ bị kiểm soát.
- Chân : Một con tốt có thể di chuyển về phía trước (tức là hướng lên nếu màu trắng, hướng xuống nếu màu đen) một hình vuông thành hình vuông không có người. Ngoài ra còn có ba tình huống đặc biệt:
- Nếu con tốt chưa di chuyển (bạn có thể xác định điều này bằng tọa độ Y; con tốt trắng không di chuyển nếu tọa độ Y của chúng là 2, con tốt màu đen không di chuyển nếu tọa độ Y của chúng là 7), con tốt được phép di chuyển hai hình vuông về phía trước đến một hình vuông không có người.
- Nếu có một mảnh của đối thủ theo đường chéo ở phía trước của con tốt (tức là trên hình vuông ở phía tây bắc hoặc đông bắc của con tốt nếu nó màu trắng, hoặc về phía tây nam hoặc đông nam nếu nó màu đen), cầm đồ được phép di chuyển lên quảng trường bị chiếm đóng.
- Nếu một con tốt chuyển đến tọa độ Y cuối cùng (8 cho màu trắng hoặc 1 cho màu đen) trong các quy tắc cờ thông thường, nó phải được thăng cấp thành nữ hoàng, tân binh, hiệp sĩ hoặc giám mục cùng màu. Đối với mục đích của câu hỏi này, việc lựa chọn khuyến mãi không liên quan đến việc di chuyển có hợp lệ hay không (và không thể được thể hiện ở định dạng đầu vào), nhưng phải cho phép di chuyển cầm đồ dẫn đến khuyến mãi.
- Giám mục : Các giám mục có thể di chuyển từ 1 đến 8 ô vuông dọc theo bất kỳ con đường liên thông không bị cản trở (tức là đường chéo).
- Hiệp sĩ : Hiệp sĩ có thể di chuyển trong một
L
hình dạng, bao gồm một trong các động tác (tương đương) sau đây:- Một hình vuông duy nhất theo bất kỳ hướng hồng y nào, theo sau là một góc 90/270 °, tiếp theo là bước di chuyển cuối cùng của 2 hình vuông về phía trước.
- 2 hình vuông theo bất kỳ hướng hồng y nào, theo sau là một góc 90/270 °, tiếp theo là bước di chuyển cuối cùng của một hình vuông về phía trước.
- Rooks : Rooks có thể di chuyển giữa 1 và 8 ô vuông dọc theo bất kỳ con đường hồng y không bị cản trở liên tục.
- Nữ hoàng : Nữ hoàng có thể di chuyển giữa 1 và 8 ô vuông dọc theo bất kỳ con đường không bị cản trở nào của hồng y hoặc liên thẻ (tức là đường chéo).
- Các vị vua : Các vị vua di chuyển như các nữ hoàng, ngoại trừ việc họ bị giới hạn chỉ di chuyển một ô vuông trên mỗi lần di chuyển (tức là một vị vua chỉ có thể di chuyển đến các ô vuông liền kề theo đường chéo hoặc chéo). Xin nhắc lại, bạn không thể thực hiện một động thái khiến vua của bạn bị kiểm soát; do đó, bạn cũng không thể di chuyển vua của bạn vào kiểm tra.
Các quy tắc của cờ vua cũng chứa các nước đi đặc biệt gọi là "castling" và "en passant". Tuy nhiên, vì tính hợp pháp của các di chuyển này phụ thuộc vào lịch sử của trò chơi, không chỉ vị trí hiện tại (và vì castling yêu cầu di chuyển hai mảnh cùng một lúc, không phù hợp với định dạng đầu vào), bạn nên xem xét cả hai động thái này tồn tại (nghĩa là một động thái sẽ bị ném hoặc en passant nên được coi là bất hợp pháp).
Bạn có thể xuất bất kỳ hai kết quả riêng biệt nào để cho biết tính hợp lệ của việc di chuyển và bạn có thể thực hiện đầu vào theo phương pháp bạn muốn. Bạn cũng có thể chọn lập chỉ mục 0 thay vì lập chỉ mục 1 cho các vị trí nếu bạn thích. Đây là một mã golf , vì vậy mã ngắn nhất sẽ thắng!
Các trường hợp thử nghiệm
Board
Move => Output (Reason)
[["B", "K", 3, 8], ["B", "Q", 1, 5], ["B", "N", 4, 7], ["B", "N", 7, 8], ["B", "B", 2, 4], ["B", "R", 4, 8], ["B", "R", 8, 8], ["B", "P", 1, 7], ["B", "P", 2, 7], ["B", "P", 3, 6], ["B", "P", 5, 6], ["B", "P", 6, 7], ["B", "P", 7, 7], ["B", "P", 8, 7], ["W", "K", 5, 1], ["W", "Q", 6, 3], ["W", "N", 3, 3], ["W", "B", 5, 2], ["W", "B", 6, 4], ["W", "R", 1, 1], ["W", "R", 8, 1], ["W", "P", 1, 3], ["W", "P", 2, 2], ["W", "P", 3, 2], ["W", "P", 4, 4], ["W", "P", 6, 2], ["W", "P", 7, 2], ["W", "P", 8, 3]]
["W", "R", 8, 2] => True (The rook on h1 can move forward one)
[['B', 'K', 6, 8], ['B', 'Q', 1, 7], ['B', 'N', 1, 3], ['B', 'N', 7, 1], ['B', 'B', 8, 8], ['B', 'B', 2, 5], ['B', 'R', 4, 3], ['B', 'R', 1, 5], ['B', 'P', 5, 5], ['B', 'P', 7, 2], ['B', 'P', 5, 7], ['B', 'P', 5, 6], ['B', 'P', 4, 4], ['W', 'K', 7, 3], ['W', 'Q', 3, 2], ['W', 'N', 4, 8], ['W', 'N', 7, 5], ['W', 'B', 1, 1], ['W', 'B', 8, 1], ['W', 'R', 1, 8], ['W', 'R', 3, 7], ['W', 'P', 8, 2], ['W', 'P', 6, 3], ['W', 'P', 4, 2], ['W', 'P', 1, 4], ['W', 'P', 8, 7]]
['W', 'N', 1, 5] => False (Neither knight to move to a5 from where they are)
[['B', 'K', 7, 3], ['B', 'Q', 2, 4], ['B', 'N', 5, 2], ['B', 'N', 1, 6], ['B', 'B', 7, 7], ['B', 'B', 1, 8], ['W', 'K', 7, 1], ['W', 'Q', 6, 1], ['W', 'N', 5, 6], ['W', 'N', 3, 3], ['W', 'B', 2, 2], ['W', 'B', 6, 5]]
['B', 'K', 8, 3] => False (The white bishop would put the king in check)
[['B', 'K', 7, 6], ['B', 'Q', 8, 3], ['B', 'N', 7, 7], ['B', 'N', 8, 7], ['B', 'B', 2, 2], ['B', 'B', 3, 8], ['B', 'R', 1, 1], ['B', 'R', 1, 6], ['B', 'P', 8, 5], ['B', 'P', 4, 3], ['B', 'P', 8, 6], ['W', 'K', 7, 8], ['W', 'Q', 7, 2], ['W', 'N', 5, 1], ['W', 'N', 4, 6], ['W', 'B', 1, 2], ['W', 'B', 2, 6], ['W', 'R', 4, 4], ['W', 'R', 3, 6], ['W', 'P', 5, 2], ['W', 'P', 6, 2]]
['B', 'N', 5, 8] => False (The white queen currently has the king in check, and this move doesn't prevent that)
[['B', 'K', 7, 6], ['B', 'Q', 8, 3], ['B', 'N', 7, 7], ['B', 'N', 8, 7], ['B', 'B', 2, 2], ['B', 'B', 3, 8], ['B', 'R', 1, 1], ['B', 'R', 1, 6], ['B', 'P', 8, 5], ['B', 'P', 4, 3], ['B', 'P', 8, 6], ['W', 'K', 7, 8], ['W', 'Q', 7, 2], ['W', 'N', 5, 1], ['W', 'N', 4, 6], ['W', 'B', 1, 2], ['W', 'B', 2, 6], ['W', 'R', 4, 4], ['W', 'R', 3, 6], ['W', 'P', 5, 2], ['W', 'P', 6, 2]]
['B', 'N', 7, 5] => True (The king is in check, and the knight blocks that)
[['B', 'K', 8, 3], ['B', 'Q', 6, 5], ['B', 'N', 7, 8], ['B', 'N', 3, 7], ['B', 'B', 4, 1], ['B', 'B', 1, 1], ['W', 'K', 7, 7], ['W', 'Q', 7, 1], ['W', 'N', 2, 2], ['W', 'N', 1, 3], ['W', 'B', 3, 5]]
['B', 'B', 2, 2] => True (takes the white knight)
[['B', 'K', 6, 1], ['B', 'Q', 6, 2], ['W', 'K', 8, 1]]
['B', 'Q', 7, 1] => True (Smallest checkmate possible, in terms of bounding box)
Thử thách này đã được sandbox . Nó đã nhận được downvote, không có bất kỳ lời giải thích nào, vì vậy tôi quyết định đăng nó bằng mọi cách