select variable changes
This commit is contained in:
@@ -315,9 +315,10 @@ public:
|
||||
private:
|
||||
static bool parseLine(const std::string& line, std::array<uint8_t, 81>& board);
|
||||
};
|
||||
|
||||
using SudokuSolverBuilder = WFC::Builder<Sudoku>
|
||||
::DefineRange<1, 10>
|
||||
::DefineConstrainer<decltype([](Sudoku&, size_t index, WFC::WorldValue<uint8_t> val, auto& constrainer) constexpr {
|
||||
::ConstrainAll<decltype([](Sudoku&, size_t index, WFC::WorldValue<uint8_t> val, auto& constrainer) constexpr {
|
||||
size_t x = index % 9;
|
||||
size_t y = index / 9;
|
||||
|
||||
@@ -343,7 +344,7 @@ using SudokuSolverBuilder = WFC::Builder<Sudoku>
|
||||
}
|
||||
}
|
||||
|
||||
}), 1, 2, 3, 4, 5, 6, 7, 8, 9>;
|
||||
})>;
|
||||
|
||||
using SudokuSolver = SudokuSolverBuilder::Build;
|
||||
|
||||
|
||||
@@ -18,7 +18,8 @@ template<
|
||||
typename VariableIDMapT = VariableIDMap<VarT>,
|
||||
typename ConstrainerFunctionMapT = ConstrainerFunctionMap<void*>,
|
||||
typename CallbacksT = Callbacks<WorldT>,
|
||||
typename RandomSelectorT = DefaultRandomSelector<VarT>>
|
||||
typename RandomSelectorT = DefaultRandomSelector<VarT>,
|
||||
typename SelectedValueT = void>
|
||||
class Builder {
|
||||
public:
|
||||
constexpr static size_t WorldSize = HasConstexprSize<WorldT> ? WorldT{}.size() : 0;
|
||||
@@ -27,27 +28,49 @@ public:
|
||||
using PropagationQueueType = WFCQueue<WorldSize>;
|
||||
using ConstrainerType = Constrainer<WaveType, PropagationQueueType>;
|
||||
|
||||
|
||||
template <VarT ... Values>
|
||||
using DefineIDs = Builder<WorldT, VarT, VariableIDMap<VarT, Values...>, ConstrainerFunctionMapT, CallbacksT, RandomSelectorT>;
|
||||
using DefineIDs = Builder<WorldT, VarT, VariableIDMap<VarT, Values...>, ConstrainerFunctionMapT, CallbacksT, RandomSelectorT, VariableIDMap<VarT, Values...>>;
|
||||
|
||||
template <size_t RangeStart, size_t RangeEnd>
|
||||
using DefineRange = Builder<WorldT, VarT, VariableIDRange<VarT, RangeStart, RangeEnd>, ConstrainerFunctionMapT, CallbacksT, RandomSelectorT>;
|
||||
using DefineRange = Builder<WorldT, VarT, VariableIDRange<VarT, RangeStart, RangeEnd>, ConstrainerFunctionMapT, CallbacksT, RandomSelectorT, VariableIDRange<VarT, RangeStart, RangeEnd>>;
|
||||
|
||||
template <size_t RangeEnd>
|
||||
using DefineRange0 = Builder<WorldT, VarT, VariableIDRange<VarT, 0, RangeEnd>, ConstrainerFunctionMapT, CallbacksT, RandomSelectorT>;
|
||||
using DefineRange0 = Builder<WorldT, VarT, VariableIDRange<VarT, 0, RangeEnd>, ConstrainerFunctionMapT, CallbacksT, RandomSelectorT, VariableIDRange<VarT, 0, RangeEnd>>;
|
||||
|
||||
template <typename ConstrainerFunctionT, VarT ... CorrespondingValues>
|
||||
|
||||
template <VarT ... Values>
|
||||
using Variable = Builder<WorldT, VarT, VariableIDMapT, ConstrainerFunctionMapT, CallbacksT, RandomSelectorT, VariableIDMap<VarT, Values...>>;
|
||||
|
||||
template <size_t RangeStart, size_t RangeEnd>
|
||||
using VariableRange = Builder<WorldT, VarT, VariableIDMapT, ConstrainerFunctionMapT, CallbacksT, RandomSelectorT, VariableIDRange<VarT, RangeStart, RangeEnd>>;
|
||||
|
||||
|
||||
template <typename ConstrainerFunctionT>
|
||||
requires ConstrainerFunction<ConstrainerFunctionT, WorldT, VarT, WaveType, PropagationQueueType>
|
||||
using DefineConstrainer = Builder<WorldT, VarT, VariableIDMapT,
|
||||
using Constrain = Builder<WorldT, VarT, VariableIDMapT,
|
||||
MergedConstrainerFunctionMap<
|
||||
VariableIDMapT,
|
||||
ConstrainerFunctionMapT,
|
||||
ConstrainerFunctionT,
|
||||
VariableIDMap<VarT, CorrespondingValues...>,
|
||||
SelectedValueT,
|
||||
decltype([](WorldT&, size_t, WorldValue<VarT>, ConstrainerType&) {})
|
||||
>, CallbacksT, RandomSelectorT, SelectedValueT
|
||||
>;
|
||||
|
||||
template <typename ConstrainerFunctionT>
|
||||
requires ConstrainerFunction<ConstrainerFunctionT, WorldT, VarT, WaveType, PropagationQueueType>
|
||||
using ConstrainAll = Builder<WorldT, VarT, VariableIDMapT,
|
||||
MergedConstrainerFunctionMap<
|
||||
VariableIDMapT,
|
||||
ConstrainerFunctionMapT,
|
||||
ConstrainerFunctionT,
|
||||
VariableIDMapT,
|
||||
decltype([](WorldT&, size_t, WorldValue<VarT>, ConstrainerType&) {})
|
||||
>, CallbacksT, RandomSelectorT
|
||||
>;
|
||||
|
||||
|
||||
template <typename NewCellCollapsedCallbackT>
|
||||
using SetCellCollapsedCallback = Builder<WorldT, VarT, VariableIDMapT, ConstrainerFunctionMapT, typename CallbacksT::template SetCellCollapsedCallbackT<NewCellCollapsedCallbackT>, RandomSelectorT>;
|
||||
template <typename NewContradictionCallbackT>
|
||||
|
||||
Reference in New Issue
Block a user