从随机字母创建有效单词

时间:2012-04-30 11:20:34

标签: javascript jquery

这有点儿谜题 - 我为我的孩子创造了一个与Bookworm和Wordsworth没有什么不同的小游戏。从字母表中随机选择49个字母(存储在数组中),孩子们点击相邻的字母来制作单词。有一个检查将单词与字典文件(也在数组中)匹配,如果单词有效,则所选字母将在网格中替换为更多随机字母。到目前为止都很好。

我接下来要做的是检查网格,看看是否还有任何有效的单词,如果你愿意,可以选择一种游戏。问题是我不知道从哪里开始!

网格中的字母可以很容易地放入一个数组中,但是我缺乏计算jQuery或javascript代码的技能,可以检查网格中的有效单词(记住字母必须与每个字母相邻)其他)。字母显示在DIV元素中而不是表格中。

到目前为止,我只是设法在多个循环中锁定浏览器,问题只会加剧,因为每次正确找到一个单词并替换网格中的字母时,代码都需要运行。

我知道这更像是一个问题解决实验,而不是编码问题,所以如果这篇文章在这里违反了任何规则,我很抱歉,但有没有人知道如何最好地解决这个问题?

干杯BS

1 个答案:

答案 0 :(得分:1)

首先获取一行的所有字母。然后将第一个字母复制到一个字符串中,并将其与字典进行比较。接下来你拿两个第一个字母并做同样的事情。当你达到7个字符长度时,你取6个最后一个字母并将它与字典进行比较。当您完成该行中的所有检查后,请转到下一行。完成所有行后,对柱进行相同的操作。

psuedo代码:

for ($currentCollumn=1; $gridWidth > $currentCollumn; $currentCollumn++) {
    $collumn = get collumn as string
    for ($i=1;$i!=7;$i++) {
        get first $i characters of $collumn and compare to dictionary
        }
    for ($i=1;$i!=7;$i++) {
        get last $i characters of $collumn and compare to dictionary
        }
}

for ($currentRow=1; $gridHeight > $currentRow; $currentRow++) {
    $row = get row as string
    for ($i=1;$i!=7;$i++) {
        get first $i characters of $row and compare to dictionary
        }
    for ($i=1;$i!=7;$i++) {
        get last $i characters of $row and compare to dictionary
        }
}

编辑:版本2,因为我没有意识到这些词不仅限于直线。

从每个可能的位置开始。

// define variables:
booleanArray path[x][y] = false;  
p = pointerlocation;  
stack[] = p;  
currentString = "";  

p.up / .down / .left / .right检查路径[] [],其中分别为y + 1,y-1,x + 1,x-1。如果它超出界限,它将返回false。

stack []的工作方式类似于x86堆栈。最后,先出。
push()将新对象添加到堆栈上 pop()获取添加到堆栈的最后一个对象并将其从堆栈中删除

function getAllTheStrings(p.x, p.y) {
    while (p) {
        path (p.x, p.y) = true;
        currentString += p.getCharacter();
        // check neighbors
        if (p.up) {
           stack.push(p.up, path, currentString);
        } 
        if (p.down) {
           stack.push(p.down, path, currentString);
        } 
        if (p.left) {
           stack.push(p.left, path, currentString);
        } 
        if (p.right) {
           stack.push(p.right, path, currentString);
        }
        // add current string to list possible words
        foundWords.push(currentString);

        // pop next item from stack
        overwrite variables with stored values of: p, path, currentString

        if (stack is empty) {
        p = false; // end loop
        }
    }
}

这将被称为:

function getWords() {
    for ($y=1; $gridHeight > $y; $y++) {
        for ($x=1; $gridWidth > $x; $x++) {
            getAllTheStrings(x,y);
        }
}

此功能与网格大小的关系非常差,因为它必须检查每个可能路径的组合。 1x1网格将进行一次测试。 2x2需要28次测试。在3x3时,我在大约270次测试时失去了计数。

循环结束后foundWords将逐字逐句检查整个字典。在字典中找到5个单词和100个单词将进行500次比较。实际上,这本词典至少有一千个单词。

相关问题