网格逻辑解谜器

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 Tomcat试图在RESTful Spring MVC服务中解析JSP文件   java如何正确删除JavaFX中动画的图像   java一个整数可以和一个长整数相加吗?   java哈希映射不可序列化   java Hibernate:两个OneToMany属性,由具有不同列的同一实体映射   使用QueryDSL和Spring的存储库编写java交叉表查询   java只需要知道如何从数组中获取数字并将其相加。注意。号码将由用户给出。   java无法使用javamail api建立连接   java抽象类,其覆盖方法添加特定组件   java JavaFX Choicebox不填充   java为什么我必须重复输入才能继续?   java如何用AndroidAnnotations解析对POJO的JSON响应?