Ein magisches Quadrat ist eine quadratische Anordnung von Zahlen mit n Seite , bestehend aus den verschiedenen positiven ganzen Zahlen 1, 2, ..., n ² so angeordnet, dass die Summe der n Zahlen in irgendeiner horizontalen, vertikalen oder diagonalen Hauptleitung ist immer die gleiche Zahl, die als magische Konstante bekannt ist.
Ihr Programm muss über std-in eine Zahl eingeben, die die Länge der Seite Ihres Quadrats angibt, und dann die Zahlen im Quadrat. Keine Zahlen mehr als einmal verwendet werden, keine Zahl größer als n ² verwendet werden kann, und alle Zahlen müssen größer als 0 sein muss das Programm bestimmen , ob diese Kombination von Zahlen ist ein magisches Quadrat.
(i,j)
effizienter als eine einzelne Zahl codieren könnenx
, indem Siei=x%C
undj=x/C
für einige, die groß genug sindC
. Könnte das später versuchen.APL, 35
Erläuterung
x←⎕⍴⍨,⍨⎕
fordert zur Eingabe auf,x
⌽
formt sie zu einer Matrix und weist sie zu. Umkehrt die Matrix von links nach rechts.x(...)
Erstellen Sie ein Array von Matrizen:x
undx
kehren1 1∘⍉¨
Sie um. Nehmen Sie für jede dieser Matrizen die Diagonale+/↑
einer 2 × n-Matrix der Zahlen auf diesen an Diagonalen und summieren die Reihen⍉x
Transponieren Siex
x,
dann verketten mitx
, um eine × 2n-Matrix zu bilden+⌿
und die Spalten zu summieren(+⌿x,⍉x),+/↑1 1∘⍉¨x(⌽x←⎕⍴⍨,⍨⎕)
verketten, um ein Array der Summen zu bilden.2=/
Prüfen Sie, ob aufeinanderfolgende Paare gleich sind∧/
und alle diese Ergebnisse UND-verknüpfenquelle
Mathematica
128125Nimmt Eingaben wie z
quelle
Input[r=Reverse]
ein Byte speichern.#&@@
ist ein Byte kürzer als[[1]]
. Sie können wahrscheinlich zusätzlich die Infix-NotationPartition
für ein anderes Byte verwenden. UndThread
sollte statt funktionierenTranspose
. Alternativ können Sie dieses Unicode-Zeichen als Post-Fix-Operator verwenden (Mathematica verwendet es für hochgestelltes T für die Transponierung).APL
4732Verwenden Sie die hervorragende Lösung von TwiNight und wenden Sie weitere Optimierungen an:
Erläuterung:
Hierbei werden Funktionszüge verwendet, die in Version 14 des Dyalog-Interpreters eingeführt wurden. APL wird von rechts nach links ausgeführt, ⎕s sind Eingaben, also zuerst die Dimensionen, dann der Vektor der Zahlen.
⎕⍴⍨, ⍨⎕ erzeugt die Matrix NxN
Danach folgt der Funktionszug, bei dem es sich im Grunde nur um eine Folge von Funktionen (in Klammern) handelt, die auf das richtige Argument angewendet werden. Die Funktionen sind:
⊢ Gibt genau das richtige Argument zurück (das ist die Matrix)
⍉ Transponiert die richtige Argumentmatrix
1 1∘⍉ Gibt die Diagonale zurück
1 1∘⍉∘⌽ Gibt die Diagonale der umgekehrten (horizontalen) Matrix zurück
Alle Ergebnisse werden mit der Funktion "," verkettet.
Zu diesem Zeitpunkt ist das Ergebnis eine Matrix, deren Spalten dann summiert werden (+ ⌿). Die auf diese Weise erhaltenen Werte werden dann mit ∧ / 2 = / auf die gleichen Werte überprüft
Ich werde meine alte Lösung auch hier lassen:
Nimmt die Dimension als linkes Argument, den Vektor der Elemente als rechtes Argument, zum Beispiel:
Kann hier online ausprobiert werden: www.tryapl.org
quelle
GolfScript 67 ( Demo )
quelle
JavaScript (E6) 194
Verwenden der Eingabeaufforderung zum Lesen der Eingabe und Anzeigen der Ausgabe.
Test in der Konsole mit FireFox> 31 (Array.fill ist sehr neu)
Weniger Golf gespielt
quelle
Pyth,
2430 BytesProbieren Sie es hier online aus .
Bearbeiten: Fehler behoben, danke an @KevinCruijssen, der mich informiert hat: o)
quelle
True
für magische Quadrate mit Zahlen aus, die zu groß oder nicht alle eindeutig sind. Dh4
und[12,26,23,13,21,15,18,20,17,19,22,16,24,14,11,25]
oder4
und[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
geben beide ausTrue
. (Fast alle vorhandenen Antworten haben das gleiche Problem, aber da sie vor über 4 Jahren veröffentlicht wurden, habe ich mich nicht darumLUA 186 Zeichen
quelle
05AB1E , 24 Bytes
Eingabeformat :
4\n[2,16,13,3,11,5,8,10,7,9,12,6,14,4,1,15]
. Ausgänge1
/0
für wahrheitsgemäß / falsch.Probieren Sie es online aus oder überprüfen Sie weitere Testfälle .
Erläuterung:
quelle