/// <summary> /// get random valid completed sudoku grid /// </summary> private void GetValidCompleteSudoku() { completeSudokuValues = ListExtensions.GetValidCompletedSudoku(); for (int i = 1; i <= Board.Size; i++) { Board.GetSquareByID(i).FillWithValues(completeSudokuValues[i - 1]); } int numberOfRepetitions = generator.Next(minrowOrColumnSwaps, maxrowOrColumnSwaps); for (int i = 0; i < numberOfRepetitions; i++) { int option = generator.Next(0, 5); int squareNumber = generator.Next(Board.SquaresPerDimension); int outerIndex = squareNumber * Board.SquaresPerDimension; int innerIndex1 = generator.Next(Board.SquaresPerDimension); int innerIndex2 = generator.Next(Board.SquaresPerDimension); int first = outerIndex + innerIndex1; int second = outerIndex + innerIndex2; switch (option) { case 0: Board.SwapColumns(first, second); break; case 1: Board.SwapRows(first, second); break; case 2: Board.SwapColumnSquares(innerIndex1, innerIndex2); break; case 3: Board.SwapRowSquares(innerIndex1, innerIndex2); break; case 4: Board.Transponse(); break; default: break; } } // set SolvedSudokuValues for (int i = 0; i < Board.Size; i++) { var row = new List <int>(); for (int j = 0; j < Board.Size; j++) { row.Add(int.Parse(Board[i, j].Value)); } SolvedSudokuValues.Add(row); } }