From e14669a479e042efb20a87ac85f02354e7f16916 Mon Sep 17 00:00:00 2001 From: Max Wehmeier <wehmeirm@hu-berlin.de> Date: Tue, 23 Mar 2021 14:28:09 +0100 Subject: [PATCH] added _isCorrect and _isClose --- client/logic/SkribblServer.js | 119 +++++++++++++++++++++++++++++++++- 1 file changed, 116 insertions(+), 3 deletions(-) diff --git a/client/logic/SkribblServer.js b/client/logic/SkribblServer.js index f6a36a2..6a7f06d 100644 --- a/client/logic/SkribblServer.js +++ b/client/logic/SkribblServer.js @@ -266,12 +266,125 @@ export default class SkribblServer { } /** - * Checks whether a given guess is close to the given word. + * Checks whether a given guess is close to the given word. A guess counts as close, if one letter is wrong, + * two letters are swapped or the guess has one letter too much or too little. * @param {string} guess * @param {string} word - * @todo implement */ - static _isClose(guess,word){ + static _isClose(guess,word) { + guess = guess.toLowerCase(); + word = word.toLowerCase(); + word.replace(/-/g," "); + guess.replace(/-/g," "); + + //if equal + if (guess == word) { + return true; + } + + //either one letter wrong or two letters swapped + if (guess.length == word.length) { + let wordArray = []; + let guessArray = []; + + //makes the string into an array + for (var i = 0; i < word.length; i++) { + wordArray[i] = word.charAt(i); + guessArray[i] = guess.charAt(i); + } + + //Counts the mistakes and their position + let errorCounter = 0; + let errorPos = 0; + + for (var i = 0; i < wordArray.length; i++) { + if (wordArray[i] != guessArray[i]) { + if (errorCounter == 0) { + errorPos = i; + } if (errorCounter == 1) { //if a second mistake occurs, either the letters are swapped or it is not correct + //but there could be a third mistake, so in the case of a swap, true is not directly returned. + if ((wordArray[i] != guessArray[errorPos]) || (wordArray[errorPos] != guessArray[i])) { + return false; + } + } if (errorCounter >= 2) { //with two or more mistakes, the word is not close + return false; + } + errorCounter++; + } + } + + //if it hasnt returned false by now, the guess is close + return true; + } + + //if one letter too much + if (guess.length - 1 == word.length) { + let wordArray = []; + let guessArray = []; + + for (var i = 0; i < word.length; i++) { + wordArray[i] = word.charAt(i); + guessArray[i] = guess.charAt(i); + } + guessArray[guessArray.length] = guess.charAt(guessArray.length); + + let errorCounter = 0; //also the offset + + for (var i = 0; i < wordArray.length; i++) { + if (wordArray[i] != guessArray[i + errorCounter]) { + errorCounter++; + if (errorCounter >= 2) { + return false; + } + } + } + + return true; + } + + //if one letter too little + if (guess.length + 1 == word.length) { + let wordArray = []; + let guessArray = []; + + for (var i = 0; i < guess.length; i++) { + wordArray[i] = word.charAt(i); + guessArray[i] = guess.charAt(i); + } + wordArray[wordArray.length] = word.charAt(wordArray.length); + + let errorCounter = 0; //also the offset + + for (var i = 0; i < guessArray.length; i++) { + if (wordArray[i + errorCounter] != guessArray[i]) { + errorCounter++; + if (errorCounter >= 2) { + return false; + } + } + } + + return true; + } + return false; } + + /** + * Checks if the guess is correct. It is not case-sensitive. + * @param {string} guess + * @param {string} word + */ + static _isCorrect(guess, word) { + guess = guess.toLowerCase(); + word = word.toLowerCase(); + word.replace(/-/g," "); + guess.replace(/-/g," "); + + if (guess == word) { + return true; + } else { + return true; + } + } } \ No newline at end of file -- GitLab