Um quadrado mágico é uma grade quadrada n por n , preenchida com números inteiros positivos distintos no intervalo 1,2, ... n ^ 2 , de modo que cada célula contenha um número inteiro diferente e a soma dos números inteiros em cada linha, coluna e diagonal é igual.
Sua tarefa é obter uma matriz n por n composta por números positivos e um caractere de espaço reservado para células vazias (usarei 0 , mas você pode usar qualquer caractere não numérico ou tipo de dados que desejar) e determinar se é possível fazer um quadrado mágico preenchendo os números que faltam
A matriz será de pelo menos 2 por 2 e no máximo 10 por 10 . O menor quadrado mágico não trivial possível é 3 por 3 . Os números na matriz de entrada podem ser maiores que n ^ 2 e é possível que todas as células estejam preenchidas.
Casos de teste:
2 2
2 0
False
8 0 6
0 5 0
0 9 2
True
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
True
10 0 1
0 5 9
3 7 5
False
99 40 74 8 15 51 0 67 0 1
0 41 55 14 0 57 64 0 98 0
81 47 56 20 22 63 70 54 0 88
0 28 0 21 0 69 71 60 85 19
0 34 0 2 9 75 52 61 0 25
24 65 49 0 90 26 33 42 17 76
0 0 30 89 91 0 39 48 0 82
6 72 31 95 0 38 45 29 0 13
12 53 0 96 78 0 0 0 10 94
18 59 43 77 0 0 27 36 0 100
True
[ [ 1, 5, 9 ], [ 6, 7, 2 ], [ 8, 3, 4 ] ]
(Falsas)[[8, X1, 6], [X2, 5, X3], [X4, 9, 2]]
)?Respostas:
JavaScript (ES6),
270268 bytesToma a matriz como uma matriz 2D. Retorna
0
ou1
.Casos de teste
Definitivamente, isso é muito lento para o último caso de teste. :-(
Mostrar snippet de código
fonte
05AB1E , 45 bytes
Poderia ter 4 bytes a menos, mas atualmente há um erro no built-in
.;
com listas 2D.:
e.:
funciona como esperado, mas.;
não faz nada em listas 2D no momento. Portanto, a solução alternativa˜
e¹gô
a nivelação da matriz; use.;
na lista; e transformá-lo novamente em uma matriz novamente.Experimente online ou verifique mais alguns casos de teste . (NOTA: O último caso de teste da descrição do desafio não está incluído, porque possui 0s demais.)
Explicação:
A parte
©O®øO®Å\O®Å/O)˜Ë
também é usada na minha resposta 05AB1E para o desafio Verify Magic Square , portanto, veja a resposta para obter uma explicação mais aprofundada sobre essa parte do código.fonte