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

Reply via email to