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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file exact_cover_samples-0.0.8.tar.gz.
File metadata
- Download URL: exact_cover_samples-0.0.8.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 |
f4b5561f415c4ee71489154c6d43bcf3c1d5a89d95fddf1f884ebb3e3195285d
|
|
| MD5 |
8090b35970d3c09b162000b130edfaf5
|
|
| BLAKE2b-256 |
9ac1d700df5b0739fc830784574996184408f5b0ce953b26aa0c475a99590b1f
|
File details
Details for the file exact_cover_samples-0.0.8-py3-none-any.whl.
File metadata
- Download URL: exact_cover_samples-0.0.8-py3-none-any.whl
- Upload date:
- Size: 637.1 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 |
d34b0c7d481aff8aed2a5104c7c74ce0199aa123796c6751b8bcf005b10773db
|
|
| MD5 |
c9adf5a4f5d95383a6636f50ce0b1d34
|
|
| BLAKE2b-256 |
de6b438c4152d9e456e4b6d1a0ca82d1f00c60011bbcb1da444d45c7bc8865db
|