【发布时间】:2011-12-01 00:37:19
【问题描述】:
我想生成特定网格大小的所有唯一填字游戏网格(4x4 是一个很好的大小)。所有可能的谜题,包括非唯一的谜题,都由一个具有网格区域长度的二进制字符串表示(在 4x4 的情况下为 16),因此所有可能的 4x4 谜题都由范围 0 内所有数字的二进制形式表示到 2^16。
生成这些很容易,但我很好奇是否有人有一个好的解决方案来以编程方式消除无效和重复的案例。例如,所有具有单列或单行的谜题在功能上都是相同的,因此消除了这 8 个案例中的 7 个。此外,根据填字游戏惯例,所有方格必须是连续的。我已经成功删除了所有重复的结构,但我的解决方案需要几分钟才能执行,并且可能并不理想。我不知道如何检测连续性,所以如果有人对此有想法,将不胜感激。
我更喜欢 Python 中的解决方案,但可以使用您喜欢的任何语言编写。如果有人愿意,我可以发布我的 python 代码来生成所有网格并删除重复项,虽然它可能很慢。
【问题讨论】:
-
方格可以“聚集在一起”吗?例如。 65535(所有方格都使用)是有效的 4x4 网格吗?
-
@douplep:这绝对是一个有效的网格。不过,我不太确定我理解您的意思 - 邻接规则意味着所有有效的网格必须聚集在一起。
-
另一个问题:单列是否与单行相同。 IE。两个相互旋转/反射的网格是否相同?
-
根据原始帖子,这些将是重复的:> 所有单列或单行的谜题在功能上都是相同的,因此消除了这 8 个案例中的 7 个。
标签: crossword