Reduction CheckReductionForWin(Graph h, List <Reduction> reductions) { var possibleReductions = reductions.Where(r => SuperSlimMind.IsSuperabundantForGraph(r.Board, h)).ToList(); if (possibleReductions.Count <= 0) { return(null); } var sizes = possibleReductions[0].Board.Stacks.Value.Select(s => s.PopulationCount()).ToList(); var mind = new SuperSlimMind(h, Mind.ProofFindingMode, Mind.SwapMode, FixerBreakeReductionMode.None); mind.MaxPot = Mind.MaxPot; mind.OnlySuperabundantBoards = Mind.OnlySuperabundantBoards; mind.ExtraPsi = Mind.ExtraPsi; mind.OnlyConsiderNearlyColorableBoards = Mind.OnlyConsiderNearlyColorableBoards; if (ForbiddenEdge != null) { mind.MissingEdgeIndex = h.Edges.Value.IndicesWhere(tt => tt.Item1 == ForbiddenEdge.Item1 && tt.Item2 == ForbiddenEdge.Item2 || tt.Item2 == ForbiddenEdge.Item1 && tt.Item1 == ForbiddenEdge.Item2).First(); } mind.AllIntermediateBoardsInRestrictedClass = Mind.AllIntermediateBoardsInRestrictedClass; mind.Analyze(new Template(sizes), Progress); return(possibleReductions.FirstOrDefault(r => mind.FixerWonBoards.Contains(r.Board))); }
public Reduction CanReduceToSuperabundant(Graph g, SuperSlimBoard board, int extraPsi) { return(CanReduce(g, board, (h, l) => l.FirstOrDefault(r => SuperSlimMind.IsSuperabundantForGraph(r.Board, h, extraPsi)))); }