define range

This commit is contained in:
cdemeyer-teachx
2025-09-14 15:28:02 +09:00
parent 14aa93ada0
commit 41bdd79f27
6 changed files with 60 additions and 23 deletions

View File

@@ -316,19 +316,17 @@ private:
static bool parseLine(const std::string& line, std::array<uint8_t, 81>& board);
};
using SudokuSolverBuilder = WFC::Builder<Sudoku>
::DefineIDs<1, 2, 3, 4, 5, 6, 7, 8, 9>
::DefineConstrainer<decltype([](Sudoku&, size_t index, WFC::WorldValue<uint8_t> val, auto& constrainer) {
::DefineRange<1, 10>
::DefineConstrainer<decltype([](Sudoku&, size_t index, WFC::WorldValue<uint8_t> val, auto& constrainer) constexpr {
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) {
for (size_t i = 0; i < 9; ++i)
{
// Add row constraints (same row, different columns)
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 column constraints (same column, different rows)
if (i != y) constrainer.Exclude(val, x + i * 9);
}
// Add box constraints (3x3 box)