--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--