The gap between J and most computer languages is pretty wide.

Maybe this will help.

The board, a noun, is represented by a 15 element binary array with 1s for
full positions and 0s for empty ones. It is initially all 1s. Id, a noun,
is a 15x15 identity matrix.

Function flip, given a board and position(s) that are to be flipped, i.e.,
not-ed, returns a new updated board with the position(s) not-ed. It first
checks the size (#) of positions. If there's only one, it pulls the row
with that position number from id, xors (:~) it with the board, and returns
the result. If there is more than one position, all the rows of id for
those positions are first or-ed together, that result xor-ed with the
board, and the result returned.

There's to be a monadic function, solitaire, that initiates the search.

solitaire 5 - begin the search with position 5 empty.

There's also to be a function search, called by solitaire, with a single
parameter, a list of
1) the current board
2) a list of moves for the  current board
3) a path list for the solution, initially empty
4) a history stack (for back-tracking) composed of past boards and their
lists of moves not yet explored, initially empty

Recursive function search (depth first) always moves the move at the head
of its given move list and saves the rest of the moves and the board
associated with them in the history stack. When the search reaches a board
with no moves and just one peg remaining on the board, it prints the
solution path. Otherwise it back-tracks to the last board and its
associated list of remaining moves and moves the next move on the list. If
it reaches a state where there are no moves in its given move list and an
empty history, "No solution" is printed.

On Sun, Jun 4, 2017 at 11:45 AM, bill lam <[email protected]> wrote:

