Instead of m=: *:n I should have used _ . Also, <"2 Neighbors is an interesting display.
N=: 3 3 (j e. (9$_1 1 _1 1 1 1) * ,);._3 ] _,(_,.j,._),_ [ j=. >:i.n,n N -: Neighbors 1 $ N 5 5 5 5 <"2 N +---------+---------+---------+---------+---------+ |1 1 0 0 0|1 1 1 0 0|0 1 1 1 0|0 0 1 1 1|0 0 0 1 1| |1 0 0 0 0|0 1 0 0 0|0 0 1 0 0|0 0 0 1 0|0 0 0 0 1| |0 0 0 0 0|0 0 0 0 0|0 0 0 0 0|0 0 0 0 0|0 0 0 0 0| |0 0 0 0 0|0 0 0 0 0|0 0 0 0 0|0 0 0 0 0|0 0 0 0 0| |0 0 0 0 0|0 0 0 0 0|0 0 0 0 0|0 0 0 0 0|0 0 0 0 0| +---------+---------+---------+---------+---------+ |1 0 0 0 0|0 1 0 0 0|0 0 1 0 0|0 0 0 1 0|0 0 0 0 1| |1 1 0 0 0|1 1 1 0 0|0 1 1 1 0|0 0 1 1 1|0 0 0 1 1| |1 0 0 0 0|0 1 0 0 0|0 0 1 0 0|0 0 0 1 0|0 0 0 0 1| |0 0 0 0 0|0 0 0 0 0|0 0 0 0 0|0 0 0 0 0|0 0 0 0 0| |0 0 0 0 0|0 0 0 0 0|0 0 0 0 0|0 0 0 0 0|0 0 0 0 0| +---------+---------+---------+---------+---------+ |0 0 0 0 0|0 0 0 0 0|0 0 0 0 0|0 0 0 0 0|0 0 0 0 0| |1 0 0 0 0|0 1 0 0 0|0 0 1 0 0|0 0 0 1 0|0 0 0 0 1| |1 1 0 0 0|1 1 1 0 0|0 1 1 1 0|0 0 1 1 1|0 0 0 1 1| |1 0 0 0 0|0 1 0 0 0|0 0 1 0 0|0 0 0 1 0|0 0 0 0 1| |0 0 0 0 0|0 0 0 0 0|0 0 0 0 0|0 0 0 0 0|0 0 0 0 0| +---------+---------+---------+---------+---------+ |0 0 0 0 0|0 0 0 0 0|0 0 0 0 0|0 0 0 0 0|0 0 0 0 0| |0 0 0 0 0|0 0 0 0 0|0 0 0 0 0|0 0 0 0 0|0 0 0 0 0| |1 0 0 0 0|0 1 0 0 0|0 0 1 0 0|0 0 0 1 0|0 0 0 0 1| |1 1 0 0 0|1 1 1 0 0|0 1 1 1 0|0 0 1 1 1|0 0 0 1 1| |1 0 0 0 0|0 1 0 0 0|0 0 1 0 0|0 0 0 1 0|0 0 0 0 1| +---------+---------+---------+---------+---------+ |0 0 0 0 0|0 0 0 0 0|0 0 0 0 0|0 0 0 0 0|0 0 0 0 0| |0 0 0 0 0|0 0 0 0 0|0 0 0 0 0|0 0 0 0 0|0 0 0 0 0| |0 0 0 0 0|0 0 0 0 0|0 0 0 0 0|0 0 0 0 0|0 0 0 0 0| |1 0 0 0 0|0 1 0 0 0|0 0 1 0 0|0 0 0 1 0|0 0 0 0 1| |1 1 0 0 0|1 1 1 0 0|0 1 1 1 0|0 0 1 1 1|0 0 0 1 1| +---------+---------+---------+---------+---------+ ----- Original Message ----- From: Dan Bron <[email protected]> Date: Friday, February 5, 2010 4:43 Subject: Re: [Jprogramming] Lights Out! To: 'Programming forum' <[email protected]> > Roger wrote: > > n =: 5 > > Neighbors=: 3 3 ((>:i.n,n) e. (9$_1 1 _1 1 1 1) * ,);._3 >:m > ,(m,.(i.n,n),.m),m=: *:n > > out =: [ ~: Neighbors {~ <@] > > Now that's what I call array-oriented! Generating the 4- > dimensional catalog > of boards, indexed by light. And I like the use of > tessellation (my > original solution also used ;._3 but not so > elegantly). Wonderful. > > In gratitude, I present a different way to calculate Neighbors, > which may > reveal something of the game's nature: > > Neighbors =: #: (0 ,. -<:i.n) |.!.0 / (,~n) {. (,. ] ,.~ -: <.@ > * 7 3 {~ # {.1:) 2^i.-n > > Note the all the twos (2&^ and -: and #:). The only wart > in the expression > is ... <.@ * 7 3 {~ # {.1: where we're mostly > multiplying by 7, except at > the ends where we multiply by 3 (and at the trailing end we also > do not > halve, hence <.). I suppose this is this > representation's expression of the > edge conditions, as the *:n border is in yours. > > Since this wart shows up in every representation, perhaps it is > inescapable.Or maybe it is a part of the definition of the > game. There are some > versions where the board is toroidal, i.e. the top "wraps > around" to the > bottom and so does the left to the right, so there are no edges > or corners > (and so no edge or corner cases). > > -Dan > > PS: The multi-axis features of |. and > {. is what makes this expression > sweet. In Raul's solution, if we implemented the feature > request at [1], he > could have similarly sweetened his expression. > > [1] > http://www.jsoftware.com/jwiki/System/Interpreter/Requests#redefineu.3B.0y ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
