Solve the nonogram puzzles and watch the solution process. Both black-and-white and color puzzles with the unlimited (at least in theory) size are supported. Also, you can easily solve puzzles from http://webpbn.com or http://www.nonograms.org/ that have thousands of them.
Different sources are supported:
- local puzzles, embedded inside the package
- local puzzles, created by yourself
- puzzles from http://webpbn.com (without downloading)
- locally saved webpbn puzzles (mainly for development/debug purpose)
- http://www.nonograms.org/ (http://www.nonograms.ru/) puzzles
pip install pynogram
Firstly, make sure it works (if not, see the Errors section):
$ pynogram # # # # # # # # # 1 1 # # # # # # # # # 1 1 1 1 5 # # # # # # # # # 7 1 1 1 7 0 3 1 1 2 0 6 0 6 0 3 1 5 1 3 0 1 1 1 1 # . . . # . . . . . . . . . . . . . . . . # 1 1 1 1 1 # . . . # . . . . . . # . # . . . . . . . # 1 1 2 1 1 3 1 # . . . # . . # # . . # . # . . # # # . . # 5 1 1 1 1 1 1 1 1 # # # # # . # . . # . # . # . # . # . # . # 1 1 4 1 1 1 1 1 1 # . . . # . # # # # . # . # . # . # . # . # 1 1 1 1 1 1 1 1 # . . . # . # . . . . # . # . # . # . # . . 1 1 2 1 1 3 1 # . . . # . . # # . . # . # . . # # # . . #
To solve one of the embedded puzzles do the pynogram --board {NAME}
(or simply -b)
where NAME is the name of the file (you can skip the .txt extension).
See the list of all embedded puzzles in the pynogram/examples/ of your installation folder [1].
$ pynogram --board=winter --draw-final # # # # # 2 # # # # # 1 1 4 1 2 4 4 5 2 7 # # # # # 5 7 2 1 3 3 7 4 6 7 6 3 4 4 4 3 6 2 5 1 125 1 # # # # # 6 3 7 6 6 6 4 111 1 4 5 1 1 7 1 1 5 4 1 1 1 6 103 # # # # # 4 5 5 6 6 7 7 6 4 3 3 2 2 1 2 2 1 1 1 1 1 1 3 1 8 1 5 114 # . # # # # # . # # # # # # # # # # # . . # # # # 3 3 9 2 1 # # # . . . # # # . # # # # # # # # # . . # # . # 2 8 5 5 # # . . # # # # # # # # . # # # # # . . # # # # # 2 145 # # . . # # # # # # # # # # # # # # . # # # # # . 2 4 4 2 6 # # . . # # # # . # # # # . . . # # . # # # # # # 2 6 5 2 . # # . . . # # # # # # . . . . . # # # # # . # # 117 # # # # # # # # # # # . . . . . . . # # # # # # # 6 3 3 6 # # # # # # . # # # . . . # # # . . . # # # # # # 1 7 5 5 # . # # # # # # # . . . # # # # # . . . # # # # # 8 7 4 # # # # # # # # . . . # # # # # # # . . . # # # # 8 9 4 # # # # # # # # . . # # # # # # # # # . . # # # # 121 8 # # # # # # # # # # # # . . # . . # # # # # # # # 2 1 2 . . . . . . . . . . # # . . # . . # # . . . . . . 9 3 . . . . . . . . . . # # # # # # # # # . # # # . . 2 . . . . . . . . . . . . . . . . . . . . . . # # . 9 . . . . . . . . . . . . . . # # # # # # # # # . . 6 . . . . . . . . . . # # # # # # . . . . . . . . . 6 . . . . . . . # # # # # # . . . . . . . . . . . . 6 . . . . . # # # # # # . . . . . . . . . . . . . . 7 . . . # # # # # # # . . . . . . . . . . . . . . . 8 . # # # # # # # # . . . . . . . . . . . . . . . . 8 # # # # # # # # . . . . . . . . . . . . . . . . . 8 # # # # # # # # . . . . . . . . . . . . . . . . . 7 # # # # # # # . . . . . . . . . . . . . . . . . . 7 # # # # # # # . . . . . . . . . . . . . . . . . .
solve simple color puzzle (UK flag)
$ pynogram -b uk # # # # # # # 1 1 2 2 3 3 4 4 3 3 2 2 1 1 # # # # # # # 1 2 1 2 1 2 1 1 2 1 2 1 2 1 # # # # # # # 1 1 2 4 3 3 2 2 1 1 1 1 2 2 3 3 4 2 1 1 # # # # # # # 5 5 4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 5 5 # # # # # # # 3 3 3 4 3 3 2 2 1 1 4 5 5 6 6 5 5 4 1 1 2 2 3 3 4 3 3 3 # # # # # # # 5 5 4 1 2 1 2 1 2 1 7 5 5 3 3 5 5 7 1 2 1 2 1 2 1 4 5 5 # # # # # # # 1 1 2 1 1 2 2 3 3 4 4 5 5 6 1515156 5 5 4 4 3 3 2 2 1 1 2 1 1 3 113 113 % % % * * * * * * * * * * * % % % * * * * * * * * * * * % % % 2 3 9 3 9 3 2 * * % % % * * * * * * * * * % % % * * * * * * * * * % % % * * 4 3 7 3 7 3 4 * * * * % % % * * * * * * * % % % * * * * * * * % % % * * * * 6 3 5 3 5 3 6 * * * * * * % % % * * * * * % % % * * * * * % % % * * * * * * 8 3 3 3 3 3 8 * * * * * * * * % % % * * * % % % * * * % % % * * * * * * * * 103 1 3 1 3 10* * * * * * * * * * % % % * % % % * % % % * * * * * * * * * * 31% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 31% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 31% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 103 1 3 1 3 10* * * * * * * * * * % % % * % % % * % % % * * * * * * * * * * 8 3 3 3 3 3 8 * * * * * * * * % % % * * * % % % * * * % % % * * * * * * * * 6 3 5 3 5 3 6 * * * * * * % % % * * * * * % % % * * * * * % % % * * * * * * 4 3 7 3 7 3 4 * * * * % % % * * * * * * * % % % * * * * * * * % % % * * * * 2 3 9 3 9 3 2 * * % % % * * * * * * * * * % % % * * * * * * * * * % % % * * 3 113 113 % % % * * * * * * * * * * * % % % * * * * * * * * * * * % % %
To create the puzzle by yourself, learn the format first. Do not panic, it is very simple!
Find out the pynogram/examples/hello.txt file inside your installation folder [1]
and copy it to create a new puzzle.
Then follow the comments in the file to add clues to your new puzzle.
To run the solver on your puzzle hit the pynogram
and specify the path to your file:
$ cp /install/folder/pynogram/examples/hello.txt my-new-puzzle.txt $ pynogram -b my-new-puzzle.txt # # # # # # # # # 1 1 # # # # # # # # # 1 1 1 1 5 # # # # # # # # # 7 1 1 1 7 0 3 1 1 2 0 6 0 6 0 3 1 5 1 3 0 1 1 1 1 # . . . # . . . . . . . . . . . . . . . . # 1 1 1 1 1 # . . . # . . . . . . # . # . . . . . . . # 1 1 2 1 1 3 1 # . . . # . . # # . . # . # . . # # # . . # 5 1 1 1 1 1 1 1 1 # # # # # . # . . # . # . # . # . # . # . # 1 1 4 1 1 1 1 1 1 # . . . # . # # # # . # . # . # . # . # . # 1 1 1 1 1 1 1 1 # . . . # . # . . . . # . # . # . # . # . . 1 1 2 1 1 3 1 # . . . # . . # # . . # . # . . # # # . . #
Visit the http://webpbn.com/ to see thousands of puzzles waiting for you to solve. To run the solver on any of them just specify the puzzle id with the --pbn flag:
$ pynogram --pbn=3 --draw-final # # # # 3 3 # # # # 2 1 2 4 3 3 2 # # # # 3 1 2 1 3 5 1 1 3 # # # # 5 5 1 1 1 1 5 5 5 # # # # 5 9 113 2 3 3 3 3 3 2 3 119 5 5 . . . . . # # # # # . . . . . 9 . . . # # # # # # # # # . . . 11. . # # # # # # # # # # # . . 3 1 3 . # # # . . . # . . . # # # . 2 3 3 2 . # # . # # # . # # # . # # . 4 1 1 4 # # # # . . # . # . . # # # # 6 8 # # # # # # . # # # # # # # # 6 8 # # # # # # . # # # # # # # # 5 9 # # # # # . # # # # # # # # # 5 6 # # # # # . . . . # # # # # # 2 7 2 . # # . # # # # # # # . # # . 3 3 . # # # . . . . . . . # # # . 11. . # # # # # # # # # # # . . 9 . . . # # # # # # # # # . . . 5 . . . . . # # # # # . . . . .
$ pynogram --pbn=898 --draw-final # # # # # # # # 1 # # # # # # # # 1 1 # # # # # # # # 2 5 1 1 1 # # # # # # # # 1 4 1 6 2 1 5 4 1 # # # # # # # # 2 3 1 2 1 1 2 1 1 3 # # # # # # # # 1 1 3 1 2 1 6 6 3 2 3 1 # # # # # # # # 2 7 1 1 2 2 9 8 7 2 2 1 2 7 5 11. . % % % % % % % % % % % . . 5 1 2 1 2 1 1 . % % % % % * % % * % % * % . 2 1 12% % * % % % % % % % % % % % % 9 1 5 % % % % % % % % % * % % % % % 1 2 1 2 1 4 1 3 * % % X % % * % % % % X % % % 4 1 5 1 1 1 2 % % % % X % % % % % X % * % % 2 1 2 2 1 5 % % * % % X X . . X % % % % % 4 2 1 4 . % % % % . X X . X % % % % . 6 . . . . X X X X X X . . . . . 4 . . . . . X X X X . . . . . . 3 . . . . . . X X X . . . . . . 3 . . . . . . X X X . . . . . . 3 . . . . . . X X X . . . . . . 7 . . . . X X X X X X X . . . . 9 . . . X X X X X X X X X . . .
If you want to come over the network overhead when solving the webpbn puzzle,
you can download it prior to solving (e.g. http://webpbn.com/survey/puzzles).
Then run the solver pynogram --local-pbn=path/to/pbn/puzzle.xml
.
The http://www.nonograms.org also contains thousands of great puzzles. This site offers only single-solution puzzles that do not require guessing, therefore they usually solved quite fast.
$ pynogram --nonograms-org=19833 # # # # # # 2 # # # # # # 1 3 2 2 # # # # # # 3 10 6 1 6 2 2 2 5 3 # # # # # # 9 1 101 1 103 3 2 2 3 1 1 2 4 # # # # # # 4 2 1 1 5 1 2 2 1 3 1 1 2 2 5 1 1 8 . # . . # . . # # # # # # # # 1 2 2 7 # . # # . # # . # # # # # # # 1 2 2 2 2 # . # # . # # . # # . . . # # 1 2 2 1 1 # . # # . # # . # . . . . . # 1 2 2 1 2 # . # # . # # . # . . # # . . 1 2 2 2 3 # . # # . # # . # # . # # # . 1 2 2 2 2 # . # # . # # . . # # . # # . 6 1 3 # # # # # # . # . . # # # . . 13# # # # # # # # # # # # # . . 10# # # # # # # # # # . . . . . 5 1 . . # # # # # . . . . . . . # 2 1 3 # # . . # . . . . . . . # # # 1 1 1 1 3 2 # . . # . # . # . # # # . # # 3 2 1 1 1 # # # . . . # # . # . . # . # 2 1 1 2 2 1 # # . # . . # . # # . # # . #
$ pynogram --nonograms-org=19784 # # # # # # # 2 # # # # # # # 2 2 1 # # # # # # # 1 4 1 # # # # # # # 2 1 6 2 3 # # # # # # # 2 2 1 6 3 4 # # # # # # # 1 2 2 2 6 2 1 7 6 # # # # # # # 1 1 1 5 5 2 1 5 5 2 3 # # # # # # # 1 1 4 111 1 1 1 1 1 1 1 1 4 4 1 1 4 " " " " 6 " " " " " " 1 3 2 " ! ! ! " " 1 1 1 1 1 1 ! X ! X ! " 5 1 ! ! ! ! ! " 4 ! ! ! ! 3 # # # 5 # # # # # 1 2 9 ! " " # # # # # # # # # 1 1 9 " ! # # # # # # # # # 1 6 " # # # # # # 1 5 " # # # # # 1 1 2 2 " # ! ! # # 1 7 " $ $ $ $ $ $ $ 1 7 " $ $ $ $ $ $ $ 3 1 2 2 2 2 5 X X X " X X $ $ X X $ $ X X X X X 1 1 2 2 2 X " $ $ $ $ X X 1 1 2 2 2 X " $ $ $ $ X X 1 1 3 3 2 X " X X X X X X X X
By default, in the process of solving the new information will instantly appear on a terminal (as a full image board), so you can observe many boards that changing each other many times a second mixed with logs (if you specify any verbosity level with -v flag). But you can always disable the board updates and force to show only the final result with --draw-final flag.
Also the --curses mode is available, that allows you to see the solving inside a separate console (ncurses) window.
Examples:
$ pynogram --pbn 30216 --curses
$ pynogram --pbn 29723 --curses
If you see something like this (I stumbled with this while trying to run inside a docker container)
$ pynogram ... UnicodeEncodeError: 'ascii' codec can't encode character u'\u2b1b' in position 18: ordinal not in range(128)
then try to run with the special environment variable
$ PYTHONIOENCODING=utf-8 pynogram
If that will work, you can save that variable for current session:
$ export PYTHONIOENCODING=utf-8
or for all the future runs
$ echo 'export PYTHONIOENCODING=utf-8' >> ~/.bashrc
to use the web solver you have to install additional subpackage:
pip install pynogram[web]
and start the server:pynogram-web
you can solve any of local puzzles (with /board/local/ path) or webpbn puzzles (with /board/pbn/ path) or nonograms.org ones (with /board/nonograms.org/ path)
you can specify render mode (with the ?render=MODE argument). Now the four are supported:
- svg (default) - draw nice vector image. It can seriously slows down the viewing and solving on a large boards (e.g. 50x50 and more), since the resulted SVG can be pretty huge. In the future releases I plan to apply more advanced SVG drawing to eliminate the problem.
- text - lightweight text format similar to the one that draws on the console.
- text-grid - slightly more advanced ASCII-graphic that renders the grid between cells. However it requires more screen space.
- text-grid-bold - almost like the last one, but also draws bold lines, splitting the whole board into 5x5 squares (remember puzzles in those magazines?)
http://localhost:3145/board/local/einstein?render=svg (zoom=67%)
http://localhost:3145/board/local/MLP?render=text-grid-bold (zoom=25%)
http://localhost:3145/board/pbn/2040?render=text (zoom=75%)
http://localhost:3145/board/pbn/2196 (zoom=75%)
Both console and web solvers work on a wide variety of pythons: CPython2.7 and 3.5+, PyPy 2.7 and 3.5. The best performance, however, achieved on PyPy (version 3 is always preferable), so try it out.
You can install numpy for slightly better performance when running on CPython interpreter (it's not listed in requirements to keep the package lightweight). However numpy does not work correctly with PyPy interpreter.
The following sites and articles were used when making this solver:
1. The 'pbnsolve' Paint-by-Number Puzzle Solver by Jan Wolter and the survey
3. Solving Nonograms by combining relaxations
4. An Efficient Approach to Solving Nonograms
5. Решение цветных японских кроссвордов со скоростью света
6. Решение японских кроссвордов с использованием конечных автоматов
7. 'Nonolib' library by Dr. Steven Simpson
The software developed and tested on Ubuntu 16.04 LTS using PyPy 3.5 (mostly). If you have any issues, drop a line to the project site.
[1] | (1, 2) The installation folder can vary depending on your distro, python version and installation method. For example when installed inside virtualenv it can be in one of such paths:
When installing system-wide it can be in:
If you still cannot find it, try the |