public Solution OneAttractor(ISet<int> target) { var currentSolution = new Solution(target, new PositionalStrategy()); var nextSolution = this.CPreOne(currentSolution.getWinningRegion()); while (!nextSolution.getWinningRegion().IsSubsetOf(currentSolution.getWinningRegion())) { currentSolution = currentSolution.Extend(nextSolution); nextSolution = CPreOne(currentSolution.getWinningRegion()); } return currentSolution; }
public Solution Extend(Solution other) { ISet<int> newWinningRegion = new HashSet<int>(this.winningRegion); newWinningRegion.UnionWith(other.winningRegion); PositionalStrategy newStrategy = this.strategy; foreach(int from in other.strategy.GetDomain().Where(node => !winningRegion.Contains(node))) { newStrategy.Update(from, other.strategy.GetNextMove(from)); } return new Solution(newWinningRegion, newStrategy); }