Exemplo n.º 1
0
        public ISudokuRegion GetRegionByValuePosition(ISudokuPosition position)
        {
            int regionRow = position.RowNumber / Size;
            int regionCol = position.ColumnNumber / Size;
            ISudokuPosition regionPosition = new SudokuPosition(regionRow, regionCol);

            return GetRegion(regionPosition);
        }
        protected override int GetNextPossibleValue(ISudokuPosition position)
        {
            if (position == currentPosition)
            {
                currentValue++;
            }
            else
            {
                currentPosition = position;
                currentValue = 1;
            }

            return currentValue;
        }
Exemplo n.º 3
0
        private void InitializeRegion(ISudokuPuzzle puzzle, ISudokuPosition position)
        {
            ISudokuPosition currentPosition = new SudokuPosition();
            board = new SimpleSudokuBoard(puzzle.Size);

            for (int i = 0; i < puzzle.Size; i++)
            {
                for (int j = 0; j < puzzle.Size; j++)
                {
                    currentPosition.RowNumber = puzzle.Size * position.RowNumber + i;
                    currentPosition.ColumnNumber = puzzle.Size * position.ColumnNumber + j;
                    board.SetValue(i, j, puzzle.GetValue(currentPosition));
                }
            }
        }
        private IValueCyclableCollection CreateValueCyclableCollection(ISudokuPosition position)
        {
            ValueCyclableCollection collection = new ValueCyclableCollection();
            int squareSize = Puzzle.Size * Puzzle.Size;

            for (int i = 1; i <= squareSize; i++)
            {
                if (!ValueExistsInRow(position, i) &&
                    !ValueExistsInColumn(position, i) &&
                    !ValueExistsInRegion(position, i))
                {
                    collection.Add(i);
                }
            }

            return collection;
        }
        private bool ValueExistsInColumn(ISudokuPosition position, int value)
        {
            int squareSize = Puzzle.Size * Puzzle.Size;
            ISudokuPosition currentPosition = new SudokuPosition();
            currentPosition.ColumnNumber = position.ColumnNumber;

            for (int i = 0; i < squareSize; i++)
            {
                currentPosition.RowNumber= i;

                if (Puzzle.GetValue(currentPosition) == value)
                {
                    return true;
                }
            }

            return false;
        }
Exemplo n.º 6
0
 public int GetValue(ISudokuPosition position)
 {
     return board[position.RowNumber, position.ColumnNumber];
 }
Exemplo n.º 7
0
 public ISudokuRegion GetRegion(ISudokuPosition position)
 {
     return new SudokuRegion(this, position);
 }
 public abstract int GetNextValue(ISudokuPosition position);
 public override int GetNextValue(ISudokuPosition position)
 {
     return valuesTable[position].GetNextValue();
 }
Exemplo n.º 10
0
 private void DoSetValue(ISudokuPosition position, int value)
 {
     board[position.RowNumber, position.ColumnNumber] = value;
 }
 protected abstract int GetNextPossibleValue(ISudokuPosition position);
Exemplo n.º 12
0
 bool ISudokuRegion.SetValue(ISudokuPosition position, int value)
 {
     return board.SetValue(position.RowNumber, position.ColumnNumber, value);
 }
Exemplo n.º 13
0
 int ISudokuRegion.GetValue(ISudokuPosition position)
 {
     return board[position.RowNumber, position.ColumnNumber];
 }
Exemplo n.º 14
0
 public SudokuRegion(ISudokuPuzzle puzzle, ISudokuPosition position)
 {
     InitializeRegion(puzzle, position);
 }
Exemplo n.º 15
0
 public bool SetValue(ISudokuPosition position, int value)
 {
     if (ValidatePosition(position, value))
     {
         DoSetValue(position, value);
         return true;
     }
     else
     {
         return false;
     }
 }
        private bool ValueExistsInRegion(ISudokuPosition position, int value)
        {
            ISudokuRegion region = Puzzle.GetRegionByValuePosition(position);
            ISudokuPosition currentPosition = new SudokuPosition();

            for (int i = 0; i < region.Size; i++)
            {
                currentPosition.RowNumber = i;

                for (int j = 0; j < region.Size; j++)
                {
                    currentPosition.ColumnNumber = j;

                    if (region.GetValue(currentPosition) == value)
                    {
                        return true;
                    }
                }
            }

            return false;
        }
Exemplo n.º 17
0
 private bool ValidatePosition(ISudokuPosition position, int value)
 {
     return (ValidatePositionRow(position, value) &&
             ValidatePositionColumn(position, value) &&
             ValidatePositionRegion(position, value));
 }
 public override void ResetCycle(ISudokuPosition position)
 {
     valuesTable[position].ResetCycle();
 }
Exemplo n.º 19
0
        private bool ValidatePositionColumn(ISudokuPosition position, int value)
        {
            int col = position.ColumnNumber;

            for (int i = 0; i < SquareSize; i++)
            {
                if (board[i, col] == value)
                {
                    return false;
                }
            }

            return true;
        }
Exemplo n.º 20
0
        private bool ValidatePositionRow(ISudokuPosition position, int value)
        {
            int row = position.RowNumber;

            for (int i = 0; i < SquareSize; i++)
            {
                if (board[row, i] == value)
                {
                    return false;
                }
            }

            return true;
        }
Exemplo n.º 21
0
 public bool ClearValue(ISudokuPosition position)
 {
     return board.ClearValue(position.RowNumber, position.ColumnNumber);
 }
 public abstract void ResetCycle(ISudokuPosition position);
 public SimpleBruteForceSudokuStrategy2()
 {
     currentPosition = null;
     currentValue = 1;
 }