网格逻辑解谜器

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 401在API URL上带有声明性Http客户端,并带有@Secured(SecurityRule.IS_ANONYMOUS)注释   java如何在Android中创建计时器?   Java8WebStart安全弹出窗口   java会通过以下两种方式导致堆空间耗尽吗?   java项目调度GA:染色体的高效数据结构   java Apache POI:如何在Excel文件中插入列   java在JRE系统库中每个jar扮演什么角色   java如何在抽象类中执行@mock(不是注入mock)   java如何使用opensearch和Lucene发送搜索查询?   java在ApachePOI中处理空列   java广播接收器未接收到目标   java错误ELF类:ELF类64(可能原因:体系结构字宽不匹配)   java调用Web服务(SSL)时出错   用于iot集线器设备固件更新的java Rest API   通过xslt将xml转换为文本文件时引发java异常   Java linux打印问题   Java XML转换器重复行   java从另一个类的方法将数组导入mainActivity类   多线程选择与Java交互的线程   我想在java程序中打印以下格式的文件: