解决非图(绘图方块)

2024-01-05

今天是星期五下午,让我们来解决一个有趣的谜题/算法问题。

我最喜欢的任天堂 DS 游戏之一是绘图方块 DS http://en.wikipedia.org/wiki/Picross_Ds。游戏非常简单,它涉及解决称为连线图 http://en.wikipedia.org/wiki/Nonogram。您可以在这里尝试一个简单的在线 Picross 克隆:TylerK 的绘图方块 http://www.thetimmys.com/flash/picross/.

Nonograms 是一个网格,其中为网格的每一行和每一列定义了数字序列。这些数字定义了该行/列的“填充”方块块,但块两侧的未填充区域未定义。例如,如果您有一行如下所示:


(source: steam-punk.net http://steam-punk.net/images/picross1.jpg)

该行的可能解决方案包括:


(source: steam-punk.net http://steam-punk.net/images/picross2.jpg)

(source: steam-punk.net http://steam-punk.net/images/picross3.jpg)

etc.

“4 5”只是告诉您,在行中的某个位置,有 4 个连续的块被填充,然后是 5 个连续的块被填充。这些将是唯一被填充的块,并且它们之前/之后的空间量是没有定义的。

当所有行和列都满足其定义且没有任何矛盾时,拼图就完成了。

概念上非常简单的游戏,但手动解决其中一些问题可能需要相当长的时间。 Picross DS 的谜题逐渐增大到 25x20 网格,这通常需要我大约半个小时才能解决。

然而,我总是想到,编写一个程序来解决这个游戏是相当容易的。我从来没有抽出时间来做这件事,但也许这里的一些人会喜欢这个挑战。如果发布了相当数量的解决方案,我将在一个大的谜题上对它们进行基准测试,类似于保罗·贝甘蒂诺 (Paolo Bergantino) 在这里提出了他的令人困惑的问题 https://stackoverflow.com/questions/746082/how-to-find-list-of-possible-words-from-a-letter-matrix-boggle-solver。里面有相当多的信息Nonogram 维基百科页面 http://en.wikipedia.org/wiki/Nonogram#Solution_techniques关于解决谜题的方法,如果你想参考的话。

这是来自 TylerK's Picross 的 Puzzle #1 的易于解析的定义,因此您可以为程序提供一些东西。第 1 行是拼图尺寸(可能不必要),第 2 行是行定义,第 3 行是列定义。这只是我首先想到的,所以如果有人能想到更好的输入格式,请随意评论或编辑这篇文章以包含它。

15 15
15,4 5,2 4,1 3,2,2,2 4 3,2 6 2,2 1 6 2,2 1 1 4 2,1 1,1 3 2 1,2 2 1 2 1,3 3 2 1,9
4 4,3 1 2 3,2 1 2 2,2 1 1,1 4 2,1 3,1 8,1 3 1 1,1 4 2 1,1 4,2 4 3,3 3 3,4 1,10 3,10

是的,这个问题是 NP 完全的,但这仅仅意味着随着谜题规模的增大,你(几乎)会陷入指数增长的运行时间。但在现实生活中,拼图的大小不会增加。几乎没有人愿意构建大于 100x100 的谜题,绝大多数都小于 50x50。构建一个能够在几分之一秒内解决书籍和杂志上发布的 95% 谜题的解算器实际上并不是特别具有挑战性。一个相当简单的深度优先搜索系统就可以做到这一点。

不太明显的是,有一小部分谜题非常棘手,会导致大多数简单求解器的运行时间爆炸。其中大多数都是设计糟糕的谜题,人类也很难或不可能解决,但有些是特别聪明的谜题,经验丰富的人类解谜者可以轻松解决,使用比大多数人工智能程序更深入的洞察力。

我自己编写了一个求解器,可以非常快速地解决大多数谜题,并且我已经做了一个对许多其他求解器的调查 http://webpbn.com/survey/与基准结果比较它们的性能。我还讨论了一类有趣的难题(多米诺难题),它演示了一些对于聪明人来说并不困难的难题对于大多数程序来说却非常困难。调查中可以找到我的求解器和多米诺拼图的链接。

我认为还有很大的改进空间,并会鼓励有新想法的人尝试一下。但值得注意的是,显而易见的事情已经做了,再做也没有多大用处。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

解决非图(绘图方块) 的相关文章

  • 一种良好且简单的随机性测量方法

    获取一长整数序列 例如 100 000 个 并返回序列随机性的测量值的最佳算法是什么 该函数应返回单个结果 如果序列并非完全随机 则返回 0 如果完全随机 则返回 1 如果序列有点随机 它可以给出介于两者之间的东西 例如0 95 可能是一个
  • 线段树java实现[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 你知道 二进制 的良好实现吗线段树 http en wikipedia org wiki Segmen
  • 定点数学比浮点运算快吗?

    多年前 即 20 世纪 90 年代初期 我构建了图形软件包 该软件包基于定点算术和预先计算的 cos sin 表格以及使用牛顿近似方法进行 sqrt 和对数近似的缩放方程来优化计算 这些先进技术似乎已经成为图形和内置数学处理器的一部分 大约
  • 分而治之算法找到两个有序元素之间的最大差异

    给定一个整数数组 arr 找出任意两个元素之间的差异 使得较大的元素出现在 arr 中较小的数字之后 Max Difference Max arr x arr y x gt y 例子 如果数组是 2 3 10 6 4 8 1 7 那么返回值
  • 如何将多边形放入另一个多边形内[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有两个多边形 如下图所示 左边是 粗多边形 右边是 最终多边形 现在 我正在寻找算法来将 最终多边形 拟合到 粗糙多边形 内 并具有
  • “包含字符串”的快速索引

    在我的应用程序中 我有多达数百万个短字符串 大部分短于 32 个字符 我想实现一个带有附加列表的搜索框 该列表仅包含包含在搜索框中输入的整个字符串的元素 如何预先建立索引来快速找到此类字符串 所有排序的 STL 容器都会检查整个字符串 对于
  • 是否有一种算法可以在线性时间内计算数组反转?

    我知道有多少倒转 en wikipedia org wiki Inversion 28discrete mathematics 29 in an n 元素数组可以在 O n log n 操作使用增强型归并排序 http www geeksf
  • 什么是“朴素”算法,什么是“封闭式”解决方案?

    我有一些关于描述算法时使用的术语语义的问题 首先 朴素 算法是什么意思 这与给定问题的其他解决方案有何不同 解决方案还可以采取哪些其他形式 其次 我听到很多人提到 封闭式 解决方案 我也不知道这意味着什么 但在尝试解决递归关系时经常会出现
  • 如何求两个地点的经纬度距离?

    我有一组位置的纬度和经度 怎么找distance从集合中的一个位置到另一个位置 有公式吗 半正矢公式假定地球是球形的 然而 地球的形状更为复杂 扁球体模型会给出更好的结果 如果需要这样的精度 你应该更好地使用文森特逆公式 See http
  • 总和不小于 key 的数组的最小子集

    给定一个数组 假设为非负整数 我们需要找到最小长度子集 使得元素之和不小于 K K 是作为输入提供的另一个整数 是否有可能找到时间复杂度为 O n n 的大 oh 的解决方案 我目前的想法是这样的 我们可以在 O n log n 中对数组进
  • 如何计算 3D Morton 数(交织 3 个整数的位)

    我正在寻找一种快速计算 3D Morton 数的方法 这个网站 http www graphics stanford edu seander bithacks html InterleaveBMN有一个基于幻数的技巧来处理 2D Morto
  • 连接红黑树

    OCaml 标准库有一个很棒的Set使用非常有效的分而治之算法来计算的实现union两套 我相信它会从一组中获取整个子树 而不仅仅是单个元素 并将它们插入到另一组中 并在必要时重新平衡 我想知道这是否需要 OCaml 使用的 AVL 树中保
  • 覆盖二维平面上给定点的最小圆

    问题 覆盖 2D 平面上给定 N 个点的圆的最小可能直径是多少 解决这个问题最有效的算法是什么 它是如何工作的 这是最小圆问题 http en wikipedia org wiki Smallest circle problem 请参阅参考
  • 当满足动态条件时退出递归函数

    使用来自的函数生成汉明距离 t 内的所有比特序列 https stackoverflow com questions 40813022 generate all sequences of bits within hamming distan
  • 颜色变换器功能上的堆栈溢出错误

    我有两种颜色 红色 和 鲑鱼色 我需要动态创建面板以及面板背景颜色 这些颜色必须介于两种颜色之间 红色 public Color x y protected void Page Load object sender EventArgs e
  • 我如何开始玩五子棋?

    我读到Gomoku http en wikipedia org wiki Gomoku它可以使用 Minimax 和 Alpha Beta 剪枝算法来实现 所以 我阅读了这些算法 现在了解了游戏将如何解决 但是当我坐下来编写代码时 我面临着
  • 数组所有可能的组合

    我有一个字符串数组 ted williams golden voice radio 我希望这些关键字的所有可能组合采用以下形式 ted williams golden voice radio ted williams ted golden
  • 查找字符串中最常见的子字符串的算法

    是否有任何算法可用于查找字符串中最常见的短语 或子字符串 例如 以下字符串将 hello world 作为其最常见的两个单词短语 hello world this is hello world hello world repeats thr
  • 你能用 C# 编写一个同样优雅的排列函数吗?

    我非常喜欢这个 6 行解决方案 并尝试在 C 中复制它 基本上 它会排列数组的元素 def permute xs pre if len xs 0 yield pre for i x in enumerate xs for y in perm
  • 找到一个数字所属的一组范围

    我有一个 200k 行的数字范围列表 例如开始位置 停止位置 该列表包括除了非重叠的重叠之外的所有类型的重叠 列表看起来像这样 3 5 10 30 15 25 5 15 25 35 我需要找到给定数字所属的范围 并对 100k 个数字重复该

随机推荐

  • 下载 Laravel 时 Composer 非常慢

    你能帮我吗 我想通过以下方式安装 Laravelcomposer create project laravel laravel进入cms目录 但 Composer 下载它非常非常慢 你能帮我看看如何增强它吗 这是我的终端 saidalo S
  • Bootstrap Datetimepicker设置日期

    我正在使用一个日期时间选择器 http eonasdan github io bootstrap datetimepicker 来自 Eonasdan 到目前为止效果很好 我有一个像这样的 HTML 元素 div div 并使用 datet
  • Win32 (GDI) - 设置静态控件的不透明度

    我正在使用 C 无 MFC 或 GDI 我想要的是将子窗口的不透明度设置为 100 我的子窗口是STATIC控制 我想知道这是否可能 如果可以 有人可以指出我如何做到这一点的正确方向 这是我的设置 我创建我的父窗口如下 HWND hWnd
  • 有没有办法在远程主机上运行 Selenium 测试?

    我想运行以下设置 on host 1 执行一些 Selenium 测试 on host 2 运行火狐浏览器 On host 1将有一个 Jenkins 实例运行测试并且host 2将是一个运行在上面的 Docker 容器host 1 并且
  • 折叠卡打开然后立即再次关闭

    我读过以前的帖子 讨论了导航栏和菜单的这个问题 但它似乎并不适用 我有一个非常简单的例子 两张卡 一张默认打开 另一张折叠 当我尝试按卡 2 按钮展开第二张卡时 它会打开 但随后立即再次关闭 我不确定我做错了什么 这里的例子 div div
  • PHP:反洪水/垃圾邮件系统

    我实际上正在开发一个 PHP 项目 该项目将具有用户系统 登录 注册 将丢失的密码发送到电子邮件 我认为这可能非常容易受到暴力攻击和 或垃圾邮件 发送某人电子邮件的密码 例如 1000 次等 请使用您的幻想 当今的网络服务器 Apache
  • HtmlAgilityPack 获取页面标题和 H1 标签

    嘿 我正在尝试通过执行以下操作从网页获取页面标题和 H1 标签 doc LoadHtml htmlSourceCode txtTitle Text doc GetElementsByTagName title InnerText txtH1
  • IExpando 是什么以及它在哪里使用?

    我正在使用反射器浏览 mscorlib 中的类型 就像你一样 并遇到了IExpando接口 http msdn microsoft com en us library system runtime interopservices expan
  • Swift:在 switch 语句中测试类类型

    在 Swift 中 您可以使用 is 检查对象的类类型 如何将其合并到 开关 块中 我认为这是不可能的 所以我想知道解决这个问题的最佳方法是什么 你绝对可以使用is in a switch堵塞 请参阅 Swift 编程语言中的 Any 和
  • 我应该定义默认构造函数吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 所以我们正在进行一些同行评审 这个小小的分歧出现了 即使默认构造函数什么也不做 是否应该定义它 还是应该让编译器定义它 到目前为止 双方都无法拿
  • 如何实现GMail中聊天窗口的弹出功能?

    我并不是在寻找完整的实施 我更感兴趣的是他们是如何做到的 我知道他们使用 GWT 但我想要一个更底层的答案 天真地 我会首先想到当您单击弹出链接时 他们只是打开一个新窗口并将内容复制到其中 有很多原因导致效果不佳 所以我想知道是否有人知道或
  • C++。为什么 std::cout << char + int 打印 int 值?

    比方说 我们有 char x a int y 1 所以 如果你运行 std cout lt lt x y 它打印 98 而不是 b 正如我所见here http www cplusplus com reference ostream ost
  • 有没有同时支持 Microsoft Office 和 Open Office 的 Java 库?

    Apache POI 支持 Microsoft Office JExcelApi 支持 Open Office 那么有没有同时支持 Microsoft Office 和 Open Office 的 Java 库呢 注 在pom xml在文件
  • R:从下对角线创建对称矩阵[重复]

    这个问题在这里已经有答案了 我有一个矩阵的下三角 我试图将其转换为 dissim 矩阵 因此它需要是对称的 print rdf X0 X1 X2 X3 X4 0 0 0000000 NA NA NA NA 1 0 5340909 0 000
  • 计算文本文件中单词列表的出现次数

    我有两个文本文件 File1 如下所示 apple dog cat File2 看起来像这样 appledogtree dog catapple apple00001 我想计算 File1 中的单词列表在 File2 中出现的次数 并得到如
  • Logstash 输出到 AWS EC2 上的 Elasticsearch

    我在配置 Logstash 以输出到 AWS EC2 上的 Elasticsearch 集群时遇到问题 我正在使用 Logstash 版本 1 1 5 和 Elasticsearch 1 19 8 这是我在logstash中的输出配置 ou
  • SQL 开发人员:为其他用户生成数据库文档

    我的数据库中有一个管理员用户 管理员用户可以访问所有数据库对象 我没有管理员用户的凭据 我的应用程序还具有普通用户 该用户对管理员用户的许多对象具有访问权限 选择 删除授权等 因此 在 SQL 开发人员中 当我使用普通用户创建连接时 我可以
  • 我可以在不创建临时数组的情况下移动 NSMutableArray 中的对象吗?

    我以为我已经拥有了 void shiftArray NSMutableArray mutableArray NSUInteger shift for NSUInteger i 0 i lt mutableArray count i NSUI
  • 如何增加 Android 应用程序的堆大小?

    我正在编写一个使用多个 3D 模型的 Android 应用程序 这种带有纹理的模型会占用大量内存 我发现制造商对应用程序可以使用的堆大小设置了限制 例如我的平板电脑三星 Galaxy Tab 8 9 P7310 可以占用 64MB 内存 有
  • 解决非图(绘图方块)

    今天是星期五下午 让我们来解决一个有趣的谜题 算法问题 我最喜欢的任天堂 DS 游戏之一是绘图方块 DS http en wikipedia org wiki Picross Ds 游戏非常简单 它涉及解决称为连线图 http en wik