-1

我试图制作一个单词搜索求解器。所以这个工具的目的是计算给定的单词在这个项目的网格(也就是数组)中出现了多少次。但是当我编写代码进行垂直检查时卡住了,它说“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"],
  ["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();`

希望大家帮忙找出问题。非常感谢。

4

1 回答 1

0

我想你需要的是编写一个“干净”的代码,想想算法,写在纸上,画在纸上,再想一想,然后创建原型,然后重构,这样你就可以将算法划分为独立的独立函数. 作为奖励,您将获得更少的理解代码,这些代码将是灵活的、可实际调试的、随时可以改进和扩展的。

如我所见,您将需要以下内容:

  1. 从二维数组创建一个普通数组(或字符串)。
  2. 检查是否有子字符串(或验证),它必须支持具有自定义字符偏移量的单词(因为原始数组是二维的)。
  3. 检查子串连接的所有可能性。

这是仓促编写的代码,没有任何“傻瓜保护”,仅适用于具有相同行大小的“拼图”,并且可能非常慢:

// 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
于 2017-12-10T17:27:35.993 回答