Matlab 171 bytes
A entrada deve ser uma matriz 2D, então você chamaria assim c([1,1,1,1;0,0,0,0;0,0,0,0;1,1,1,1])
(ponto-e-vírgula inicia uma nova linha). Esta função apenas força todos os movimentos possíveis, então obtemos um tempo de execução de O(2^(n^2))
.
Como é feito
Isso é feito escolhendo-se todas as formas possíveis de preencher outra matriz do mesmo tamanho com um e zero, basicamente contando em binário, em que cada entrada da matriz representa uma certa potência de 2.
Depois realizamos os movimentos nessas células que são 1, isso é feito pela soma (mod 2) de uma convolução bidimensional com um vetor de tamanho 1xn e nx1.
Finalmente, decidimos se esses movimentos realmente produziram o resultado desejado, calculando o desvio padrão em todas as entradas. O desvio padrão é apenas zeros se todas as entradas forem iguais. E sempre que encontramos o resultado desejado, comparamos com o número de movimentos das soluções anteriores. A função retornaráinf
se o problema especificado não for solucionável.
Matemática?
Na verdade, vale a pena notar que todos esses movimentos juntos geram um grupo abeliano! Se alguém realmente conseguir classificar esses grupos, informe-me.
Versão Golfed:
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
Versão completa (com a saída dos movimentos reais.)
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
(reorganizado como um quadrado, não importa como).