Schrijf een predicaat magic_square(Square,Dim) dat waar is als Square een magisch vierkant met van orde Dim is.

Bij een magisch vierkant is de som van elke rij, kolom en diagonaal gelijk aan eenzelfde waarde. Deze waarde is het karakteristieke getal. In het vierkant in elke rij en kolom verschillend. Elk getal komt maar 1 keer voor. De getallen in een vierkant met Dim als zijde moeten alle getallen van 1 tot DimĀ² voorkomen.

Hieronder zie je de output van een main/1 predicaat die magische vierkanten met een orde gelijk aan zijn argument print als matrix gevolgd door het karakteristieke getal.

?- main(3).
[2, 7, 6].
[9, 5, 1].
[4, 3, 8].
15
true ;
[2, 9, 4].
[7, 5, 3].
[6, 1, 8].
15
true ;

voorbeeld magisch vierkant waarvan de som overal 15 is