#include #include "sudoku.h" #include int main() { std::cout << "Running Sudoku WFC" << std::endl; auto sudokuSolver = WFC::Builder() .DefineIDs<1, 2, 3, 4, 5, 6, 7, 8, 9>() .Variable<1, 2, 3, 4, 5, 6, 7, 8, 9>([](Sudoku&, size_t index, WFC::WorldValue val, auto& constrainer) { size_t x = index % 9; size_t y = index / 9; // Add row constraints (same row, different columns) for (size_t i = 0; i < 9; ++i) { if (i != x) constrainer.Exclude(val, i + y * 9); } // Add column constraints (same column, different rows) for (size_t i = 0; i < 9; ++i) { if (i != y) constrainer.Exclude(val,x + i * 9); } // Add box constraints (3x3 box) size_t box_x = (x / 3) * 3; size_t box_y = (y / 3) * 3; for (size_t j = 0; j < 3; ++j) { for (size_t k = 0; k < 3; ++k) { size_t cell_x = box_x + j; size_t cell_y = box_y + k; size_t cell_index = cell_x + cell_y * 9; if (cell_index != index) { constrainer.Exclude(val, cell_index); } } } }) .build(); Sudoku sudokuWorld; sudokuWorld.setValue(0, 5); sudokuWorld.setValue(80, 1); bool success = sudokuSolver.Run(sudokuWorld, true); if (success) { std::cout << "Sudoku solved successfully!" << std::endl; // Print the solved sudoku for (size_t y = 0; y < 9; ++y) { for (size_t x = 0; x < 9; ++x) { std::cout << static_cast(sudokuWorld.getValue(x + y * 9)) << " "; if (x == 2 || x == 5) std::cout << "| "; } std::cout << std::endl; if (y == 2 || y == 5) std::cout << "------+-------+------" << std::endl; } } else { std::cout << "Failed to solve sudoku!" << std::endl; } }