3 releases
0.1.2 | Nov 24, 2020 |
---|---|
0.1.1 | Nov 18, 2020 |
0.1.0 | Nov 18, 2020 |
#5 in #nonogram
16KB
270 lines
convert-nonogram
convert-nonogram
is a tool that converts images to nonograms. Currently, it only outputs the widely-used XML-based webpbn
format and the olsak
format (with the extension .g
).
convert-nonogram
does an exact image-to-nonogram format conversion. If you're looking for something that will take an arbitrary image and make a solveable (black and white) nonogram out of it, you can try Walter Koster's tool.
How to use it
I use convert-nonogram
to evaluate the solvability of nonograms while editing them as an image. You can install it with cargo install convert-nonogram
.
All images supported by the image crate are supported as input, but if you try to create JPEG nonograms, you're going to have a bad time.
With pbnsolve
This is what I do, since pbnsolve
provides useful information about difficulty. You'll have to download and install it from a tarball.
Then, to evaluate an image, do:
convert-nonogram examples/tea.png | pbnsolve -tu
(-t
requests detailed difficulty output, and -u
requires checking for uniqueness. You can add -aL
(or -aE
; I don't fully understand the difference) to stop solving when it's not possible to proceed with "line logic". You can add -b
to suppress output of the solved grid, but it's useful when debugging a non-unique nonogram or partially-solvable nonogram. pbnsolve
's README file documents its other flags.)
Here's a somewhat tricky nonogram that's solveable with only single-line reasoning. The "Lines processed" (relative to "Lines in puzzle", which is the sum of the width and height) is the best indicator of difficulty, I think:
$ convert-nonogram examples/shirt_and_tie.png | pbnsolve -tu
UNIQUE LINE SOLUTION:
.........aaaa..
........a....aa
....aaaaaaa...a
...aa.....aa.ab
..aa.......aabb
..a...........b
..a...a.aaaaa.b
..a...a.a...a.b
.aa..aa.aaaaa.b
.a...aa.a...a.b
.a..aaa.a...a.b
aa..a.a..aaa..b
a...a.a......bb
a...a.a......bb
aaaaa.a......bb
ab.a..a......bb
a..a..a......bb
aaaa..a.......b
......aaaaa....
..........aaaaa
Cells Solved: 300 of 300
Lines in Puzzle: 35
Lines Processed: 149 (400%)
Exhaustive Search: 0 cells in 0 passes
Backtracking: 0 probes, 0 guesses, 0 backtracks
Probe Sequences: 0
Plod cycles: 1, Sprint cycles: 0
Cache Hits: 0/0 (0.0%) Adds: 0 Flushes: 0
Processing Time: 0.000205 sec
Here's the same nonogram with the button on the shirt sleeve removed. Now it requires backtracking to solve:
$ convert-nonogram examples/shirt_and_tie_no_button.png | pbnsolve -tu
UNIQUE SOLUTION:
.........aaaa..
........a....aa
....aaaaaaa...a
...aa.....aa.ab
..aa.......aabb
..a...........b
..a...a.aaaaa.b
..a...a.a...a.b
.aa..aa.aaaaa.b
.a...aa.a...a.b
.a..aaa.a...a.b
aa..a.a..aaa..b
a...a.a......bb
a...a.a......bb
aaaaa.a......bb
a..a..a......bb
a..a..a......bb
aaaa..a.......b
......aaaaa....
..........aaaaa
Cells Solved: 300 of 300
Lines in Puzzle: 35
Lines Processed: 1158 (3300%)
Exhaustive Search: 13 cells in 2 passes
Backtracking: 105 probes, 32 guesses, 32 backtracks
Probe Sequences: 32
Found Contradiction: 31 (0 adj, 31 2-neigh)
Found Solution: 1 (0 adj, 1 2-neigh)
Choose Optimum: 0 (0 adj, 0 2-neigh)
Total probes: 105 (0 adj, 105 2-neigh)
Plod cycles: 1, Sprint cycles: 0
Cache Hits: 576/1102 (52.0%) Adds: 494 Flushes: 0
Processing Time: 0.001668 sec
With nonogrid
nonogrid
can provide a better and more comprehensive visual representation of ambiguities in non-unique nonograms. Sadly, it doesn't tell you anything about the difficulty of a nonogram.
Make sure to install nonogrid
with cargo install --features=xml,web nonogrid
to allow parsing the XML format (and to enable directly downloading nonograms from the web, because why not). Then, to evaluate an image, do:
convert-nonogram examples/tea.png | nonogrid
With the Olsak solver
The Olsak solver comes in a tarball and doesn't even have a makefile! (Just do gcc grid.c -o grid
to build it.) It accepts a different input format. It does provide some difficulty information, but I haven't yet learned to understand it.
convert-nonogram examples/tea.png --olsak | grid -
With Nonny
Nonny is a nonogram editor that can open Olask-formatted nonograms. Its solver is a bit unsophisticated, but you can watch it work, which can give you an idea of what parts of the puzzle are easy to deal with and what parts are trickier.
convert-nonogram examples/tea.png --olsak > ~/.local/share/nonny/puzzles/tea.g
To export a puzzle from Nonny, I, uh, take a screenshot of the thumbnail in the Gimp, crop it, and resize the image with "none" as the interpolation technique. Maybe convert-nonogram
ought to accept some other nonogram formats as input.
Dependencies
~7.5MB
~103K SLoC