Vấn đề
Xét một ô vuông 3 x 3 số nguyên không âm. Đối với mỗi hàng i
, tổng của các số nguyên được đặt thành r_i
. Tương tự cho mỗi cột j
, tổng số nguyên trong cột đó được đặt thành c_j
.
Nhiệm vụ là viết mã để liệt kê tất cả các phép gán số nguyên khác nhau có thể vào lưới cho các ràng buộc tổng của hàng và cột. Mã của bạn sẽ xuất ra một nhiệm vụ tại một thời điểm.
Đầu vào
Mã của bạn sẽ có 3 số nguyên không âm chỉ định các ràng buộc hàng và 3 số nguyên không âm chỉ định các ràng buộc cột. Bạn có thể giả sử rằng những điều này là hợp lệ, nghĩa là các ràng buộc tổng hoặc hàng bằng tổng các ràng buộc của cột. Mã của bạn có thể làm điều này theo bất kỳ cách nào thuận tiện.
Đầu ra
Mã của bạn sẽ xuất ra các lưới 2d khác nhau mà nó tính toán theo bất kỳ định dạng nào mà con người bạn có thể đọc được. Tất nhiên càng đẹp thì càng tốt. Đầu ra không được chứa các lưới trùng lặp.
Thí dụ
Nếu tất cả các ràng buộc hàng và cột là chính xác 1
thì chỉ có 6
các khả năng khác nhau. Đối với hàng đầu tiên, bạn có thể đặt một 1
trong bất kỳ ba cột đầu tiên, cho hàng thứ hai hiện có 2
các lựa chọn thay thế và hàng cuối cùng bây giờ hoàn toàn được xác định bởi hai cột trước. Mọi thứ khác trong lưới nên được đặt thành 0
.
Nói đầu vào là 2 1 0
cho các hàng và 1 1 1
cho các cột. Sử dụng định dạng đầu ra đáng yêu của APL, các lưới số nguyên có thể là:
┌─────┬─────┬─────┐
│0 1 1│1 0 1│1 1 0│
│1 0 0│0 1 0│0 0 1│
│0 0 0│0 0 0│0 0 0│
└─────┴─────┴─────┘
Bây giờ nói đầu vào là 1 2 3
cho các hàng và 3 2 1
cho các cột. Các lưới số nguyên có thể là:
┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
│0 0 1│0 0 1│0 0 1│0 1 0│0 1 0│0 1 0│0 1 0│1 0 0│1 0 0│1 0 0│1 0 0│1 0 0│
│0 2 0│1 1 0│2 0 0│0 1 1│1 0 1│1 1 0│2 0 0│0 1 1│0 2 0│1 0 1│1 1 0│2 0 0│
│3 0 0│2 1 0│1 2 0│3 0 0│2 1 0│2 0 1│1 1 1│2 1 0│2 0 1│1 2 0│1 1 1│0 2 1│
└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