问题标签 [crossword]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
148 浏览

c# - 获取空白文本框的数量

我正在编写 crossWord 程序 首先,用户必须输入一个数字 "n" ,并创建一个 * n 表,其中包含白色和空白的 TextBoxes。建好表格后,用户点击几个房子,房子的背景颜色变成黑色。

我的问题是在此步骤之后,黑色的文本框有多少,白色的文本框有多少,如何检测水平或垂直列中没有任何黑色的连续白色文本框的最大数量,以粘贴匹配的单词给他们!

在此处输入图像描述

在上表中,表单必须检测到第二个水平行或第二个垂直行中白色连续文本框的最大值为 5,用户填写后必须在第一行中显示 4 为最大值,然后继续结束...

这是我的代码片段:


所以,现在我使用 LINQ 来获取这样的全白文本框:

我怎样才能得到那些白色且它们的X位置差异不超过20的物品!

0 投票
3 回答
3613 浏览

c# - C#中的类似填字游戏的游戏算法

我正在为我的大学作业做填字游戏。几乎完成了,但这里有一个我无法解决的问题。

我们需要加载一个包含已完成填字游戏的 csv 文件,但我们需要进行一些验证以确保填字游戏文件有效。

约束是:

  1. 词不能重复。
  2. 单词可以水平放置,但只能从左到右排列。
  3. 单词可以垂直放置,但只能从高到低。
  4. 一个水平词必须与一个或多个垂直词相交。
  5. 一个垂直词必须与一个或多个水平词相交。
  6. 每个单词必须由空格或网格边缘分隔。

我已经完成了上述所有限制,但我被困在这里

  1. 你只能有一组连接词,即一组连接词不能与另一组连接词断开。

部分填字游戏文件是这样的:(我无法上传图片,因为缺乏信誉)

…………

到目前为止,我所做的与此有关:

  1. 一个名为 Crozzle 的类代表这个填字游戏文件。其中一个属性是 public List CrozzleWords,它包含文件中的所有单词。

  2. 类名 WordInCrozle 代表 Crozzle 中的每个单词。每个单词都有一个属性来记录交叉点的位置。例如,单词“ROBERT”与单词“BILL”有交集,交集的位置是(int)[0,3],交集处的字母是“B”。

  3. WordInCrozle 类中的单词还有一个属性Direction,表示单词的方向,可以是垂直方向,也可以是水平方向。

这是我的解决方案:

但是当我运行它时,我有一个“System.InvalidOperationException”,它告诉我在执行 foreach 时无法修改 tempWords。

谁能告诉我该怎么做?或者是否有任何算法可以确定填字游戏文件中是否只有一组单词?

0 投票
2 回答
1407 浏览

prolog - 在填字游戏中回溯列表

我正在创建一个程序,它将获取一个单词列表和一个方形的填字游戏样式的空格网格,并返回唯一的解决方案,即填充的填字游戏,使所有单词连贯地组合在一起。网格的大小是任意的,但它始终是正方形。

请参阅此处以获取我正在尝试做的示例: http://en.wikipedia.org/wiki/Fill-In_(puzzle)

