Skip to content
Snippets Groups Projects
Commit e14669a4 authored by Max Wehmeier's avatar Max Wehmeier
Browse files

added _isCorrect and _isClose

parent 5e6d5f1b
2 merge requests!5Custom server,!2Add isclose iscorrect
...@@ -266,12 +266,125 @@ export default class SkribblServer { ...@@ -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} guess
* @param {string} word * @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; 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
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment