【问题标题】:Boggle type word checker using jquery使用 jquery 的 Boggle 类型单词检查器
【发布时间】:2019-10-14 04:34:32
【问题描述】:

我正在尝试使用 jQuery 创建一个 Boggle 类型的单词检查器的变体。不同之处在于一个字母可以多次使用,而黑板总是两行。

我一直在使用一个分成两半的字符串作为“板”,并使用递归函数来搜索给定的单词。我看过类似的例子,但似乎无法正确编码函数。

例如,如果板字符串是OMRAWNLET。董事会看起来像:

O M R A W  
N L E T    

如果要搜索的单词是watermelon,它将返回true。谁能指导我或编写函数?谢谢。

【问题讨论】:

  • Stack Overflow 不是代码编写服务。我们总是很乐意帮助和支持新的编码人员,但您首先需要通过对该主题进行一些研究并尝试编写代码来帮助自己。如果您对该代码有疑问,请随时提出问题以寻求调试帮助。请阅读How to create a Minimal, Complete, and Verifiable example
  • 很抱歉没有发布我尝试的代码。我想我只是很尴尬。

标签: javascript jquery recursion


【解决方案1】:

我会为板子使用一个二维数组,为单词使用一个字母数组。 这是一个快速原型:

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

【讨论】:

  • 感谢您花时间编写此代码。它将帮助我进一步了解 Java。
【解决方案2】:

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

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"));

【讨论】:

    猜你喜欢
    • 2021-07-05
    • 1970-01-01
    • 2017-12-30
    • 1970-01-01
    • 2018-12-20
    • 2011-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多