Exemplo n.º 1
0
        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)));
        }
Exemplo n.º 2
0
 public Reduction CanReduceToSuperabundant(Graph g, SuperSlimBoard board, int extraPsi)
 {
     return(CanReduce(g, board, (h, l) => l.FirstOrDefault(r => SuperSlimMind.IsSuperabundantForGraph(r.Board, h, extraPsi))));
 }