首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用jquery的拼接类型的单词检查器

使用jquery的拼接类型的单词检查器
EN

Stack Overflow用户
提问于 2019-05-28 23:41:41
回答 2查看 110关注 0票数 -1

我正在尝试创建一个使用jQuery的Boggle型单词检查器的变体。不同的是,一个字母可以多次使用,并且黑板始终是两行。

我一直使用一分为二的字符串作为'board',并使用递归函数来搜索给定的单词。我看过类似的例子,但似乎不能正确地编写函数。

例如,如果电路板字符串为OMRAWNLET。棋盘应该是这样的:

代码语言:javascript
复制
O M R A W  
N L E T    

如果要搜索的单词是watermelon,它将返回true。有没有人可以指导我或者写这个函数?谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-29 02:18:48

我会用一个二维数组来表示棋盘,用一个字母数组来表示单词。这是一个快速原型:

代码语言:javascript
复制
var isWordOnTheBoard = function(board, word) {
    var passedTest = true;
    var previousLetterCoordinates;
    
    //written as a loop; rewrite to use recursion
    for (let letter of word) {
        // console.log('current letter is ' + letter);
        var letterCoordinates = getCoordinatesOnTheBoard(board, letter);
        if(!letterCoordinates){
            passedTest = false;
            console.log('letter ' + letter + ' is not on the board');
            break;
        }
        if(previousLetterCoordinates && !areNeighbors(previousLetterCoordinates, letterCoordinates)){
            passedTest = false;
            console.log('letter ' + letter + ' is not a neighbor to the previous letter');
            break;
        }
        previousLetterCoordinates = letterCoordinates;
    }
    return passedTest;
};

//assumes letters on the board are unique with no repeated letters
var getCoordinatesOnTheBoard = function(board, letter) {
    //undefined means letter is not on the board
    var coordinates;
    
    var firstRowIndex = board[0].indexOf(letter);
    if(firstRowIndex >= 0){
        coordinates = {
            row: 0,
            column: firstRowIndex
        };
    }
    
    var secondRowIndex = board[1].indexOf(letter);
    if(secondRowIndex >= 0){
        coordinates = {
            row: 1,
            column: secondRowIndex
        };
    }
    
    
    return coordinates;
}
//neighbors of a:
// | NW | N | NE |
// | W  | a | E  |
// | SW | S | SE |
// where NW is North West, N is North, NE is North East and so on

var areNeighbors = function(a, b) {
    var nw_of_a = {
        row: a.row - 1,
        column: a.column - 1
    }
    if (JSON.stringify(b) === JSON.stringify(nw_of_a)){return true}
    var n_of_a = {
        row: a.row - 1,
        column: a.column
    }
    if (JSON.stringify(b) === JSON.stringify(n_of_a)){return true}
    
    var ne_of_a = {
        row: a.row - 1,
        column: a.column + 1
    }
    if (JSON.stringify(b) === JSON.stringify(ne_of_a)){return true}
    
    var e_of_a = {
        row: a.row,
        column: a.column + 1
    }
    if (JSON.stringify(b) === JSON.stringify(e_of_a)){return true}
    
    var se_of_a = {
        row: a.row + 1,
        column: a.column + 1
    }
    if (JSON.stringify(b) === JSON.stringify(se_of_a)){return true}
    
    var s_of_a = {
        row: a.row + 1,
        column: a.column
    }
    if (JSON.stringify(b) === JSON.stringify(s_of_a)){return true}
    
    var sw_of_a = {
        row: a.row + 1,
        column: a.column - 1
    }
    if (JSON.stringify(b) === JSON.stringify(sw_of_a)){return true}
    
    var w_of_a = {
        row: a.row,
        column: a.column - 1
    }
    if (JSON.stringify(b) === JSON.stringify(w_of_a)){return true}
    
    return false;
}

var omraw_nlet = [
    ['O','M','R','A','W'],
    ['N','L','E','T']
];
var watermelon = ['W', 'A', 'T', 'E', 'R', 'M', 'E', 'L', 'O', 'N'];
var lemon = ['L', 'E', 'M', 'O', 'N'];

console.log(isWordOnTheBoard(omraw_nlet, watermelon)); //true
console.log(isWordOnTheBoard(omraw_nlet, ['W', 'A', 'R'])); //true
console.log(isWordOnTheBoard(omraw_nlet, lemon)); //true
console.log(isWordOnTheBoard(omraw_nlet, lemon.concat(['S']))); //false
console.log(isWordOnTheBoard(omraw_nlet, ['T', 'E', 'N'])); //false

票数 1
EN

Stack Overflow用户

发布于 2019-05-29 02:56:15

如果你只想根据黑板上的字母检查输入的单词是否有效,你可以很简单地这样做。只需将字母作为数组传递并作为字符串输入即可。从那里,只需通过输入逐个字母地搜索,看看它是否在字母数组中。

代码语言:javascript
复制
function validate_input(letters, input){
input = input.toUpperCase();

  var errors = input.split("").filter(function(letter){
    return (letters.indexOf(letter) == -1);
  });

 return (errors == "");
}

var letters = ["O","M","R","A","W","N","L","E","T"];

console.log(validate_input(letters, "lemfon"));
console.log(validate_input(letters, "watermelon"));

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56345738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档