class Solver { Board board Collection strategies def Solver(strategies) { this.strategies = strategies } boolean solve() { solveEnough { it.isSolved() } } boolean solveEnough(test) { while (true) { if (test(board)) { return true } if (! play()) { break } } false } boolean play() { for (s in strategies) { if (s.play(board)) { return true } } false } }