我已经把程序的内容放下了。基本上我的第一组谓词采用网格并为每个插槽创建逻辑变量,忽略涂黑的插槽(#s)。然后,我创建了一个大于 1 个槽长的可能单词列表(一个字母长的单词无效)。结果是一个有形状的网格(一个非常简单的例子):

其中每一行从上到下都是“拼图列表”的一个元素,即

将充满自由逻辑变量,如下所示:

列表看起来像(第 0 部分):

然后,以下形式的单词表:

给出,最终解决方案是

到目前为止,我用第 0 部分中的变量填充网格列表,并用可能的词槽填充列表(“槽列表”),其中为每个长度超过的垂直和水平空间字符串创建一个槽长度为 1 个空格(对于此示例):

所以我成功地设置了这些,这样将一个单词统一到插槽列表的一个插槽也会将该单词统一到拼图列表中的匹配变量。

现在,所有的输入都会使得在网格中排列单词的方式总是只有一种(不像这个有两种方式的例子,忽略它),所以完成的程序只会提供一个解决方案(a解决方案是填充的拼图网格)。

单词统一算法应该是:

我将单词统一到插槽的代码如下:

我想要它做的是如果它击中

然后回到开头并重试,但不要使用相同的绑定再次尝试,而是将成功的绑定视为失败并跳过它们,例如:

不幸的是,当它击中

它认为整个事情都是失败的,不会回溯,而是一切都失败了。求解谓词如下:

我填写拼图,获取水平单词槽列表,然后转置拼图并获取垂直单词槽列表(将它们附加到水平单词槽)。然后,我用单词填充槽列表,将填充列表与空槽列表统一(这也将单词统一到拼图网格),然后返回完成的拼图。

如果它无法统一一个单词,我该如何做到这一点,它会回溯并跳过任何成功并尝试另一个选择?我曾想过尝试绑定,然后如果失败,将单词列表随机化并重试,但这对我来说听起来不太符合逻辑......

提前致谢。

0 投票
1 回答
376 浏览

prolog - Generalized solver for crossword puzzle in Prolog

Here is the problem and a specialized version of solution. Learning Prolog: solving a crossword scheme

What I am looking for is a generalized solver using the same model. I think I need to generate those variable names on the fly but I don't know how. I am using swi-prolog.

By generalized solver, I mean a solver capable of solving N by N crossword puzzle, N is NOT predefined.

0 投票
1 回答
152 浏览

c - C将填字游戏水平单词放入新数组

我有一个填满的填字游戏,我想做一个程序来扫描水平单词并将它们放入一个新数组中,填字游戏是 20x20 数组,新数组是 40x20。前任。如果我找到 3 个水平单词,例如:狗、猫、鱼,则 40x20 必须看起来像
狗 --> 第一行
cat
fish
0
...
0 --> 第 40 行
(最大单词为 40,因为 40x20 = 40 行)每个单词一行......到目前为止我所做的并不是那么多......

0 投票
2 回答
391 浏览

prolog - prolog中如何通过input来填充谓词的参数?

我有以下代码:

它用于解决这样的填字游戏:

在此处输入图像描述

代码中默认给出了黑色方块的位置,但是当我想查询填字游戏时,我想找到一种方法来通过输入给出黑色方块的位置。

像这样的东西:

0 投票
3 回答
1280 浏览

prolog - 这个 prolog 填字游戏求解器是如何工作的?

我正在尝试编写一个填字游戏求解器我有这个代码,但我无法理解它的某些部分:

此代码用于解决这样的填字游戏:

在此处输入图像描述

在此处输入图像描述

符号是做什么; -> 用的?

我的主要问题是理解规则、转置more_empty。任何有助于我理解代码的解释将不胜感激。

0 投票
1 回答
865 浏览

string - 从给定的单词生成填字游戏最大化交叉点

是否有一些可行的(即多项式时间)算法从一小部分(约 20 个)单词开始构建一个使交叉点数量最大化(或至少“大”)的填字游戏?或者,如果交叉标准不切实际,是否可以最大化填字游戏的密度(在某种意义上)?

我已经用 Python 写了一个详尽的搜索,但是超过六个单词需要的时间太长了……

另请参阅: 生成填字游戏的算法(但那里的答案虽然不错,但并没有真正解决我的问题)。

0 投票
1 回答
654 浏览

c++ - 填字游戏:读取二维给定数组并沿对角线搜索 C++

这是一个crossword game. 我想对角读取一个数组。我应该在整个二维给定数组中找到一些单词,这个数组从给定文件中读取,它是 n*m 大小;m 并不总是 = n

我怎样才能读取这样对角线给出的 2d:

例子:

这是代码:

0 投票
1 回答
1103 浏览

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

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

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