网格逻辑解谜器
grilops的Python项目详细描述
格里洛普斯
使用python 3和 z3。
这个包包含一个库和助手函数的集合 有助于解决和检查 Nikoli式逻辑谜题 使用Z3。
要了解如何使用此软件包来建模和解决难题,请尝试 通过tutorial IPython notebook, 并参考 examples和 API Documentation。
安装
grilops需要python 3.6或更高版本。
要安装grilops以便在您自己的程序中使用:
$ pip3 install grilops
安装源代码(运行示例和/或使用代码):
$ git clone https://github.com/obijywk/grilops.git
$ cd grilops
$ pip3 install -e .
基本概念和用法
symbols
和grids
模块包含
模拟大多数谜题。为了方便起见,可以访问它们的属性
直接从顶层grilops
模块。
符号表示由 解决一个难题。例如,一个 Sudoku拼图应该是数字1 到9点。二元判定谜题的符号集,如 Nurikabe可以包含两个 符号,一个表示黑色单元格,另一个表示白色单元格。
符号网格用于跟踪符号对网格的分配 细胞。通常,使用grilops设置一个程序来解决一个难题涉及到:
- 构造符号集
- 构造一个符号网格,限制其包含来自该符号集的符号
- 向符号网格中的单元格添加拼图特定约束
- 检查是否满足符号网格单元格的符号分配要求
网格单元作为z3常量公开,因此内置的z3运算符可以而且应该 在添加特定于拼图的约束时使用。此外,Grilops还提供 有几个模块可以帮助自动化和抽象出 各种各样的限制。
回路
grilops.loops
模块有助于添加确保符号的约束
连接形成闭合环。一些拼图类型的例子
有用的是Masyu和
Slitherlink。
$ python3 examples/masyu.py $ python3 examples/slitherlink.py
┌───┐┌──┐ ┌──┐
┌┘ ┌─┘└─┐│ │┌┐│ ┌┐
└─┐│┌──┐││ └┘│└┐││
│││┌─┘││ │ └┘│
┌─┘└┘│ ┌┘│ └┐ │
│┌──┐│ │┌┘ ┌──┘┌┐│
││┌─┘└─┘└┐ └───┘└┘
│││ ┌───┐│
└┘│ │┌──┘│ Unique solution
└─┘└───┘
Unique solution
区域
grilops.regions
模块有助于添加约束,以确保
细胞被分为可变的正交邻接区(多米诺区)。
形状和尺寸。这是有用的拼图类型的一些例子
Nurikabe和
Fillomino。
$ python3 examples/nurikabe.py $ python3 examples/fillomino.py
2 █ ██ 2 8 8 3 3 101010105
███ █2███ 8 8 8 3 1010105 5
█2█ 7█ █ █ 3 3 8 10104 4 4 5
█ ██████ █ 1 3 8 3 102 2 4 5
██ █ 3█3█ 2 2 8 3 3 1 3 2 2
█2████3██ 6 6 2 2 1 3 3 1 3
2██4 █ █ 6 4 4 4 2 2 1 3 3
██ █████ 6 4 2 2 4 3 3 4 4
█1███ 2█4 6 6 4 4 4 1 3 4 4
Unique solution Unique solution
形状
grilops.shapes
模块有助于添加约束,以确保
细胞被分成固定的正交邻接区
形状和尺寸。这是有用的拼图类型的一些例子
Battleship和
LITS。
$ python3 examples/battleship.py $ python3 examples/lits.py
▴ IIII
◂▪▸ ▪ • SS L
▾ LSS L I
◂▪▪▸ • L IIIILLI
LL L I
▴ ◂▸ TTT L I
▾ ▴ SS T LL T
▾ • SSLL TT
L T T
Unique solution IIIILTTT
Unique solution
视线
grilops.sightlines
模块有助于添加约束,以确保
属性沿穿过网格的直线保持。这些“视线”可能
如果满足某些条件,则在到达网格边缘之前终止
(例如,如果某个符号,例如代表墙的符号
遇到)。这是有用的拼图类型的一些例子
Akari和
Skyscraper。
$ python3 examples/akari.py $ python3 examples/skyscraper.py
█* █* █ 23541
* █ 15432
*█* █ * 34215
*█ █ █ 42153
███* 51324
*███*
█ * █* █* Unique solution
* █* █*
█ *
█ * █* █
Unique solution