private void SimpleExclusion(IEnumerable <SudokuField> fields) { SudokuField.Certainty toSetTo = SudokuField.Certainty.CanNotBe; if (Guess == true) { toSetTo = SudokuField.Certainty.CanNotBeOnGuess; } List <int> filledInNumbers = new List <int>(); foreach (SudokuField field in fields) { int?number = field.GetNumber(); if (number != null) { filledInNumbers.Add((int)number); } } foreach (SudokuField field in fields) { SudokuField.ChangeType newChange = field.SetNumbers(filledInNumbers, toSetTo); ChangeController(newChange); } }
private void ChangeController(SudokuField.ChangeType change) { if (change == SudokuField.ChangeType.Excluding) { ChangedExcluding = true; } else if (change == SudokuField.ChangeType.FiguredOut) { Changed = true; } }
private void ExclusionOnOnlyPositionsThatFit(List <SudokuField> fields) { if (boardProperty == BoardProperty.NineByNine || boardProperty == BoardProperty.SixBySix || boardProperty == BoardProperty.FourByFour || boardProperty == BoardProperty.TwoByTwo) { SudokuField.Certainty toSetTo = SudokuField.Certainty.CanNotBe; if (Guess == true) { toSetTo = SudokuField.Certainty.CanNotBeOnGuess; } List <int> numbersNeeded = new List <int>(); for (int i = boardProperties[boardProperty].MinNumber; i <= boardProperties[boardProperty].MaxNumber; i++) { numbersNeeded.Add(i); } for (int i = 0; i < fields.Count; i++) { int?number = fields[i].GetNumber(); if (number != null) { numbersNeeded.Remove((int)number); fields.Remove(fields[i]); i--; } } foreach (SudokuField field in fields) { List <int> numbersField = (List <int>)field.GetNumbers(); numbersField.RemoveAll(number => !numbersNeeded.Contains(number)); foreach (SudokuField fieldToCheckAgainst in fields) { if (field != fieldToCheckAgainst) { IEnumerable <int> numbersCoveredByOtherField = fieldToCheckAgainst.GetNumbers(); numbersField.RemoveAll(number => numbersCoveredByOtherField.Contains(number)); if (numbersField.Count() == 0) { break; } } } if (numbersField.Count() >= 1) { List <int> numbersToExclude = (List <int>)field.GetNumbers(); numbersToExclude.RemoveAll(number => numbersField.Contains(number)); SudokuField.ChangeType newChange = field.SetNumbers(numbersToExclude, toSetTo); ChangeController(newChange); } } } }