Sudoku 1.3.2
dotnet add package Sudoku --version 1.3.2
NuGet\Install-Package Sudoku -Version 1.3.2
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Sudoku" Version="1.3.2" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Sudoku" Version="1.3.2" />
<PackageReference Include="Sudoku" />
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Sudoku --version 1.3.2
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: Sudoku, 1.3.2"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Sudoku@1.3.2
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Sudoku&version=1.3.2
#tool nuget:?package=Sudoku&version=1.3.2
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
Sudoku
A fast Sudoku solver written in C#. Can also act as a Sudoku generator.
Visualisations of Solving Process
Use + and - to zoom in and out. Screenshot.
Usage in Code
Solving Sudokus
var puzzle = new int[81];
/*
Fill the array with the puzzle here. Use 0 to represent empty cells.
Just flatten the puzzle into one long sequence,
so puzzle[0..8] is the first row, puzzle[9..17] is second and so on.
*/
/*
This is most performant.
If you want:
- the solution steps, select HistoryType.SolutionOnly.
- all the steps attempted, select HistoryType.AllSteps.
- to check the puzzle has only 1 solution, specify SolveMethod.FindUnique.
- a count of the number of solutions, specify SolveMethod.FindAll.
*/
var solver = new Solver(HistoryType.None, SolveMethod.FindFirst);
var result = solver.Solve(puzzle);
/*
Output to console with a left offset of 1.
Store cursor y position to draw puzzle and solution side by side.
*/
var y = Console.CursorTop;
puzzle.DumpToConsole(1, y);
result.Solution.DumpToConsole(30, y);
// The result has additional informational properties.
result.Steps; // How many steps were explored to find the answer.
result.Microseconds; // How long it took to solve.
result.LogToConsole(); // Dump the steps taken to solve the puzzle.
foreach (var move in result.History)
{
Console.WriteLine($"Row: {move.Y} Column: {move.X} Value: {move.Value}");
}
Console.WriteLine(result.Message);
For an example of log output, see here.
Output:
┌───────┬───────┬───────┐ ┌───────┬───────┬───────┐
│ │ 2 │ 9 │ │ 4 5 7 │ 8 2 6 │ 1 9 3 │
│ 6 │ 1 │ │ │ 9 6 3 │ 1 4 5 │ 2 8 7 │
│ 2 │ 7 3 │ 6 │ │ 8 1 2 │ 7 3 9 │ 6 5 4 │
├───────┼───────┼───────┤ ├───────┼───────┼───────┤
│ 3 │ 4 │ 8 │ │ 2 3 1 │ 4 5 7 │ 8 6 9 │
│ 7 8 │ 6 9 │ │ │ 7 8 4 │ 6 9 1 │ 3 2 5 │
│ │ │ 4 │ │ 6 9 5 │ 2 8 3 │ 7 4 1 │
├───────┼───────┼───────┤ ├───────┼───────┼───────┤
│ 8 │ │ │ │ 1 7 8 │ 9 6 4 │ 5 3 2 │
│ 9 │ │ 1 │ │ 5 2 9 │ 3 7 8 │ 4 1 6 │
│ │ 5 │ 8 │ │ 3 4 6 │ 5 1 2 │ 9 7 8 │
└───────┴───────┴───────┘ └───────┴───────┴───────┘
Solved
Generating Sudokus
var generator = new Generator();
var puzzle = generator.Generate(30); // Will generate a puzzle with 30 clues. Can get quite slow below 22.
puzzle.DumpToConsole(1);
Timings
On my machine:
| Clues | puzzles/s | s/puzzle |
|---|---|---|
| 19 | 18,000 | |
| 20 | 300 | |
| 21 | 4 | |
| 22 | 2 | |
| 23 | 100 | |
| 24 | 230 | |
| 25 | 1,600 | |
| 26 | 3,800 | |
| 27 | 4,300 | |
| 28 | 4,500 | |
| 29 | 4,500 | |
| 30 | 4,500 | |
| 31 | 4,600 | |
| 32 | 4,700 | |
| 33 | 4,700 | |
| 34 | 4,700 | |
| 35 | 4,700 | |
| 36 | 4,800 | |
| 37 | 4,900 | |
| 38 | 4,900 | |
| 39 | 4,900 | |
| 40 | 5,000 |
Output:
┌───────┬───────┬───────┐
│ 6 │ 4 │ 2 8 │
│ │ 8 9 │ 6 │
│ 9 5 │ │ │
├───────┼───────┼───────┤
│ 5 │ │ │
│ 6 4 │ │ │
│ 8 │ 4 2 │ 7 3 │
├───────┼───────┼───────┤
│ 6 │ │ 7 │
│ │ │ 4 8 │
│ │ │ │
└───────┴───────┴───────┘
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
-
net10.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.3.2 | 193 | 12/14/2025 |
| 1.2.12 | 347 | 5/4/2024 |
| 1.2.11 | 221 | 3/20/2024 |
| 1.2.10 | 192 | 3/20/2024 |
| 1.2.9 | 193 | 3/15/2024 |
| 1.2.7 | 213 | 3/14/2024 |
| 1.2.6 | 205 | 3/14/2024 |
| 1.2.5 | 223 | 3/14/2024 |
| 1.2.4 | 209 | 3/14/2024 |
| 1.2.3 | 220 | 3/13/2024 |
| 1.2.2 | 220 | 3/13/2024 |
| 1.2.1 | 222 | 3/12/2024 |
| 1.2.0 | 204 | 3/12/2024 |
| 1.1.6 | 208 | 3/12/2024 |
| 1.1.5 | 211 | 3/12/2024 |
| 1.1.4 | 195 | 3/12/2024 |
| 1.1.3 | 203 | 3/9/2024 |
| 1.1.2 | 226 | 3/9/2024 |
| 1.1.1 | 200 | 3/7/2024 |
| 1.1.0 | 217 | 3/7/2024 |
Loading failed