Có một biến thể của vấn đề N-queen nổi tiếng liên quan đến nữ hoàng và hiệp sĩ và được cho là "khó khăn hơn đáng kể" 1 . Báo cáo vấn đề như sau:
Bạn phải đặt một số hiệp sĩ bằng nhau và nữ hoàng trên bàn cờ sao cho không có quân cờ nào tấn công bất kỳ quân cờ nào khác. Số lượng tối đa của các mảnh bạn có thể đặt trên bảng là bao nhiêu và bạn có thể làm được bao nhiêu cách khác nhau?
Trong này mã golf thử thách, bạn sẽ được cung cấp một đầu vào n từ 3 đến 32 (trong một cách đó là phù hợp nhất đối với ngôn ngữ của bạn). Đối với một n cho trước , có thể có 0 hoặc nhiều giải pháp cho vấn đề trên. Trong trường hợp không có giải pháp, bạn phải xuất / trả lại không có gì ( nil , chuỗi rỗng , false , ...). Nếu không, bạn phải đưa ra hai kết quả:
- Một bảng giải pháp (xem bên dưới) cho kích thước n trong đó không thể thêm một nữ hoàng hoặc quân cờ hiệp sĩ mà không có bất kỳ quân cờ nào bị tấn công. Phải có một số lượng bằng nhau của các nữ hoàng và hiệp sĩ .
- Nguồn của chương trình được chạy không chấp nhận đầu vào và cung cấp cho (i) một giải pháp khác (hoặc không có gì ) cho cùng kích thước n , trong cùng định dạng, cũng như (ii) một chương trình khác cho giải pháp tiếp theo (v.v. ...).
Lưu ý rằng:
- Trình tự các chương trình không bao giờ phải trả lại cùng một bảng hai lần, phải bao gồm tất cả các giải pháp có thể cho vấn đề kích thước n và cuối cùng phải chấm dứt (không tạo ra đầu ra).
- Bạn có thể trả về hai giá trị, trả về một giá trị và in giá trị kia hoặc in hai giá trị trả về.
- Tuy nhiên , nếu bạn in cả bảng và chương trình tiếp theo, bảng không được coi là một phần của chương trình tiếp theo (Tôi khuyên bạn nên in bảng trong nhận xét hoặc sử dụng cả luồng đầu ra tiêu chuẩn và luồng lỗi).
- Giá trị chương trình dưới dạng trả về phải là một chuỗi, không phải là một bao đóng.
Định dạng bảng
- Một bảng là một hình vuông có kích thước n .
- Một tế bào bảng có thể trống, một nữ hoàng hoặc một hiệp sĩ.
- Bạn phải chọn các giá trị riêng biệt cho từng loại ô (tức là bạn có thể sử dụng các ký hiệu khác ngoài Q, N khi in bảng).
- Nếu bạn trả về một bảng không có chuỗi, thì đó phải là một tập hợp có thứ tự của n 2 giá trị của bảng (ví dụ: ma trận, vectơ hoặc danh sách theo thứ tự hàng / cột chính, ...).
Nếu bạn in bảng, bạn có thể in bình phương, hoặc dưới dạng một dòng. Ví dụ: bảng giải pháp có kích thước 4 có thể được in như sau (không cần khoảng trắng; ký hiệu theo ý của bạn):
Q - - - - - - - - - - - - - N -
Nếu bạn cảm thấy như vậy, bạn cũng có thể xuất ra:
♛ · · · · · · · · · · · · · ♞ ·
... nhưng điều này là đủ:
Q-------------N-
Không có vấn đề gì nếu bạn lặp qua các ô theo thứ tự hàng chính hoặc cột chính, bởi vì có các giải pháp đối xứng. Ví dụ: các giải pháp cho n = 4 là:
Q------N-------- Q----------N---- Q------------N-- Q-------------N- -Q----------N--- -Q------------N- -Q-------------N --Q---------N--- --Q----------N-- --Q------------N ---QN----------- ---Q----N------- ---Q---------N-- ---Q----------N- ---NQ----------- ----Q------N---- ----Q----------N N------Q-------- -------QN------- -------Q----N--- ---N----Q------- -------NQ------- --------Q------N N----------Q---- ----N------Q---- -----------QN--- -N----------Q--- --N---------Q--- -------N----Q--- -----------NQ--- N------------Q-- --N----------Q-- ---N---------Q-- N-------------Q- -N------------Q- ---N----------Q- -N-------------Q --N------------Q ----N----------Q --------N------Q
Bạn cũng có thể xem các giải pháp cho n = 5 dưới dạng ma trận ; Ban chứa #
, q
và n
biểu tượng, đó là ô trống các loại khác nhau (xem câu trả lời của tôi dưới đây). Tôi đếm 2836 bảng cho n = 6 , như trong câu trả lời của Sleafar (Tôi đã giới thiệu một lỗi khi giảm số byte, nhưng hiện tại nó đã được sửa).
Rất cám ơn Sleafar vì đã tìm thấy không chỉ một mà hai lỗi trong mã của tôi.
Ghi bàn
Mã ngắn nhất trong byte thắng.
Chúng tôi đo kích thước của chương trình đầu tiên, chương trình chấp nhận n .
1 . Nữ hoàng và Hiệp sĩ , bởi Roger KW Hui (coi chừng! Có một giải pháp)
-------------------------N--------Q-
không hợp lệ vì có thể thêm nhiều phần Q--------N---------------N--------Q-
:).