Matlab 171 byte
L'input dovrebbe essere una matrice 2d, quindi la chiameresti come c([1,1,1,1;0,0,0,0;0,0,0,0;1,1,1,1])(i punti e virgola iniziano una nuova riga). Questa funzione rinforza semplicemente tutte le mosse possibili, quindi otteniamo un tempo di esecuzione di O(2^(n^2)).
Come è fatto
Questo viene fatto scegliendo tutti i modi possibili per riempire un'altra matrice della stessa dimensione con una e zero, questo in pratica conta in binario, dove ogni voce della matrice rappresenta una certa potenza di 2.
Quindi eseguiamo le mosse su quelle celle che sono 1, questo viene fatto dalla somma (mod 2) di una convoluzione bidimensionale con un vettore di dimensioni 1xn e nx1.
Alla fine decidiamo se quelle mosse hanno effettivamente prodotto il risultato desiderato, calcolando la deviazione standard su tutte le voci. La deviazione standard è zero solo se tutte le voci sono uguali. E ogni volta che abbiamo effettivamente trovato il risultato desiderato lo confrontiamo con il numero di mosse delle soluzioni precedenti. La funzione tornerà infse il problema indicato non è risolvibile.
Matematica?
In realtà vale la pena notare che tutte quelle mosse insieme generano un gruppo abeliano! Se qualcuno riesce effettivamente a verificare quei gruppi, per favore fatemelo sapere.
Versione golfizzata:
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
Versione completa (con l'output delle mosse effettive.)
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(riorganizzato come un quadrato, non importa come).