Skip to main content

Sudoku Maker

Author:

Ralf Schlatterbeck <rsc@runtux.com>

Sudoku Maker is a generator for Sudoku number puzzles. It uses a genetic algorithm internally, so it can serve as an introduction to genetic algorithms. The generated Sudokus are usually very hard to solve – good for getting rid of a Sudoku addiction (or maybe not).

It also includes a simple depth-first solver (with some optimizations) for sudoku puzzles – the solver is internally needed when generating sudoku puzzles. The included sudoku script can be called and reads a sudoku from standard input. It outputs the solution (if any) or if there isn’t a single solution to the given puzzle it will output several (up to a maximum).

It internally uses my PGApy wrapper for the PGApack genetic algorithm library (which I’m currently also maintaining).

The representation of sudoku puzzles is a simple: 9 lines with 9 numbers in each line, e.g.,

000704800
001000200
200050000
407090000
010000080
600008900
100000050
050000706
000069002

The numbers 1-9 represent the given numbers of the puzzle while the zeros represent the empty tiles. A solved puzzle simply contains no zeros. I’ve adopted the file extension .sud for this format. The puzzle in the example was created by sudokumaker with the option -r 42 which sets the random seed to 42 (also the default if no -r option is given), so the puzzle should be reproduceable with this option (on a 64bit architecture). The example above when rendered with sudoku_as_tex and compiled with LaTeX will look something like the following:

r42.png

There are some variants of sudoku puzzles supported. The first variant adds the diagonals (so in each of the two diagonals the numbers 1-9 must be present), this variant can be requested with the --diagonal option. A printed example (which was again generated with the random seed 42 but now with the --diagonal option) looks as follows:

diag-r42.png

For the diagonal variant I’ve adopted the extension .sudd – note that the normal sudoku and the diagonal-constrained sudokus are not compatible, if interpreted as a normal sudoku, a diagonal-constrained sudoku would have multiple solutions.

The second variant requires that in each quadrant there are 9 distinct colors, the same color is always at the same position in each quadrant. The numbers 1-9 must be present on each of the colors. For this variant I’ve adopted the extension .sudc, as with diagonal-constrained sudokus, color-constrained sudokus would have multiple solutions if interpreted as a normal sudoku. This variant can be requested with the --colorconstrained option. An example looks as follows:

color-r42.png

Sudoku puzzles can be pretty-printed as LaTeX using the included sudoku_as_tex program. This currently supports printing the diagonals in yellow if the --diagonal option is given. Color-constrained sudokus can be printed with the --colorconstrained option. The following color map applies:

color

letter

red

r

pink

p

violet

v

grey

g

orange

o

yellow

y

light green

l

dark green

d

blue

b

If these letters are used in the color constrained sudoku, the table above applies. Other letters can be used, too, but the color assignment for printing will be arbitrary in that case.

A third variant, sometimes called kikagaku has irregular colored shapes instead of the 3X3 blocks. These can currently only be printed using the --kikagaku option to sudoku_as_tex but not be generated using sudokumaker. The format I’m using for these is a modification of the .sud format. It contains the numbers in the same format as in .sud followed by lines with letters where each letter represents a unique color. Of course each letter has to appear exactly 9 times. I’ve not included a puzzle because I currently cannot generated them automatically. An empty puzzle in that format would look as follows:

000000000
000000000
000000000
000000000
000000000
000000000
000000000
000000000
000000000
rrrrvvvvg
brbrrvggg
brbrovvvg
bbbbovggg
blooooogp
llldopppp
ldddoypyp
llldyypyp
lddddyyyy

The same color map as for color-constrained sudoku puzzle applies. This would be rendered as follows:

kik.png

For the genetic algorithm library, my python wrapper PGApy of the parallel genetic algorithm library (PGApack) is needed. There should be Windows support for PGApy but I haven’t tested the latest changes on Windows.

Version 1.2: Parallel version

  • If installed with a parallel (MPI) version of pgapy the evaluation can be parallelized

  • Caching now done in pre_eval and endofgen: pre_eval looks for hits in the cache and prevents that these individuals get evaluated again. The endofgen method fills the cache.

  • Default for random seed is 42

  • Get rid of --verbose option

Version 1.1: Add licensing information

  • Add LICENSE file

  • insert license headers into python files where not yet present

Version 1.0: Mark as stable, Python3

Now marked as Development Status Production/Stable

  • Python3

  • Stable

  • Remove SF logo

  • Documentation update, pictures

  • Add rendered examples

Version 0.4: Packaging fixes

Fix package name again, stick to sudokumaker to avoid name collisions.

  • Package namespace is now sudokumaker again

  • Sudokumaker depends on rsclib.sourceforge.net

Version 0.3: Color, Diagonal

Now color constrained and diagonality constrained sudokus are supported.

  • Diagonality constrained sudokus must have the digits 1-9 in the diagonals, too. When printing, diagonals are printed in yellow.

  • Color constrained sudokus have 9 additional colors which are in the same position in every quadrant. These must have the digits 1-9, too. When printing we chose 9 different light colors.

Version 0.2: README update

The README (and the SF homepage which is generated from it) had wrong link to the project. Also the python package index didn’t accept one of my classifier. Grmpf.

  • Fix project link in README (SF Logo)

  • Remove one classifier not accepted by pypi

Version 0.1: Initial Release

Sudoku Maker is a generator for Sudoku number puzzles. It uses a genetic algorithm internally.

  • First Release after a long silent development

Metadata

Release files for sudokumaker 1.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for sudokumaker 1.2
File Size Uploaded Provenance Actions
sudokumaker-1.2.tar.gz 18.1 kB Without provenance Details for sudokumaker-1.2.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for sudokumaker 1.2
File Interpreter ABI Platform Actions
sudokumaker-1.2-py3.9.egg Legacy Egg format - - Details for sudokumaker-1.2-py3.9.egg

Total release size: 50.6 kB

Release files / sudokumaker-1.2.tar.gz

Download URL sudokumaker-1.2.tar.gz
Size 18.1 kB
Tags Source
SHA-256 checksum
How to use checksums
0a3c66716aaae9d94d62b9fa26f6ac9cd19ed4fb388c5a7eb4ee07f9606e3784
BLAKE2b-256 checksum
How to use checksums
633de443c7e092383498e93730fe188e085005a0b0999eaf561a05b1f0327cdb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.9.2

Release files / sudokumaker-1.2-py3.9.egg

Download URL sudokumaker-1.2-py3.9.egg
Size 32.5 kB
Tags Egg
SHA-256 checksum
How to use checksums
d31f33917c56e7923eb3053de8508a4d0d597af3c4abf811c807ae5d95de4645
BLAKE2b-256 checksum
How to use checksums
2fe969c3ce50d39556687b1eab50d2f5922a6bbd9ba2946e01e40d6cf56f6d2e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.9.2

Security for sudokumaker 1.2

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

1.2 This release

2 release files No provenance

0.4

0.2

0.1-modified

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page