public bool Init(Board inBoard) { bool ok = true; FillValuesWithRange(); for (int i = 0; i < 9 && ok; ++i) if (!inBoard.IsAvailable(i, mRowIndex)) ok = AssignValue(inBoard.Get(i, mRowIndex)); return ok; }
public bool Init(Board inBoard) { bool ok = true; FillValuesWithRange(); if (mTopToBottom) { for (int i = 0; i < 9 && ok; ++i) if (!inBoard.IsAvailable(i,i)) ok = AssignValue(inBoard.Get(i,i)); } else { for (int i = 0; i < 9 && ok; ++i) if (!inBoard.IsAvailable(i, 8 - i)) ok = AssignValue(inBoard.Get(i, 8 - i)); } return ok; }
public bool Init(Board inBoard) { bool ok = true; FillValuesWithRange(); for (int i = 0; i < 3 && ok; ++i) for (int j = 0; j < 3 && ok; ++j) if (!inBoard.IsAvailable(i + mLeftColumn, j + mTopRow)) ok = AssignValue(inBoard.Get(i + mLeftColumn, j + mTopRow)); return ok; }
public bool Init( Board inBoard, AssignmentConstraint[] inConstraints, int inConstraintsCount ) { if (inBoard.IsAvailable(mCellColumn, mCellRow)) { if(inConstraintsCount > 0) { Assign(inConstraints[0]); for (int i = 1; i < inConstraintsCount; ++i) IntersectWith(inConstraints[i]); } return (0 < mAllowedValues.Count); } else return true; }
public bool ImproveSingleNumberAssignment(Board inBoard, BoardConstraints inConstraints) { if (isFull()) return false; int possibleAssisgnmentsCount = 0; List<CellConstraint> cellAssignments = new List<CellConstraint>(); List<int> numberAssignments = new List<int>(); CellConstraint aPossibleAssignment = null, aCell; foreach (int numberValue in mAllowedValues.Keys) { possibleAssisgnmentsCount = 0; for (int i = 0; i < 9; ++i) { aCell = GetCellFromIndex(inConstraints, i); if (inBoard.IsAvailable(aCell.GetColumn(), aCell.GetRow()) && aCell.CanAssignValue(numberValue)) { ++possibleAssisgnmentsCount; aPossibleAssignment = aCell; } } if (1 == possibleAssisgnmentsCount) { cellAssignments.Add(aPossibleAssignment); numberAssignments.Add(numberValue); } } for (int i = 0; i < cellAssignments.Count; ++i) { inConstraints.AssignValueToCell( cellAssignments[i].GetColumn(), cellAssignments[i].GetRow(), numberAssignments[i] ); } return (cellAssignments.Count > 0); }
public bool HasNumbersWithNoPossibleAssignments(Board inBoard, BoardConstraints inConstraints) { if (isFull()) return false; int possibleAssisgnmentsCount = 0; CellConstraint aCell; foreach (int numberValue in mAllowedValues.Keys) { possibleAssisgnmentsCount = 0; for (int i = 0; i < 9; ++i) { aCell = GetCellFromIndex(inConstraints, i); if (inBoard.IsAvailable(aCell.GetColumn(), aCell.GetRow()) && aCell.CanAssignValue(numberValue)) ++possibleAssisgnmentsCount; } if (0 == possibleAssisgnmentsCount) break; } return (0 == possibleAssisgnmentsCount); }