10-22-2017, 03:34 PM
Link to blog entry: http://edspi31415.blogspot.com/2017/10/h...magic.html
Background
A magic square is a square of integers where each row, column, and diagonal have the same sum. For example:
2 9 4
7 5 3
6 1 8
Each row, column, and diagonal of this magic square has a sum of 15.
A proper magic square has the integers 1 through n^2, n is the size of the magic square. A non-normal magic square follows the sum rule, but different integers than the 1 to n^2 sequence is allowed.
The program MAGICSQ3 generates random 3 x 3 non-normal magic squares. The sum of each row, column, and diagonal are given.
HP Prime Program: MAGICSQ3
Background
A magic square is a square of integers where each row, column, and diagonal have the same sum. For example:
2 9 4
7 5 3
6 1 8
Each row, column, and diagonal of this magic square has a sum of 15.
A proper magic square has the integers 1 through n^2, n is the size of the magic square. A non-normal magic square follows the sum rule, but different integers than the 1 to n^2 sequence is allowed.
The program MAGICSQ3 generates random 3 x 3 non-normal magic squares. The sum of each row, column, and diagonal are given.
HP Prime Program: MAGICSQ3
Code:
EXPORT MAGICSQ3()
BEGIN
// Random Magic Square 3 X 3
// 2017-10-06 EWS
LOCAL x,k,r,mat,s,t,l;
// Initialization
r:=RANDINT(−5,200);
k:=RANDINT(1,3);
l:=MAKELIST(k*X,X,r-4*k,
r+4*k,k);
l:=SORT(l);
s:=ΣLIST(l);
t:=s/3;
mat:=MAKEMAT(0,3,3);
// Generation
mat(2,2):=l(5);
mat(1,1):=l(1);
mat(3,3):=l(9);
mat(1,3):=l(2);
mat(3,1):=l(8);
mat(1,2):=t-mat(1,1)-mat(1,3);
mat(2,1):=t-mat(1,1)-mat(3,1);
mat(2,3):=t-mat(1,3)-mat(3,3);
mat(3,2):=t-mat(3,1)-mat(3,3);
// Tranpose?
IF RANDINT(0,1) THEN
mat:=TRN(mat);
END;
// Results
RETURN {mat,t};
END;