lib/solver/constraints/all_different.ex
defmodule CPSolver.Constraint.AllDifferent do
use CPSolver.Constraint
alias CPSolver.Propagator.NotEqual
@impl true
def propagators(variables) do
for i <- 0..(length(variables) - 2) do
for j <- (i + 1)..(length(variables) - 1) do
NotEqual.new(Enum.at(variables, i), Enum.at(variables, j))
end
end
|> List.flatten()
end
end