Ejemplo n.º 1
0
            protected override bool TryFulfill(IEnumerable <SolverDemand> demands)
            {
                var(essential, recommended) = Bucketize(demands);

                // Quickly reject impossible sets of demands
                if (essential.Any(demand => !demand.Candidates.Any(candidate => candidate.IsSuitable)))
                {
                    return(false);
                }

                var selectionsSnapshot = Selections.Clone(); // Create snapshot

                foreach (var permutation in essential.Permutate())
                {
                    if (permutation.All(TryFulfill))
                    {
                        recommended.ForEach(x => TryFulfill(x));
                        return(true);
                    }
                    else
                    {
                        Selections = selectionsSnapshot.Clone();  // Revert to snapshot
                    }
                }
                return(false);
            }