> I have difficulty in reading your code, perhaps you want to
> make everything looks functional. To that end, you may
> replace the if/then with @. (agenda)
> (+./ @: ({ & id))`({ & id)@.((< & 2) @: #)
>
> (untested and not sure if this is a simplication)
>
> Вс, 04 июн 2017, Michael Rice написал(а):
> > Two things come to mind: 1) *reductio ad absurdum* and 2) a Dustin
> Hoffman
> > film, wherein he says to a man, "I going to explain something so you'll
> > understand it!" and then shoots him.
> >
> > I already had a function that does what I needed (see below) but was
> musing
> > about left/right parameter style, when one of the parameters remains
> > constant and the other changes "functionally" in the program.
> >
> > Just looking at your first "simplification," I can see I have a lot of
> > familiarization work to do. For example, what's the difference between
> >
> > 2 3 <@, 3 4 and 1 2 <@:, 3 4
> >
> > when the result is the same?
> >
> > Must be something subtle.
> >
> > =================
> >
> > Note: The moves marked with "<-" are moves to a known solution.
> >
> >
> > NB. 15 position peg solitaire
> > NB. The board (position 5 initially vacant)
> >
> > NB.         0
> > NB.       1   2
> > NB.      3  4   5
> > NB.    6  7   8   9
> > NB. 10 11 12 13 14
> >
> >    move_table =: 36 3 $ 0 2 5 5 2 0 0 1 3 3 1 0 1 3 6 6 3 1 1 4 8 8 4 1
> 2 4
> > 7 7 4 2 2 5 9 9 5 2 3 6 10 10 6 3 3 7 12 12 7 3 3 4 5 5 4 3 4 7 11 11 7
> 4 4
> > 8 13 13 8 4 5 8 12 12 8 5 5 9 14 14 9 5 6 7 8 8 7 6 7 8 9 9 8 7 10 11 12
> 12
> > 11 10 11 12 13 13 12 11 12 13 14 14 13 12
> >    id =: e. i. 15
> >    flip =: (~: 3 : 'if. ((< & 2) @: #) y do. ({ & id) y else. (+./ @: ({
> &
> > id)) y end. ')
> >    legal_moves =: (#~ ((-: & 1 1 0)"1 @: ({~ & move_table)))
> >    board =: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
> >    board
> > 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
> >    board =: board flip 5
> >    board
> > 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1
> >    move_table legal_moves board
> >  0 2 5 <-
> >  3 4 5
> > 12 8 5
> > 14 9 5
> >    board =: board flip 0 2 5
> >    board
> > 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1
> >    move_table legal_moves board
> > 3 1 0 <-
> > 7 4 2
> > 9 5 2
> >    board =: board flip 3 1 0
> >    board
> > 1 0 0 0 1 1 1 1 1 1 1 1 1 1 1
> >    move_table legal_moves board
> >  8 4 1
> >  7 4 2
> >  9 5 2
> > 10 6 3
> > 12 7 3
> >  5 4 3 <-
> >    board =: board flip 5 4 3
> >    board
> > 1 0 0 1 0 0 1 1 1 1 1 1 1 1 1
> >    move_table legal_moves board
> >  6 3 1 <-
> > 11 7 4
> > 13 8 4
> > 12 8 5
> > 14 9 5
> >    board =: board flip 6 3 1
> >    board
> > 1 1 0 0 0 0 0 1 1 1 1 1 1 1 1
> >    move_table legal_moves board
> >  0 1 3 <-
> > 12 7 3
> > 11 7 4
> > 13 8 4
> > 12 8 5
> > 14 9 5
> >  8 7 6
> >    board =: board flip 0 1 3
> >    board
> > 0 0 0 1 0 0 0 1 1 1 1 1 1 1 1
> >    move_table legal_moves board
> > 11 7 4 <-
> > 13 8 4
> > 12 8 5
> > 14 9 5
> >  8 7 6
> >    board =: board flip 11 7 4
> >    board
> > 0 0 0 1 1 0 0 0 1 1 1 0 1 1 1
> >    move_table legal_moves board
> >  8  4  1
> >  3  4  5 <-
> > 12  8  5
> > 14  9  5
> >  9  8  7
> > 13 12 11
> >    board =: board flip 3 4 5
> >    board
> > 0 0 0 0 0 1 0 0 1 1 1 0 1 1 1
> >    move_table legal_moves board
> >  9  5  2 <-
> > 13  8  4
> >  9  8  7
> > 13 12 11
> >    board =: board flip 9 5 2
> >    board
> > 0 0 1 0 0 0 0 0 1 0 1 0 1 1 1
> >    move_table legal_moves board
> > 13  8  4
> > 12  8  5
> > 13 12 11 <-
> >    board =: board flip 13 12 11
> >    board
> > 0 0 1 0 0 0 0 0 1 0 1 1 0 0 1
> >    move_table legal_moves board
> > 10 11 12 <-
> >    board =: board flip 10 11 12
> >    board
> > 0 0 1 0 0 0 0 0 1 0 0 0 1 0 1
> >    move_table legal_moves board
> > 12 8 5 <-
> >    board =: board flip 12 8 5
> >    board
> > 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1
> >    move_table legal_moves board
> > 5 2 0
> > 2 5 9 <-
> >    board =: board flip 2 5 9
> >    board
> > 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1
> >    move_table legal_moves board
> > 14 9 5 <-
> >    board =: board flip 14 9 5
> >    board
> > 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
> >    move_table legal_moves board
> >
> >
> >
> >
> > On Sun, Jun 4, 2017 at 10:03 AM, Raul Miller <[email protected]>
> wrote:
> >
> > > Like this?
> > >
> > >    (#~ 5=2#.@:|])z
> > > 3 4 5
> > >
> > > --
> > > Raul
> > >
> > >
> > > On Sun, Jun 4, 2017 at 9:43 AM, Michael Rice <[email protected]>
> wrote:
> > > > How about
> > > >    1 0 1 0 1 0 (#~ ((-: & 0 1 0)"1 @: ({~ & z)))~ z
> > > > ?
> > > >
> > > > Odd, that's the KISS way, the way that always works, and the one way
> I
> > > > hadn't considered.
> > > >
> > > > On to your "simplifications."
> > > >
> > > > On Sat, Jun 3, 2017 at 10:16 PM, Louis de Forcrand <[email protected]
> >
> > > wrote:
> > > >
> > > >> How about
> > > >>    1 0 1 0 1 0 (#~ ((-: & 0 1 0)"1 @: ({~ & z)))~ z
> > > >> ?
> > > >> You can then "simplify":
> > > >>
> > > >> First the hook (and {~&z)
> > > >> ([ #~ -:&0 1 0"1@:(z&{)@])~
> > > >> ([ #~ -:&0 1 0"1@:(z&{)@])~
> > > >>
> > > >> Then ~ can be "distributed" over the resulting fork:
> > > >> [~ #~ -:&0 1 0"1@:(z&{)@(]~)
> > > >> ] #~ -:&0 1 0"1@:(z&{)@[
> > > >>
> > > >> You can keep going;
> > > >> From bonding to forks:
> > > >> ] #~ (] -: 0 1 0"_)"1@:(z { ])@[
> > > >> Composition and -: commutativity:
> > > >> ] #~ (0 1 0 -: ])"1@:(z { ]@[)
> > > >> Because 1=#$0 1 0:
> > > >> ] #~ (0 1 0 -:"1 ])@:(z { [)
> > > >> Trains:
> > > >> ] #~ (0 1 0 -:"1 ]@:(z { [))
> > > >> ] #~ 0 1 0 -:"1 ]@:(z { ])
> > > >> ] #~ 0 1 0 -:"1 z { [
> > > >>
> > > >> Can't get it any simpler.
> > > >>
> > > >> Cheers,
> > > >> Louis
> > > >>
> > > >> > On 4 Jun 2017, at 03:45, Michael Rice <[email protected]>
> wrote:
> > > >> >
> > > >> >   z (#~ ((-: & 0 1 0)"1 @: ({~ & z))) 1 0 1 0 1 0
> > > >>
> > > >> ------------------------------------------------------------
> ----------
> > > >> For information about J forums see http://www.jsoftware.com/
> forums.htm
> > > >>
> > > > ------------------------------------------------------------
> ----------
> > > > For information about J forums see http://www.jsoftware.com/
> forums.htm
> > > ----------------------------------------------------------------------
> > > For information about J forums see http://www.jsoftware.com/forums.htm
> > >
> > ----------------------------------------------------------------------
> > For information about J forums see http://www.jsoftware.com/forums.htm
>
> --
> regards,
> ====================================================
> GPG key 1024D/4434BAB3 2008-08-24
> gpg --keyserver subkeys.pgp.net --recv-keys 4434BAB3
> gpg --keyserver subkeys.pgp.net --armor --export 4434BAB3
> ----------------------------------------------------------------------
> 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