--Apple-Mail-41--694076846
Content-Transfer-Encoding: 7bit
Content-Type: text/plain;
	charset=US-ASCII;
	delsp=yes;
	format=flowed

Here's my solution. I'm still playing with it, but I'm posting it now  
for the benefit of others to look at.

The solution is divided into strategies and players. Strategies are  
used to estimate the value of any particular board configuration to a  
player without any deep recursion or other lengthy operations. The  
only strategy I have now is BasicStrategy.

Players implement a tactic for finding the best move based on the  
strategy. StandardPlayer uses a 6-ply alpha-beta search, and plays  
fairly well. The ply depth can be changed by modifying the DEPTH  
constant.

ThreadedPlayer is an experimental time-limited player using a  
multithreaded search. It doesn't tend to play as well or as fast as  
StandardPlayer. CachingPlayer is an experimental GDBM-based caching  
player I wrote in an attempt to improve StandardPlayer's performance.

RandomPlayer simply plays random moves, and has been useful for testing.

To play, you can:

   ruby -r ./match.rb -e 'run(StandardPlayer, RandomPlayer)'


--Apple-Mail-41--694076846
Content-Transfer-Encoding: base64
Content-Type: application/x-gzip;
	x-unix-mode=0644;
	name="solution.tar.gz"
Content-Disposition: attachment;
	filename=solution.tar.gz

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
ju3Yju3Yju0w4z+EaPOWAFAAAA==

--Apple-Mail-41--694076846
Content-Transfer-Encoding: 7bit
Content-Type: text/plain;
	charset=US-ASCII;
	format=flowed


-- 
Rob Leslie
rob / mars.org



--Apple-Mail-41--694076846--