Dưới đây là tất cả các ma trận nhị phân 2x2
#0 #1 #2 #3 #4 #5 #6 #7 #8 #9 #10 #11 #12 #13 #14 #15
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
00 00 00 00 01 01 01 01 10 10 10 10 11 11 11 11
00 01 10 11 00 01 10 11 00 01 10 11 00 01 10 11
Hai ma trận vuông nhị phân là tương đương theo quan hệ ~
nếu một có thể được ánh xạ lên nhau bằng bất kỳ số lượng phản xạ trong các trục ngang hoặc dọc .
#1 ~ #2
dưới sự phản chiếu trong trục dọc, do đó chúng ta chỉ cần giữ một trong số chúng (không quan trọng cái nào). Tương tự như vậy #3 ~ #12
, #6 ~ #9
và như vậy.
MỤC TIÊU là tạo ra một chương trình lấy một đầu vào duy nhất N
và in ra nhiều N x N
ma trận nhị phân tồn tại sao cho tất cả các ma trận trong đầu ra đều khác biệt theo quan hệ trên.
Trong mã giả sóng tay, một giải pháp được chấp nhận sẽ là
define M[i] = N by N matrix with bit pattern equal to i
for i = 0 to (2^(N^2)) - 1
valid = true
for j = i+1 to (2^(N^2)) - 1
if (equivalent(M[i], M[j]))
valid = false
break
if (valid)
print (M[i])
Đối với đầu vào, N=2
một đầu ra hợp lệ sẽ là
00 00 00 01 10 01 11
00 01 11 01 01 11 11
Nhưng bằng cách chọn các ma trận khác nhau từ cùng một lớp tương đương, một đầu ra hợp lệ khác sẽ là
00 10 11 11 11 10 01
00 00 00 10 11 10 10
Thứ tự của các ma trận không thành vấn đề, sự lựa chọn cụ thể từ các ma trận tương đương không quan trọng, và khoảng trắng không quan trọng, hãy tạo ra các ma trận theo cách bạn muốn miễn là nó có thể đọc được.
Đầu ra phải đầy đủ.
Mã ngắn nhất sẽ thắng.
EDIT: đây là bài golf đầu tiên của tôi và tôi đã thay đổi suy nghĩ về các tiêu chí chiến thắng.
Mã ngắn nhất trong một ngôn ngữ không được thiết kế đặc biệt cho sự chiến thắng / đánh gôn .
Tôi hy vọng nó không phải là nghi thức xấu để thay đổi tiêu chí hậu hoc này, nhưng tôi nghĩ làm theo ngôn ngữ "bình thường" là một đề xuất thú vị hơn nhiều .