sudoko 0.1.0

A comprehensive Sudoku solving library with WASM support
Documentation

Sudoku Solver Library

A comprehensive Rust library for solving advanced Sudoku puzzles of various sizes (3x3, 4x4, 5x5, and more) using multiple solving strategies, with WebAssembly (WASM) support.

Features

  • Multiple Grid Sizes: Support for 4x4 (2x2 boxes), 9x9 (3x3 boxes), 16x16 (4x4 boxes), 25x25 (5x5 boxes), and more
  • Advanced Solving Strategies:
    • Naked Singles
    • Hidden Singles
    • Naked Pairs (framework ready)
    • Pointing Pairs (framework ready)
    • Box/Line Reduction (framework ready)
    • X-Wing (framework ready)
    • Swordfish (framework ready)
  • Backtracking Algorithm: For puzzles that require brute force
  • WebAssembly Support: Use the library in web browsers
  • Puzzle Generation: Create new puzzles with different difficulty levels
  • Validation: Check if puzzles and solutions are valid
  • Hints System: Get suggestions for the next move
  • Statistics: Track solving performance and strategy usage

Installation

Add this to your Cargo.toml:

[dependencies]
sudoko = "0.1.0"

Usage

Command Line Interface

# Solve a 9x9 Sudoku puzzle
cargo run -- solve "530070000600195000098000060800060003400803001700020006060000280000419005000080079" 9

# Generate a new puzzle
cargo run -- generate 9 hard

# Validate a solution
cargo run -- validate "123456789456789123789123456234567891567891234891234567345678912678912345912345678" 9

# Get a hint
cargo run -- hint "530070000600195000098000060800060003400803001700020006060000280000419005000080079" 9

Library Usage

use sudoko::{Sudoku, SudokuSolver};

// Create a puzzle from string
let puzzle = Sudoku::from_string(
    "530070000600195000098000060800060003400803001700020006060000280000419005000080079",
    9
).unwrap();

// Create solver and solve
let mut solver = SudokuSolver::new();
let solution = solver.solve(puzzle).unwrap();

println!("Solution: {}", solution);

WebAssembly Usage

Build for WASM:

wasm-pack build --target web

Use in JavaScript:

import init, { WasmSudokuSolver } from './pkg/sudoko.js';

async function solveSudoku() {
    await init();
    
    const solver = new WasmSudokuSolver();
    const puzzle = "530070000600195000098000060800060003400803001700020006060000280000419005000080079";
    const solution = solver.solve_from_string(puzzle, 9);
    
    console.log("Solution:", solution);
}

Supported Puzzle Formats

Input Format

  • Use digits 1-9 for standard 9x9 Sudokus
  • Use digits 1-9 and letters A-F for 16x16 Sudokus
  • Use 0, '.', or ' ' for empty cells

Examples

4x4 Sudoku:

1.3.
.2.4
3.1.
.4.2

9x9 Sudoku:

530070000
600195000
098000060
800060003
400803001
700020006
060000280
000419005
000080079

16x16 Sudoku:

1.3...7.9.B.D.F.
.2.4.6.8.A.C.E.0
...

Difficulty Levels

  • Easy: ~40% of cells removed
  • Medium: ~50% of cells removed
  • Hard: ~60% of cells removed
  • Expert: ~70% of cells removed

Building

Native Build

cargo build --release

WASM Build

# Install wasm-pack first
curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh

# Build for web
wasm-pack build --target web

# Build for Node.js
wasm-pack build --target nodejs

# Build for bundlers
wasm-pack build --target bundler

Testing

cargo test

Performance

The library uses optimized algorithms:

  • MRV (Minimum Remaining Values) heuristic for backtracking
  • Constraint propagation through logical strategies
  • Early termination when solutions are found

Contributing

Contributions are welcome! Areas for improvement:

  • Implementation of advanced strategies (Naked Pairs, X-Wing, etc.)
  • Better puzzle generation algorithms
  • Performance optimizations
  • Additional puzzle formats

License

This project is licensed under the MIT License - see the LICENSE file for details.

Examples

See the examples/ directory for more usage examples:

  • Basic solving
  • Custom strategies
  • WASM integration
  • Puzzle generation