A slight improvement: N=: 3 3 (j e. (9$0 1 0 1 1 1) # ,);._3 ] _,(_,.j,._),_: j=. i.n,n N -: Neighbors 1
----- Original Message ----- From: Roger Hui <[email protected]> Date: Friday, February 5, 2010 8:57 Subject: Re: [Jprogramming] Lights Out! To: Programming forum <[email protected]> > 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
