Un cuadrado mágico es una cuadrícula de n por n , llena de enteros positivos distintos en el rango 1,2, ... n ^ 2 , de modo que cada celda contiene un entero diferente y la suma de los enteros en cada fila, columna y diagonal es igual.
Su tarea es tomar una matriz n-por-n que consta de números positivos y un carácter de marcador de posición para celdas vacías (usaré 0 , pero puede usar cualquier carácter no numérico o tipo de datos que desee) y determinar si es posible hacer un cuadrado mágico completando los números que faltan
La matriz será al menos 2 por 2 , y como máximo 10 por 10 . El cuadrado mágico no trivial más pequeño posible es 3 por 3 . Los números en la matriz de entrada pueden ser superiores a n ^ 2 , y es posible que todas las celdas estén llenas.
Casos de prueba:
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 ] ]
(falso)[[8, X1, 6], [X2, 5, X3], [X4, 9, 2]]
)?Respuestas:
JavaScript (ES6),
270268 bytesToma la matriz como una matriz 2D. Devoluciones
0
o1
.Casos de prueba
Esto definitivamente es demasiado lento para el último caso de prueba. :-(
Mostrar fragmento de código
fuente
05AB1E , 45 bytes
Podría haber sido 4 bytes menos, pero actualmente hay un error en las
.;
listas 2D incorporadas .:
y.:
funciona como se espera, pero.;
no hace nada en las listas 2D en este momento ... de ahí la solución˜
y¹gô
aplanar la matriz; uso.;
en la lista; y transformarlo nuevamente en una matriz nuevamente.Pruébelo en línea o verifique algunos casos de prueba más . (NOTA: El último caso de prueba de la descripción del desafío no está incluido, porque tiene demasiados ceros ..)
Explicación:
La parte
©O®øO®Å\O®Å/O)˜Ë
también se usa en mi respuesta 05AB1E para el desafío Verify Magic Square , así que vea esa respuesta para obtener una explicación más detallada sobre esa parte del código.fuente