Ein magisches Quadrat ist ein n-mal-n- Quadratgitter, das mit eindeutigen positiven Ganzzahlen im Bereich von 1,2, ... n ^ 2 gefüllt ist , sodass jede Zelle eine andere Ganzzahl und die Summe der Ganzzahlen in jeder Zeile enthält. Spalte und Diagonale ist gleich.
Ihre Aufgabe ist es, eine n-mal-n- Matrix bestehend aus positiven Zahlen und einem Platzhalterzeichen für leere Zellen zu nehmen (ich verwende 0 , aber Sie können jedes beliebige nicht-numerische Zeichen oder jeden beliebigen Datentyp verwenden) und zu bestimmen, ob dies der Fall ist Es ist möglich, ein magisches Quadrat zu bilden, indem die fehlenden Zahlen eingegeben werden
Die Matrix wird mindestens 2 mal 2 und höchstens 10 mal 10 sein . Das kleinstmögliche nicht-triviale magische Quadrat ist 3-mal-3 . Die Zahlen in der Eingabematrix sind möglicherweise höher als n ^ 2 und es ist möglich, dass alle Zellen gefüllt sind.
Testfälle:
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 ] ]
(falsch)[[8, X1, 6], [X2, 5, X3], [X4, 9, 2]]
?Antworten:
JavaScript (ES6),
270 bis268 ByteNimmt die Matrix als 2D-Array. Rückgabe
0
oder1
.Testfälle
Dies ist definitiv zu langsam für den letzten Testfall. :-(
Code-Snippet anzeigen
quelle
05AB1E , 45 Bytes
Hätte 4 Bytes weniger sein können, aber es gibt derzeit einen Fehler im Builtin
.;
mit 2D-Listen.:
und.:
arbeite wie erwartet, aber.;
mache im Moment nichts an 2D-Listen. Daher die Umgehung˜
und¹gô
Verflachung der Matrix; Verwendung.;
auf der Liste; und wieder in eine Matrix zurückverwandeln.Probieren Sie es online aus oder überprüfen Sie einige weitere Testfälle . (HINWEIS: Der letzte Testfall der Herausforderungsbeschreibung ist nicht enthalten, da er viel zu viele Nullen hat.)
Erläuterung:
Der Teil
©O®øO®Å\O®Å/O)˜Ë
wird auch in meiner 05AB1E-Antwort für die Challenge Verify Magic Square verwendet. In dieser Antwort finden Sie eine ausführlichere Erläuterung zu diesem Teil des Codes.quelle