I haven't tried this in a while but here is one method from an APL book
transcribed into J

NB. Magic Squares the APL/J way
NB. From APL An Interactive Approach by Gilman and Rose
NB.
NB. Problem 19 page 177
NB.
NB. A magic square of order n made up of the integers from 
NB. 1 through n. 
NB. 
NB. In creating squares of odd order you can use a rotation 
NB. vector constructed from n successive integers with 0 in 
NB. the middle then using the vector to control the rotation
NB. of the rows and columns of a matrix created with 
NB. successive integers (in J  i. n n)

NB. rotr - this uses the rotate operator but sets it to rotate
NB.        an individual row. Otherwise it will try to rotate
NB.        the rows in the matrix as a whole interchanging full
NB.        rows rather than shifting the element in a row and 
NB.        leaving the rows in place
   rotr =: |."0 1

NB. rotc - rotate the elements in their respective columns.
NB.        there is no way to tell J to specifically operate on
NB.        the columns individually so you need to use the 
NB.        transpose op. (|:) to turn the columns into rows by 
NB.        using the &. operator it will transpose, run the rotate
NB.        then transpose back 
   rotc =: |."0 1&.|:
  

NB. MS - magic square routine no bounds check just input an 
NB.      odd number greater than or equal to 3
 
   MS =: 3 : 0
NB. Create an initial square matrix order n of numbers 1 to n
z =. 1 + i. y,y

NB. Creat a rotation vector from -n/2 ... 0 ... n/2
q =. ( - (<. 0.5 * y))+ i.y

NB. rotate the rows of the matrix my q then rotate the columns
NB. of the answer by q. You will get a new matrix that is a 
NB. magic square
z1 =. q rotc q rotr z
)

Tom McGuire

On Dec 22, 2015, at 9:44 AM, Richard Donovan <rsdono...@hotmail.com> wrote:

> Is there a J routine to construct magic squares of side n?
> 
> Thanks in advance. 
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm

----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to