private static void ApplyComplexRules(Puzzle puzzle) { foreach (var complexRule in complexRules) { puzzle.ApplyComplexRule(complexRule); } RefreshNumberedRanges(puzzle); RefreshNumberListRanges(puzzle); }
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); }