set-cover: Solve exact set cover problems like Sudoku, 8 Queens, Soma Cube, Tetris Cube

[ algorithms, bsd3, library, math ] [ Propose Tags ]

Solver for exact set cover problems. Included examples: Sudoku, Nonogram, 8 Queens, Domino tiling, Mastermind, Alphametics, Soma Cube, Tetris Cube, Cube of L's, Logika's Baumeister puzzle, Lonpos pyramid, Conway's puzzle. The generic algorithm allows to choose between slow but flexible Set from containers package and fast but cumbersome bitvectors.

For getting familiar with the package I propose to study the Queen8 example along with Math.SetCover.Exact.

The Sudoku and Nonogram examples also demonstrate how to interpret the set-cover solution in a human-friendly way.

Build examples with cabal install -fbuildExamples.

The package needs only Haskell 98. There is also an experimental implementation using LLVM and knead. Do not rely on that interface in released packages.

Versions [faq] 0.0, 0.0.1, 0.0.2, 0.0.3, 0.0.4, 0.0.5,, 0.0.6, 0.0.7, 0.0.8, 0.0.9, 0.1
Change log
Dependencies array (>=0.4 && <0.6), base (==4.*), containers (>=0.4 && <0.7), enummapset (>=0.1 && <0.7), haha (>=0.3.1 && <0.4), non-empty (>=0.2 && <0.4), pooled-io (==0.0.*), prelude-compat (==0.*), psqueues (==0.2.*), random (>=1.0 && <1.2), semigroups (>=0.1 && <1.0), set-cover, transformers (>=0.2 && <0.6), unicode (==0.0.*), utility-ht (>=0.0.12 && <0.1) [details]
License BSD-3-Clause
Author Henning Thielemann, Helmut Podhaisky
Maintainer Henning Thielemann <>
Category Math, Algorithms
Home page
Source repo this: darcs get --tag 0.1
head: darcs get
Uploaded by HenningThielemann at Sat Aug 31 18:31:49 UTC 2019
Distributions NixOS:0.1, Stackage:0.0.9
Executables conway-puzzle, pangram, mastermind-knead, mastermind-setcover, nonogram, domino, alphametics, lonpos-pyramid, baumeister, lcube, sudoku-setcover, queen8, soma-cube, tetris-cube
Downloads 6003 total (355 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Hackage Matrix CI
Docs uploaded by user
Build status unknown [no reports yet]





Build example executables


Enable efficient signal processing using LLVM


Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info


Maintainer's Corner

For package maintainers and hackage trustees