#![deny(missing_docs)]
pub mod grid;
pub mod latin_square;
pub mod queens;
pub(crate) mod solver;
pub mod sudoku;
pub(crate) mod util;
pub use solver::Solver;
pub trait ExactCover {
type Possibility: core::fmt::Debug;
type Constraint: core::fmt::Debug;
fn satisfies(&self, poss: &Self::Possibility, cons: &Self::Constraint) -> bool;
fn is_optional(&self, cons: &Self::Constraint) -> bool;
fn possibilities(&self) -> &[Self::Possibility];
fn constraints(&self) -> &[Self::Constraint];
fn solver(&self) -> Solver<Self>
where
Self: Sized,
{
Solver::new(self)
}
}