非图博弈会话分析

nonogram-analysis的Python项目详细描述


非图分析

nonogram是一个益智游戏,在这个游戏中,网格中的单元格必须根据网格边上的数字着色或留空,以显示隐藏的图片。在

nongram Analysis是一个Python库,用于为完成非程序的玩家打分。在

非图线索

非图的线索表示非图的每一列和每一行用一个或多个空格隔开的一列或一行的标记组的长度。在

例如:

            ║   | 1 |   | 3 | 1 |   |   | 2 ║
            ║ 6 | 3 | 6 | 1 | 1 | 1 | 3 | 2 ║
            ║ 1 | 1 | 1 | 2 | 1 | 6 | 1 | 1 ║
    ========+===+===+===+===+===+===+===+===+
          6 ║ X | X | X | X | X | X |   |   ║
    --------+---+---+---+---+---+---+---+---+
      1 2 1 ║ X |   | X | X |   |   |   | X ║
    --------+---+---+---+---+---+---+---+---+
          8 ║ X | X | X | X | X | X | X | X ║
    --------+---+---+---+---+---+---+---+---+
        3 2 ║ X | X | X |   |   | X | X |   ║
    --------+---+---+---+---+---+---+---+---+
          8 ║ X | X | X | X | X | X | X | X ║
    --------+---+---+---+---+---+---+---+---+
    1 1 1 1 ║ X |   | X |   |   | X |   | X ║
    --------+---+---+---+---+---+---+---+---+
        1 2 ║   |   |   | X |   | X | X |   ║
    --------+---+---+---+---+---+---+---+---+
      4 1 1 ║ X | X | X | X |   | X |   | X ║
    ========+===+===+===+===+===+===+===+===+

我们使用Backus–Naur Form (BNF)定义以下语言来声明非程序的线索:

^{pr2}$

以上非图的线索是:

6-1,1-3-1,6-1,3-1-2,1-1-1,1-6,3-1,2-2-1|6,1-2-1,8,3-2,8,1-1-1-1,1-2,4-1-1

nongram Analysis支持类NonogramClues来构建非程序的线索。在

例如:

>>>fromnonogram.analysisimportNonogramClues>>>nonogram_clues=NonogramClues.from_string('1-1,1-1,2|2,1,3')

非程序动作

我们定义以下Backus–Naur Form(BNF)来描述玩家在非程序单元上执行的操作的语法:

action ::= action_type "-" cell_x "-" cell_y "-" action_time
action_time ::= integer
action_type ::= "F" | "M" | "C"
cell_x ::= integer
cell_y ::= integer

cell_xcell_y表示非图矩阵中单元的位置。非图的原点(0, 0)位于矩阵的最左上方。在

术语action_time表示UNIX timestamp的一个变体,即自Unix纪元(1970年1月1日00:00:00 UTC)以来经过的毫秒数减去闰秒。在

术语action_type表示玩家可能采取的不同行动:

  • F:填充单元格
  • M:标记单元格以指示它是空的
  • C:清除单元格

例如:

F-5-3-1586485456389

表示填充非图的单元格(5, 3)的操作,由玩家在2020年4月10日星期五上午02:24:16.389执行:

      ║   |   |   |   |   |   |   |
    ==+===+===+===+===+===+===+===+...
      ║   |   |   |   |   |   |   |
    --+---+---+---+---+---+---+---+...
      ║   |   |   |   |   |   |   |
    --+---+---+---+---+---+---+---+...
      ║   |   |   |   |   |   |   |
    --+---+---+---+---+---+---+---+...
      ║   |   |   |   |   | X |   |
    --+---+---+---+---+---+---+---+...
      :   :   :   :   :   :   :   :
      .   .   .   .   .   .   .   .

nongram Analysis支持类NonogramClues来构建玩家在非程序上执行的操作。在

例如:

>>>fromnonogram.analysisimportNonogramAction>>>nonogram_actions=NonogramAction.from_strings('F-0-0-1593160278088,F-0-1-1593160279070,M-0-1-1593160279246,F-0-2-1593160281156,F-1-2-1593160281839,F-2-2-1593160282492,F-1-0-1593160284516,F-1-1-1593160285415,M-1-1-1593160285586,F-2-1-1593160288354')

无图游戏会话

nongram Analysis支持类NonogramSession为试图求解非图的玩家构建游戏会话。此类的构造函数接受以下参数:

  • user:一个对象User,表示播放非程序的玩家。在
  • start_time:对象datetime.datetime,表示非程序游戏会话开始的时间。在
  • clues:对象列表NonogramClues对应于给玩家解决的非图的线索。在
  • actions:表示播放器执行的操作的对象列表NonogramActions。在

例如:

>>>importdatetime>>>fromnonogram.analysisimportNonogramSession>>>nonogram_session=NonogramSession(>>>...None,>>>...datetime.datetime(2020,6,26,8,31,14,729000,tzinfo=datetime.timezone.utc),>>>...nonogram_clues,>>>...nonogram_actions)>>>print(str(nonogram_session))XX...XXXX>>>nonogram_session.is_solvedTrue>>>calculate_nonogram_score(nonogram_session)>>>0.5152905198776758

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

推荐PyPI第三方库


热门话题
java如何从同步请求中获取响应代码   具有深度复制的类中的Java oop getter/setter   java LDAP“简单”用户身份验证(JNDI Tomcat)不稳定?   java将Jenkins jnlp代理设置为通过API以编程方式使用WebSocket   java如何获取在servlet筛选器的静态块中启动的静态类的实例?   前两个数字的java charAt循环不能循环它   java在Spring引导执行器中是否有检查子服务运行状况的标准方法?   java我可以将jacksonmapped@JsonProperties推到“顶层”吗?   json JAVA:opencsv随机读取CSV单元格   无第三方应用程序的java捆绑包JRE   使用openidConnectClient功能的WAS Liberty中出现java无效cookie标头错误   java如何在Restful Web服务中从Http Post获取数组?   java如何读取安卓开发的JSON url?   如何在java IO中打开包含汉字的文件?