Giới thiệu
Trò chơi xiangqi , còn được gọi là cờ Trung Quốc, là một trò chơi giống như cờ vua phổ biến ở Trung Quốc, Việt Nam, Đài Loan và các nước Đông Á khác. Màu sắc của hai bên trong xiangqi là đỏ và đen. Có bảy mảnh trong xiangqi: tướng ( G
), cố vấn ( A
), voi ( E
), ngựa ( H
), xe ngựa ( R
), đại bác ( C
) và lính ( S
). Đối với mục đích của thử thách này, các mảnh chữ hoa được coi là các mảnh màu đỏ và chữ thường màu đen. Hầu hết các quân cờ này có một điểm tương đương thô trong cờ vua phương Tây, nhưng có một quân cờ hoàn toàn độc đáo: đại bác.
Các pháo di chuyển giống như một rook trong cờ hay một cỗ xe trong cờ tướng (di chuyển bất kỳ số lượng không gian ở hai X hoặc trục Y), nhưng không thể tấn công theo cách này. Thay vào đó, nó tấn công bằng cách nhảy dọc theo các trục X hoặc Y (giống như cách nó di chuyển) qua một mảnh bất kỳ màu nào (bạn hoặc kẻ thù) và hạ cánh trên mảnh màu đối diện, sau đó nó bắt được. Lưu ý rằng giống như tất cả các quân cờ và xiangqi, đại bác không thể chụp được các mảnh màu của riêng mình.
Ví dụ, trong sơ đồ sau, các không gian mà pháo ( C
) có thể di chuyển được đánh dấu *
và những không gian mà nó có thể nhảy và bắt được đánh dấu X
, giả sử rằng có một mảnh màu đen / chữ thường ở đó.
....X....
.........
.........
....h....
....*....
****C**aX
....E....
....X....
....g....
....R....
Thử thách
Viết chương trình hoặc chức năng, đưa ra một bảng xiangqi và tọa độ của một khẩu pháo trên bảng đó làm đầu vào, đưa ra một danh sách các tọa độ mà pháo có thể di chuyển hoặc nhảy.
Định dạng cho tất cả I / O là linh hoạt.
Các định dạng có thể chấp nhận cho bảng xiangqi bao gồm một chuỗi phân tách dòng mới, danh sách các chuỗi hoặc một chuỗi với bất kỳ dấu phân cách nào khác không có trong aceghrsACEGHRS.
. Bạn có thể giả sử bảng sẽ luôn là 9x10, kích thước của bảng xiangqi.
Nội dung của bảng sẽ bao gồm một số dấu chấm ( .
), biểu thị các điểm trống trên bảng và các ký tự đại diện cho các mảnh. Ánh xạ mảnh đến ký tự như sau:
A -> advisor
C -> cannon
E -> elephant
G -> general
H -> horse
R -> chariot
S -> soldier
Chữ in hoa đại diện cho các mảnh màu đỏ và các chữ cái viết thường đại diện cho các mảnh màu đen. Các ký tự không được liệt kê ở đây (tức là không có aceghrsACEGHRS.
) sẽ không xuất hiện trong bảng.
Định dạng của tọa độ đầu vào là linh hoạt và không bắt buộc phải khớp với định dạng của tọa độ đầu ra. Nó có thể là một danh sách gồm hai phần tử nguyên, một tuple 2, hai số với bất kỳ dấu phân cách hoặc hai ký tự, ví dụ. Nó cũng có thể là 0 chỉ mục hoặc 1 chỉ mục. Bạn có thể cho rằng tọa độ trên bảng sẽ luôn phân giải thành một khẩu pháo ( C
hoặc c
).
Các tọa độ mà pháo có thể nhảy và di chuyển phải xuất hiện trong cùng một danh sách ở đầu ra; phân biệt giữa hai là không cần thiết. Các định dạng có thể chấp nhận cho bất kỳ tọa độ đầu ra riêng lẻ nào cũng giống như các định dạng cho tọa độ đầu vào. Các tọa độ có thể được phân tách bằng dòng mới, đầu ra dưới dạng danh sách hoặc bất kỳ đại diện nào khác. Không có thứ tự cụ thể là cần thiết; thứ tự thậm chí không phải là xác định.
Lưu ý rằng việc nhảy lên một mảnh cùng màu (vỏ) của khẩu pháo là không hợp pháp và do đó không thể xuất hiện trong đầu ra.
Các trường hợp thử nghiệm
Lưu ý rằng không phải tất cả các trường hợp thử nghiệm đều có thể là vị trí xiangqi.
Input board
Input coordinate (0-indexed)
List of output coordinates
.........
.........
.........
.........
.........
....C....
.........
.........
.........
.........
(4, 5)
[(0, 5), (1, 5), (2, 5), (3, 5), (5, 5), (6, 5), (7, 5), (8, 5), (4, 0), (4, 1), (4, 2), (4, 3), (4, 4), (4, 6), (4, 7), (4, 8), (4, 9)]
.........
.....G...
.........
.........
.....e...
.........
.........
h..R.c..S
.....a...
.........
(5, 7)
[(4, 7), (6, 7), (7, 7), (5, 6), (5, 5), (5, 1)]
..s......
..A...e..
.........
EACCcsh.H
..r......
.....S...
......s..
....C....
..g......
(2, 3)
[(2, 0), (2, 2), (4, 3), (2, 9)]
rheagaehr
.........
.c.....c.
s.s.s.s.s
.........
.........
S.S.S.S.S
.C.....C.
.........
RHEAGAEHR
(7, 7)
[(2, 7), (3, 7), (4, 7), (5, 7), (6, 7), (8, 7), (7, 0), (7, 3), (7, 4), (7, 5), (7, 6), (7, 8)]
Chấm điểm
Đây là môn đánh gôn , vì vậy câu trả lời ngắn nhất (tính bằng byte) sẽ thắng. Chúc bạn chơi golf vui vẻ!