// // File: Order7Bent.f1 // Author: S Harry White // Created: 2012-04-04 // Updated: // //--------------------------------------------------------------- // // Generates order 7 magic squares with pan-4-way bent diagonals. // Makes all solutions, (without rotations). // //--------------------------------------------------------------- // // To make all solutions, run query: // // all MakeSquares() // // To make 1, run query: // // one MakeSquares() // // To make 100, run query: // // all MakeSquares() & RtlTrimSolutions(100) // //--------------------------------------------------------------- Msum :< I = 175 Sum3 :< I = 75 Sum6 :< I = 150 pred MakeSquares() iff // ----------- ms::[0..48]->>L[1..49] & ms = [ a1, a2, a3, a4, a5, a6, a7, b1, b2, b3, b4, b5, b6, b7, c1, c2, c3, c4, c5, c6, c7, d1, d2, d3, d4, d5, d6, d7, e1, e2, e3, e4, e5, e6, e7, f1, f2, f3, f4, f5, f6, f7, g1, g2, g3, g4, g5, g6, g7 ] & // Center //////////////////////////////////////////////////////// // d4 <> 25 & // // Number of solutions: 0 Number of backtracks: 1 // // Elapsed time: 00:00:00 // //////////////////////////////////////////////////////// d4 = 25 & // No rotations a1 < a7 & a1 < g7 & a7 < g1 & // Main diagonals and bent diagonals //a1 + b2 + c3 + d4 + e5 + f6 + g7 = Msum & //g1 + f2 + e3 + d4 + c5 + b6 + a7 = Msum & a1 + b2 + c3 = Sum3 & e5 + f6 + g7 = Sum3 & g1 + f2 + e3 = Sum3 & c5 + b6 + a7 = Sum3 & // Rows and columns a1 + a2 + a3 + a4 + a5 + a6 + a7 = Msum & a1 + b1 + c1 + d1 + e1 + f1 + g1 = Msum & b1 + b2 + b3 + b4 + b5 + b6 + b7 = Msum & a2 + b2 + c2 + d2 + e2 + f2 + g2 = Msum & c1 + c2 + c3 + c4 + c5 + c6 + c7 = Msum & a3 + b3 + c3 + d3 + e3 + f3 + g3 = Msum & //d1 + d2 + d3 + d4 + d5 + d6 + d7 = Msum & //a4 + b4 + c4 + d4 + e4 + f4 + g4 = Msum & d1 + d2 + d3 + d5 + d6 + d7 = Sum6 & a4 + b4 + c4 + e4 + f4 + g4 = Sum6 & e1 + e2 + e3 + e4 + e5 + e6 + e7 = Msum & a5 + b5 + c5 + d5 + e5 + f5 + g5 = Msum & f1 + f2 + f3 + f4 + f5 + f6 + f7 = Msum & a6 + b6 + c6 + d6 + e6 + f6 + g6 = Msum & g1 + g2 + g3 + g4 + g5 + g6 + g7 = Msum & a7 + b7 + c7 + d7 + e7 + f7 + g7 = Msum & // Up bent diagonals a1 + g2 + f3 + e4 + f5 + g6 + a7 = Msum & b1 + a2 + g3 + f4 + g5 + a6 + b7 = Msum & c1 + b2 + a3 + g4 + a5 + b6 + c7 = Msum & d1 + c2 + b3 + a4 + b5 + c6 + d7 = Msum & e1 + d2 + c3 + b4 + c5 + d6 + e7 = Msum & f1 + e2 + d3 + c4 + d5 + e6 + f7 = Msum & // Down bent diagonals b1 + c2 + d3 + e4 + d5 + c6 + b7 = Msum & c1 + d2 + e3 + f4 + e5 + d6 + c7 = Msum & d1 + e2 + f3 + g4 + f5 + e6 + d7 = Msum & e1 + f2 + g3 + a4 + g5 + f6 + e7 = Msum & f1 + g2 + a3 + b4 + a5 + g6 + f7 = Msum & g1 + a2 + b3 + c4 + b5 + a6 + g7 = Msum & // Left bent diagonals a1 + b7 + c6 + d5 + e6 + f7 + g1 = Msum & a2 + b1 + c7 + d6 + e7 + f1 + g2 = Msum & a3 + b2 + c1 + d7 + e1 + f2 + g3 = Msum & a4 + b3 + c2 + d1 + e2 + f3 + g4 = Msum & a5 + b4 + c3 + d2 + e3 + f4 + g5 = Msum & a6 + b5 + c4 + d3 + e4 + f5 + g6 = Msum & // Right bent diagonals a2 + b3 + c4 + d5 + e4 + f3 + g2 = Msum & a3 + b4 + c5 + d6 + e5 + f4 + g3 = Msum & a4 + b5 + c6 + d7 + e6 + f5 + g4 = Msum & a5 + b6 + c7 + d1 + e7 + f6 + g5 = Msum & a6 + b7 + c1 + d2 + e1 + f7 + g6 = Msum & a7 + b1 + c2 + d3 + e2 + f1 + g7 = Msum & Printf(ms,0) // MakeSquares //--------------------------------------------------------------- local proc Printf(ms:<[0..48]->>L[1..49], row: