网格逻辑解谜器

grilops的Python项目详细描述


格里洛普斯

使用python 3和 z3

这个包包含一个库和助手函数的集合 有助于解决和检查 Nikoli式逻辑谜题 使用Z3。

要了解如何使用此软件包来建模和解决难题,请尝试 通过tutorial IPython notebook, 并参考 examplesAPI Documentation

安装

grilops需要python 3.6或更高版本。

要安装grilops以便在您自己的程序中使用:

$ pip3 install grilops

安装源代码(运行示例和/或使用代码):

$ git clone https://github.com/obijywk/grilops.git
$ cd grilops
$ pip3 install -e .

基本概念和用法

symbolsgrids模块包含 模拟大多数谜题。为了方便起见,可以访问它们的属性 直接从顶层grilops模块。

符号表示由 解决一个难题。例如,一个 Sudoku拼图应该是数字1 到9点。二元判定谜题的符号集,如 Nurikabe可以包含两个 符号,一个表示黑色单元格,另一个表示白色单元格。

符号网格用于跟踪符号对网格的分配 细胞。通常,使用grilops设置一个程序来解决一个难题涉及到:

  • 构造符号集
  • 构造一个符号网格,限制其包含来自该符号集的符号
  • 向符号网格中的单元格添加拼图特定约束
  • 检查是否满足符号网格单元格的符号分配要求

网格单元作为z3常量公开,因此内置的z3运算符可以而且应该 在添加特定于拼图的约束时使用。此外,Grilops还提供 有几个模块可以帮助自动化和抽象出 各种各样的限制。

回路

grilops.loops模块有助于添加确保符号的约束 连接形成闭合环。一些拼图类型的例子 有用的是MasyuSlitherlink

$ python3 examples/masyu.py             $ python3 examples/slitherlink.py 
 ┌───┐┌──┐                              ┌──┐                              
┌┘ ┌─┘└─┐│                              │┌┐│ ┌┐                           
└─┐│┌──┐││                              └┘│└┐││                           
  │││┌─┘││                                │ └┘│                           
┌─┘└┘│ ┌┘│                                └┐  │                           
│┌──┐│ │┌┘                              ┌──┘┌┐│                           
││┌─┘└─┘└┐                              └───┘└┘                           
│││ ┌───┐│                                                                
└┘│ │┌──┘│                              Unique solution
  └─┘└───┘

Unique solution

区域

grilops.regions模块有助于添加约束,以确保 细胞被分为可变的正交邻接区(多米诺区)。 形状和尺寸。这是有用的拼图类型的一些例子 NurikabeFillomino

$ 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模块有助于添加约束,以确保 细胞被分成固定的正交邻接区 形状和尺寸。这是有用的拼图类型的一些例子 BattleshipLITS

$ 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模块有助于添加约束,以确保 属性沿穿过网格的直线保持。这些“视线”可能 如果满足某些条件,则在到达网格边缘之前终止 (例如,如果某个符号,例如代表墙的符号 遇到)。这是有用的拼图类型的一些例子 AkariSkyscraper

$ python3 examples/akari.py             $ python3 examples/skyscraper.py 
█* █*    █                              23541                            
   *   █                                15432                            
*█*   █  *                              34215                            
 *█  █   █                              42153                            
   ███*                                 51324                            
   *███*                                                                 
█ * █* █*                               Unique solution
*  █*   █*
  █     * 
█ *   █* █

Unique solution

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java为游戏添加声音。需要帮助   java在获取数据时忽略模型类中的forign键映射   java为什么Microsoft JDBC驱动程序忽略failoverPartner主机名   java可以下载mozswing文件   java等价于ObjectOutputStream,不仅保存其状态,还保存整个对象?   Java Android LiveData根据其他LiveData调用房间查询   java如何使用jackson jsonNode实现这一点并获得所需的输出   在web服务器上作为web应用程序运行java应用程序?   groovy中java类的元类属性   返回空指针的java图形对象   标头中包含用户名和密码的java SOAP客户端请求   具有堆栈实现和递归的Hanoi算法塔(Java)   java当我运行这两个类时,我的老鼠不会移动   使用图像进行java相似图像搜索   Java8并行流机制   使用单例对象作为枚举元素的java Scala枚举,是否有可能对它们进行迭代?   java Webview更改高度大小   不可序列化对象和函数的java Spark Scala编程   java my app在eclipse中运行良好,而不是在jar中