Matlab 171 byte
Đầu vào phải là ma trận 2d, vì vậy bạn sẽ gọi nó như thế c([1,1,1,1;0,0,0,0;0,0,0,0;1,1,1,1])
(dấu chấm phẩy bắt đầu một hàng mới). Hàm này chỉ bruteforces tất cả các di chuyển có thể, vì vậy chúng tôi có một thời gian chạy O(2^(n^2))
.
Nó được thực hiện như thế nào
Điều này được thực hiện bằng cách chọn tất cả các cách có thể để điền vào một ma trận khác có cùng kích thước với các số không và số 0, về cơ bản, nó được tính trong nhị phân trong đó mỗi mục nhập của ma trận đại diện cho một sức mạnh nhất định là 2.
Sau đó, chúng tôi thực hiện các bước di chuyển trên các ô đó là 1, điều này được thực hiện bằng tổng (mod 2) của phép tích chập hai chiều với một vectơ có kích thước 1xn và nx1.
Cuối cùng, chúng tôi quyết định xem những động thái đó có thực sự tạo ra kết quả mong muốn hay không, bằng cách tính độ lệch chuẩn trên tất cả các mục. Độ lệch chuẩn chỉ là số không nếu tất cả các mục giống nhau. Và bất cứ khi nào chúng tôi thực sự tìm thấy kết quả mong muốn, chúng tôi so sánh nó với số lần di chuyển của các giải pháp trước đó. Hàm sẽ trả về inf
nếu vấn đề đã cho không thể giải được.
Môn Toán?
Điều thực sự đáng chú ý là tất cả những động thái đó cùng nhau tạo ra một nhóm abelian! Nếu bất cứ ai thực sự quản lý để calssify các nhóm đó xin vui lòng cho tôi biết.
Phiên bản chơi gôn:
function M=c(a);n=numel(a);p=a;M=inf;o=ones(1,n);for k=0:2^n-1;p(:)=dec2bin(k,n)-'0';b=mod(conv2(p,o,'s')+conv2(p,o','s'),2);m=sum(p(:));if ~std(b(:)-a(:))&m<M;M=m;end;end
Phiên bản đầy đủ (với đầu ra của các bước di chuyển thực tế.)
function M = c(a)
n=numel(a);
p=a;
M=inf; %current minimum of number of moves
o=ones(1,n);
for k=0:2^n-1;
p(:) = dec2bin(k,n)-'0'; %logical array with 1 where we perform moves
b=mod(conv2(p,o,'same')+conv2(p,o','same'),2); %perform the actual moves
m=sum(p(:)); %number of moves;
if ~std(b(:)-a(:))&m<M %check if the result of the moves is valid, and better
M=m;
disp('found new minimum:')
disp(M) %display number of moves of the new best solution (not in the golfed version)
disp(p) %display the moves of the new best solution (not in the golfed version)
end
end
1000
(sắp xếp lại như một hình vuông, không quan trọng bằng cách nào).