is.magic {magic} | R Documentation |
Returns TRUE if the square is magic, semimagic, panmagic, associative,
normal. If argument give.answers
is TRUE, also returns
additional information about the sums.
is.magic(m,give.answers=FALSE) is.panmagic(m,give.answers=FALSE) is.semimagic(m,give.answers=FALSE) is.associative(m) is.normal(m) is.mostperfect(m,give.answers=FALSE) is.2x2.correct(m,give.answers=FALSE) is.diagonally.correct(m,give.answers=FALSE)
m |
The square to be tested |
give.answers |
Boolean, with TRUE meaning return additional information about the sums (see details). |
A {em semimagic square} is one all of whose row sums equal all its columnwise sums (ie the magic constant).
A {em magic square} is a semimagic square with the sum of both unbroken diagonals equal to the magic constant.
A {em panmagic square} is a magic square all of whose broken diagonals sum to the magic constant. Ollerenshaw calls this a ``pandiagonal'' square.
A {em most perfect} square has all 2-by-2 arrays anywhere within the square
summing to 2S where S=n^2+1; and all pairs of
integers n/2 distant along the same major (NW-SE) diagonal sum to
S (note that the S used here differs
from Ollerenshaw's because her squares are numbered starting at zero).
The first condition is tested by is.2x2.correct
and the
second by is.diagonally.correct
.
All most perfect squares are panmagic.
A {em normal square} is one that contains n^2 consecutive integers (typically starting at 0 or 1).
Returns TRUE if the square is semimagic, etc.
If give.answers
is taken as an argument and is TRUE, return a
list of at least five elements. The first element of the list is the
answer: it is TRUE if the square is (semimagic, magic, panmagic).
Elements 2-5 give the result of a call to allsums()
, viz: rowwise
and columwise sums; and broken major (ie NW-SE) and minor (ie NE-SW)
diagonal sums.
Function is.diagonally.correct()
also returns the sums of
elements distant n/2 along a major diagonal
(diag.sums
); and function is.2x2.correct()
returns the
sum of each 2x2 submatrix (tbt.sums
).
Function is.mostperfect()
returns both of these.
Robin K. S. Hankin
http://mathworld.wolfram.com/MagicSquare.html
minmax
,is.perfect
,is.semimagichypercube
is.magic(magic(4)) f <- function(n){is.magic(magic(n))} all(sapply(3:50,f)) is.panmagic(panmagic.4()) is.panmagic(panmagic.8()) data(Ollerenshaw) is.mostperfect(Ollerenshaw) proper.magic <- function(m){is.magic(m) & minmax(c(1,diff(sort(m))))} proper.magic(magic(20))