Some exact cover problems and their solutions
Project description
exact cover samples
contains some exact cover samples together with their solutions.
installation
pip install exact-cover-samples
usage
problems
from exact_cover_samples import problems
problems
is a dictionary with the following structure:
{ "shortname": function, ... }
where shortname
is a string and function
is a function that in turn returns
a dictionary with the following structure:
{
"shortname": str, # short name of the problem
"name": str, # long name of the problem
"data": np.ndarray, # of ndim=2 and dtype=bool
"solutions": list[list[int]] # each solution is a list of indices in data
}
in some cases solutions
is an nd-array too - see below how to canonicalize for
comparing solutions.
summary
you can display a summary of the available problems by running the following code:
from exact_cover_samples import summary
summary()
will show all known problems
# you can also filter a bit
summary("pent")
->
the problems whose name contains 'pent' are:
===================== p3x20 ======================
size = (1236, 72), 8 solutions full_name=pentominos-3-20
===================== p4x15 ======================
size = (1696, 72), 1472 solutions full_name=pentominos-4-15
canonical representation
from exact_cover_samples import problems, canonical
p = problems["knuth2000"]()
s = p["solutions"]
type(s)
-> list
type(s[0])
-> tuple
type(canonical(s))
-> set
p = problems["p8x8"]()
s = p["solutions"]
type(s)
-> numpy.ndarray
type(canonical(s))
-> set
so that as long as your code produces solutions as an iterable of iterables,
you should be able to use canonical
to compare them like so
# import this module
import exact_cover_samples as ecs
# import a solver module
from exact_cover_py import exact_covers
# get a problem
p = ecs.problems["knuth2000"]()
# get the expected solutions
expected = p["solutions"]
# get the computed solutions
computed = exact_covers(p["data"])
# compare them
assert ecs.canonical(expected) == ecs.canonical(computed)
and so you can write a very decent test suite for your exact cover solver by
simply iterating over the problems in problems
and comparing the expected
solutions with the computed ones.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file exact_cover_samples-0.0.7.tar.gz
.
File metadata
- Download URL: exact_cover_samples-0.0.7.tar.gz
- Upload date:
- Size: 11.7 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.12.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6010d2c7ee3e19aceb6b6774b875d1fec0136299ceae04e655add3e4ae5c3c6d |
|
MD5 | 3bf82def92c1b5650a9667866eeb0c23 |
|
BLAKE2b-256 | b9eb401722e0c2fb0eab2d2afe70beab317ad2f766600241752d93925e213179 |
File details
Details for the file exact_cover_samples-0.0.7-py3-none-any.whl
.
File metadata
- Download URL: exact_cover_samples-0.0.7-py3-none-any.whl
- Upload date:
- Size: 628.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.12.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a44cd8a92b909fec017a44414173b76d68daad8b0024cc47fa6f5f655b4db687 |
|
MD5 | 760f0735936df387638e515f6a7b12d0 |
|
BLAKE2b-256 | 621c0f0e68592e28babd632eea9b42e79a1c5668ae80fb91b205dd465f0dd0b0 |