FWIW - not much, here, as it isn't relevant to factorial, and on
investigation, not
something used in Mr Rice's LISP example, but, as Raul's posted a verb
for "union",
I've sometimes wondered why J doesn't include primitives for union and
intersection.
As I sometimes need intersection, here's what I use:
ix =: [-.-. NB. looks like an emoji!!!
as in
1 2 3 4 5 ix 1 3 5 7 9
1 3 5
It's probably listed in a phrase or idiom list somewhere, but never mind.
The other thing I meant to say and nearly forgot:
if I were developing a solver for solitaire, I'd include a variable as
a parameter for
the size of problem, eg the number of rows, 1 2 3 etc, or the
ravel-size, eg 1 3 6 etc.
Thanks,
Mike
On 06/06/2017 00:17, Raul Miller wrote:
You could use -. for set difference, and ~.@, for union. You'd
probably want to use variables for * though.
Or, you could do
flip=: -. , -.~
legal_moves=: [ #~ 6 = 2 #. e.
1 2 3 4 5 (-.,-.~) 4 5 6
1 2 3 6
move_table ([ #~ 6 = 2 #. e.) 1 2 3 4 5
1 3 6
2 4 7
2 5 9
1 4 8
3 1 0
5 2 0
And, I guess you'd also need to modify search (I'll show the shuffling
variant, here):
search=:3 :0
((i.15) flip y) search i.0 3
:
NB. x: board; y: moves
if. 1=#x do. y return. end.
for_move. ({~ ?~@#) move_table legal_moves x do.
r=.(x flip move) search move,y
if. #r do. r return. end.
end.
i.0 3
)
So, ... yes, that would work.
Thanks,
---
This email has been checked for viruses by Avast antivirus software.
https://www.avast.com/antivirus
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm