public static void Validate(string grid, bool shortOutput) { grid = _ioTransformer.TransformInput(grid); Console.Clear(); if (grid.Length != 81) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Please Input a valid grid"); return; } var transformedGrid = Helper.GenerateGridArray(grid); bool isValid = _validator.IsValid(transformedGrid); if (shortOutput) { Console.WriteLine(isValid); } else { if (isValid) { Console.WriteLine("Your inputed Sudoku is valid:\n\n\n" + _ioTransformer.TransformOutput(grid)); } else { Console.WriteLine("Your inputed Sudoku is invalid:\n\n\n" + _ioTransformer.TransformOutput(grid)); } } }
public (string SolvedGrid, int Iterations, bool CouldSolve) SolveGrid(string unsolvedGrid) { var grid = Helper.GenerateGridArray(unsolvedGrid); var allPossibilities = GetPossibleNumbersInGrid(grid); var possibilitiesIndexes = new int[81]; for (int i = 0; i < 81; i++) { possibilitiesIndexes[i] = -1; } if (_validator.IsSolved(grid) && _validator.IsValid(grid)) { return(Helper.IntArrayToString(grid), 0, true); } bool isSolved; (grid, isSolved) = SolveNakedSingles(grid); int index = 0; bool isValid = false; bool cameFromAbove = false; int iterations = 0; while (!isSolved && index > -1) { var currentPossibility = allPossibilities[index]; if (currentPossibility.Length == 1) { if (cameFromAbove) { index -= 2; } } else { int indexOfPossibility = possibilitiesIndexes[index]; if (indexOfPossibility == -1) { indexOfPossibility = 0; possibilitiesIndexes[index] = 0; } if (indexOfPossibility < currentPossibility.Length) { ++possibilitiesIndexes[index]; grid[index] = currentPossibility[indexOfPossibility]; isValid = _validator.IsValidForIndex(grid, index); if (!isValid) { grid[index] = 0; --index; } else { cameFromAbove = false; } } else { if (cameFromAbove) { grid[index] = 0; possibilitiesIndexes[index] = -1; index -= 2; } else { grid[index] = 0; possibilitiesIndexes[index] = -1; index -= 2; cameFromAbove = true; } } } if (isValid) { isSolved = _validator.IsSolved(grid); } ++index; ++iterations; } return(Helper.IntArrayToString(grid), iterations, isSolved); }