Un carré magique est une grille carrée n par n , remplie d'entiers positifs distincts dans la plage 1,2, ... n ^ 2 , de sorte que chaque cellule contient un entier différent et la somme des entiers de chaque ligne, la colonne et la diagonale sont égales.
Votre tâche consiste à prendre une matrice n par n composée de nombres positifs et d'un caractère d'espace réservé pour les cellules vides (je vais utiliser 0 , mais vous pouvez utiliser n'importe quel caractère non numérique ou type de données que vous aimez) et déterminer s'il s'agit possible de faire un carré magique en remplissant les nombres manquants
La matrice sera au moins 2 par 2 et au plus 10 par 10 . Le carré magique non trivial le plus petit possible est 3 par 3 . Les nombres dans la matrice d'entrée peuvent être supérieurs à n ^ 2 , et il est possible que toutes les cellules soient remplies.
Cas de test:
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 ] ]
(fausse)[[8, X1, 6], [X2, 5, X3], [X4, 9, 2]]
)?Réponses:
JavaScript (ES6),
270268 octetsPrend la matrice comme un tableau 2D. Renvoie
0
ou1
.Cas de test
C'est définitivement trop lent pour le dernier cas de test. :-(
Afficher l'extrait de code
la source
05AB1E , 45 octets
Cela aurait pu être de 4 octets de moins, mais il y a actuellement un bogue dans le buildin
.;
avec des listes 2D.:
et.:
fonctionne comme prévu, mais.;
ne fait rien sur les listes 2D pour l'instant .. d'où le contournement˜
et l'¹gô
aplatissement de la matrice; utiliser.;
sur la liste; et le transformer à nouveau en matrice.Essayez-le en ligne ou vérifiez d'autres cas de test . (REMARQUE: le dernier cas de test de la description du défi n'est pas inclus, car il contient beaucoup trop de 0 ..)
Explication:
La partie
©O®øO®Å\O®Å/O)˜Ë
est également utilisée dans ma réponse 05AB1E pour le défi Verify Magic Square , alors consultez cette réponse pour une explication plus approfondie de cette partie du code.la source