生成填字游戏的高效算法(纽约时报的风格)

时间:2015-07-28 11:50:35

标签: algorithm optimization language-agnostic pseudocode crossword

我想找到一种生成填字游戏的有效方法。我已经阅读了here提到的解决方案。这会生成一个简单的填字游戏,因为我正在寻找一种有效且优化的方法来生成像New York times中的填字游戏。即,当你将拼图旋转180度时,它看起来是一样的(黑色方块保持在同一位置)。在这里,我们可以假设网格最初是生成的,我们可以使用任何超过三个字母的单词。

这样做的最佳方法是什么?我们可以使用哪种搜索算法来减少迭代次数并减少耗时?

1 个答案:

答案 0 :(得分:0)

我从另一个角度为另一个(未完成的)文字游戏解决了这个问题。在我的设计中,如果可以在X轴或Y轴(或两者)上镜像,则选择板。

取一个大小为N的正方形,我使用一个位掩码建立所有可能的网格,取 2 ^ cell count -1 作为最大值。因此,对于网格2x2(4个单元格),请从0 ... 15开始。

  

0 - 空格子

     

1 - 左上角的黑色块

     

2 - 右上角的黑色块

     

3 - 顶行的黑色块

     

     

     

     

15 - 网格充满黑色块

显然,这会产生许多不合适的候选人。我们可以放弃:

  • 行不与中途点的任何一侧匹配的模式 (依此类推)用于Y轴镜像
  • 列不与中途任何一侧匹配的模式 X轴镜像的点(等等)
  • 充满黑色积木的网格
  • 网格范围的模式(第一行,最后一行,第一行 列,最后一列)没有白色块
  • 隔离白色块的模式(*)

我认为我将其运行到大约7x7并且在合理的时间内完成。我没有做到的是选择单词。但是,一旦您对数字进行了碾压,您只需存储每个网格大小的所有候选值,然后每次只创建新的填字游戏。

(*) - 对于我写的游戏,这很重要,但我并非100%确定这是填字游戏的要求。在电路板的各个部分上有两个或更多不同的白色方块图案(但这是配置的)我可以认为完全有效。