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 ;