private static IEnumerable<BobDecisionTree> AllDecisionsFromHere(BoardState board, BoardMark whosTurn, int decisionsCount) { IEnumerable<int> positions2Go = new BoardSymmetry(board).GetFreeUniquePositions(); if (CanOptimizeTreeBuilding(decisionsCount, positions2Go)) { positions2Go = positions2Go.AsParallel(); } return positions2Go .Select(p => new { NewBoard = board.Set(p, whosTurn), Position = p }) .Select(p => new BobDecisionTree(p.NewBoard, whosTurn.OpponentsMark(), p.Position, decisionsCount + 1)) .ToArray(); }
public double GetWinFactor(BoardMark whosTurn) { return WinForecast(whosTurn, 0) - WinForecast(whosTurn.OpponentsMark(), 1); }