#convert-images #nonogram #image #black #white #nonograms #olsak

app convert-nonogram

将图像转换为非ogram线索的转换器

3 个版本

0.1.2 2020年11月24日
0.1.1 2020年11月18日
0.1.0 2020年11月18日

#7 in #white

MIT 许可证

16KB
270 行代码(不包括注释)

convert-nonogram

convert-nonogram 是一个将图像转换为非ogram的工具。目前,它只输出广泛使用的基于XML的 webpbn 格式和 olsak 格式(扩展名为 .g)。

convert-nonogram 进行精确的图像到非ogram格式的转换。如果您正在寻找一个可以接受任意图像并从中制作出可解(黑白)非ogram的工具,您可以尝试 Walter Koster的工具

如何使用它

我使用 convert-nonogram 在编辑图像时评估非ogram的可解性。您可以使用 cargo install convert-nonogram 来安装它。

支持所有由 image crate 支持的图像作为输入,但如果您尝试创建JPEG非ogram,您可能会遇到麻烦。

使用 pbnsolve

由于 pbnsolve 提供有关难度的有用信息,我这样做。您必须从tarball下载并安装它。

然后,要评估一个图像,执行以下操作

convert-nonogram examples/tea.png | pbnsolve -tu

(-t 请求详细的难度输出,-u 需要检查唯一性。您可以添加 -aL(或 -aE;我不完全了解区别)来在无法使用“行逻辑”继续时停止求解。您还可以添加 -b 来抑制已求解网格的输出,但在调试非唯一非ogram或部分可解非ogram时很有用。pbnsolve 的 README 文件记录了其其他标志。)

这是一个只需要单行推理即可求解的相当复杂的非ogram。我认为“已处理的行”(相对于“拼图中的行”,即宽度和高度的之和)是难度最好的指标。

$ 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 

这是移除衬衫袖子按钮的同一非ogram。现在它需要回溯来解决

$ 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 

使用 nonogrid

nonogrid 可以提供对非唯一非ogram中歧义的更好和更全面的视觉表示。遗憾的是,它不会告诉您关于非ogram难度的任何信息。

请确保使用以下命令安装 nonogridcargo install --features=xml,web nonogrid 以允许解析 XML 格式(并直接从网络上下载非ograms,为什么不呢)。然后,要评估一张图片,请执行

convert-nonogram examples/tea.png | nonogrid

使用 Olsak 求解器

Olsak 求解器 以 tarball 形式提供,甚至没有 makefile!(只需执行 gcc grid.c -o grid 来构建它。)它接受不同的输入格式。它确实提供了一些难度信息,但我还没有学会理解它。

convert-nonogram examples/tea.png --olsak | grid -

使用 Nonny

Nonny 是一个非ogram 编辑器,可以打开 Olask 格式的非ogram。其求解器有点简单,但你可以观察它的运行过程,这可以让你了解哪些部分容易处理,哪些部分比较棘手。

convert-nonogram examples/tea.png --olsak > ~/.local/share/nonny/puzzles/tea.g

要从 Nonny 导出谜题,我会在 Gimp 中截图缩略图,裁剪它,并使用“无”作为插值技术来调整图像大小。也许 convert-nonogram 应该接受其他非ogram 格式作为输入。

依赖关系

~6.5MB
~84K SLoC