Esempio n. 1
0
        private static void ApplyComplexRules(Puzzle puzzle)
        {
            foreach (var complexRule in complexRules)
            {
                puzzle.ApplyComplexRule(complexRule);
            }

            RefreshNumberedRanges(puzzle);
            RefreshNumberListRanges(puzzle);
        }
Esempio n. 2
0
        public static Puzzle Solve(Puzzle puzzle)
        {
            numberListRanges.Clear();
            notDoneRanges.Clear();

            if (puzzle.FinishedPuzzle())
            {
                return(puzzle);
            }

            CreateNumberListRanges(puzzle);

            puzzle.ApplyComplexRule(new SummaryRule());

            int maxStep    = puzzle.Rows.Count * puzzle.Columns.Count;
            int actualStep = 0;

            while (!puzzle.FinishedPuzzle() && actualStep <= maxStep)
            {
                ApplyComplexRules(puzzle);

                ApplySimpleRules(puzzle);

                RefreshNumberListRanges(puzzle);

                CutUnnecessaryNumberedRangesEnds();

                CutUnnecessaryNumberListRangesEnds();

                CalculateNumberedRanges();

                actualStep++;
            }

            return(puzzle);
        }