Javascript 单词搜索解算器
我试着做一个单词搜索解算器。 因此,这个工具的目的是计算给定的单词在这个项目的网格a.k.a数组中出现的次数。但当我编写一个垂直检查的代码时,我被卡住了,它说“TypeError:无法读取未定义的属性'3'” 这是密码Javascript 单词搜索解算器,javascript,arrays,wordsearch,Javascript,Arrays,Wordsearch,我试着做一个单词搜索解算器。 因此,这个工具的目的是计算给定的单词在这个项目的网格a.k.a数组中出现的次数。但当我编写一个垂直检查的代码时,我被卡住了,它说“TypeError:无法读取未定义的属性'3'” 这是密码 var baris = [3]; var kolom = [8]; var kata = ["zpw"]; var puzzle= [ ["z","x","x","r","r","r","f","z"], ["p","l","q","z","h","h","r","p"]
var baris = [3];
var kolom = [8];
var kata = ["zpw"];
var puzzle= [
["z","x","x","r","r","r","f","z"],
["p","l","q","z","h","h","r","p"],
["w","o","l","p","p","o","o","w"]
];
var i;
var k;
var l;
var x;
var y;
var r=0;//left-right
var s=0;//right-left
var t=0;//up-down
var u=0;//down-up
var z=0;
var a=0;
var n=0;
var p=0;
function vertical() {
for (i=0;i<baris.length;i++) {
for(k=p;k<(baris[i]+baris[i-1] ||baris[i]);k++ ) {
for(l=0; l<kolom[i];l++) {
if(puzzle[k][l] == kata[i].charAt(0)) { //up-down CHECKER
for(y=1;y<kata[i].length ;y++) {
if(kata[i].charAt(y) == puzzle[k+y][l]) {
n=n+1;
console.log(n);
}
}
if(n==kata[i].length-1) {
t=t+1;
}
n=0;
}
}
//console.log(t);
}
t=0;
u=0;
p=p+baris[i];
}
}
vertical();`
var baris=[3];
var kolom=[8];
var kata=[“zpw”];
变量谜题=[
[“z”、“x”、“x”、“r”、“r”、“f”、“z”],
[“p”、“l”、“q”、“z”、“h”、“h”、“r”、“p”],
[“w”、“o”、“l”、“p”、“p”、“o”、“o”、“w”]
];
var i;
var-k;
变种l;
var x;
变量y;
var r=0//左右的
var s=0//左右
var t=0//上下
var u=0//向下
var z=0;
var a=0;
var n=0;
var p=0;
函数垂直(){
对于(i=0;i我想你需要的是“清洁”代码,只需考虑算法,写在纸上,画在纸上,再思考,然后创建原型,然后重构,这样您就可以将算法划分为独立的函数。作为回报,您将获得更多更少的理解代码,这将是灵活的,真正的调试,准备改进和扩展
如我所见,你需要的东西将:
从二维数组创建普通数组(或字符串)
检查是否存在子字符串(或验证),它必须支持具有自定义字符偏移量的单词(因为原始数组是2D)
检查子串连接的所有可能性
以下是仓促编写的代码,没有任何“傻瓜保护”,只适用于行大小相同的“谜题”,可能会非常慢:
// Join a 2D array into a plain string.
function Join2DArray(array){
var val = ""
for(var i = 0; i < array.length; i++)
val += array[i].join("")
return val
}
// Check if substring exists at given position with given letters offset.
function IsSubstring(str, subStr, pos, inc){
var j = 0;
for(var i = pos; i < str.length, j < subStr.length; i += inc, j++)
if (str.charAt(i) != subStr.charAt(j)) return false
if (j < subStr.length) return false
return true
}
// Find all horizontal left->right and vertical up->down words.
function GetWordCount(array2D, word){
var rowCount = array2D.length
var rowSize = array2D[0].length
var string = Join2DArray(array2D)
var wordLen = word.length
var wordCount = 0;
// Search in rows
for(var j = 0; j < rowCount; j++)
for (var i = 0; i <= rowSize - wordLen; i++)
wordCount += IsSubstring(string, word, j * rowSize + i, 1)
// Search in columns
for(var i = 0; i < rowSize; i++)
for(var j = 0; j <= rowCount - wordLen; j++)
wordCount += IsSubstring(string, word, j * rowSize + i, rowSize)
return wordLen > 1 ? wordCount : wordCount / 2
}
var puzzle = [['H', 'E', 'L', 'L', 'O'],
['E', ' ', ' ', ' ', ' '],
['L', ' ', ' ', 'B', ' '],
['L', 'I', 'B', 'R', 'O'],
['O', ' ', ' ', 'O', ' ']]
console.log("HELLO: " + GetWordCount(puzzle, "HELLO")); // 2
console.log("BRO: " + GetWordCount(puzzle, "BRO")); // 2
console.log("LIBRO: " + GetWordCount(puzzle, "LIBRO")); // 1
console.log("O: " + GetWordCount(puzzle, "O")); // 4
//将二维数组连接到普通字符串中。
函数Join2DArray(数组){
var val=“”
对于(var i=0;i右和垂直向上->向下的单词。
函数GetWordCount(array2D,word){
var rowCount=array2D.length
var rowSize=array2D[0]。长度
var string=Join2DArray(array2D)
var wordLen=word.length
var-wordCount=0;
//按行搜索
对于(var j=0;j 对于(var i=0;i)当您在调试器中单步执行此代码时,哪一行抛出错误?该行上的值是什么?您希望这些值或该行代码做什么?为什么?