From dc158150c1afe25537953bb7f89f6c511fc44471 Mon Sep 17 00:00:00 2001 From: Shaun Harris Date: Fri, 1 Mar 2024 09:09:48 +0000 Subject: [PATCH 1/3] JS_SCRABBLE --- src/scrabble.js | 145 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 143 insertions(+), 2 deletions(-) diff --git a/src/scrabble.js b/src/scrabble.js index 0d18249..9b35434 100644 --- a/src/scrabble.js +++ b/src/scrabble.js @@ -1,5 +1,146 @@ -function scrabble() { - // write code here +const lettersValues = { + a: 1, + b: 3, + c: 3, + d: 2, + e: 1, + f: 4, + g: 2, + h: 4, + i: 1, + j: 8, + k: 5, + l: 1, + m: 3, + o: 1, + p: 3, + q: 10, + r: 1, + s: 1, + t: 1, + u: 1, + v: 4, + w: 4, + x: 8, + y: 4, + z: 10 +} + +const scrabble = (word) => { + if (wordValidate(word)) { + let lowerCaseWord = word.toLowerCase() + let wordScoreTally = tallyLetterScores(lowerCaseWord) + let wordScoreDouble = doubleWordRule(lowerCaseWord) + let wordScoreTriple = tripleWordRule(lowerCaseWord) + let totalScore = tallyFinalScores( + wordScoreTally, + wordScoreDouble, + wordScoreTriple + ) + return totalScore + } else { + return 0 + } +} + +const wordValidate = (word) => { + let openingBrace = 0 + let closingBrace = 0 + let openingBracket = 0 + let closingBracket = 0 + + if (word === null) { + return false + } + + let lowerCaseWord = word.toLowerCase() + + for (let i = 0; i < lowerCaseWord.length; i++) { + if ( + Object.keys(lettersValues).includes(lowerCaseWord[i]) || + lowerCaseWord[i] === '{' || + lowerCaseWord[i] === '}' || + lowerCaseWord[i] === '[' || + lowerCaseWord[i] === ']' + ) { + switch (lowerCaseWord[i]) { + case '{': + openingBrace++; + break; + case '}': + closingBrace++; + break; + case '[': + openingBracket++; + break + case ']': + closingBracket++; + break; + } + } else { + return false + } + } + + if (openingBrace !== closingBrace || openingBracket !== closingBracket) { + return false + } else { + return true + } +} + +const tallyLetterScores = (word) => { + let wordScoreSingle = 0 + let wordScoreDouble = 0 + let wordScoreTriple = 0 + + for (let i = 0; i < word.length; i++) { + if ( + word[i] === '{' || + word[i] === '}' || + word[i] === '[' || + word[i] === ']' + ) { + continue + } + if (word[i - 1] === '{' && word[i + 1] === '}') { + wordScoreDouble += (lettersValues[word[i]] * 2) + } else if (word[i - 1] === '[' && word[i + 1] === ']') { + wordScoreTriple += (lettersValues[word[i]] * 3) + } else { + wordScoreSingle += lettersValues[word[i]] + } + } + return wordScoreSingle + wordScoreDouble + wordScoreTriple +} + +const doubleWordRule = (word) => { + for (let i = 0; i < word.length; i++) { + if (word[i] === '{' && word[i + 2] !== '}') { + return true + } + } + return false +} + +const tripleWordRule = (word) => { + for (let i = 0; i < word.length; i++) { + if (word[i] === '[' && word[i + 2] !== ']') { + return true + } + } + return false +} + +const tallyFinalScores = (lettersValue, scoreDouble, scoreTriple) => { + if (scoreDouble && scoreTriple) { + return (lettersValue *= 6) + } else if (scoreDouble) { + return (lettersValue *= 2) + } else if (scoreTriple) { + return (lettersValue *= 3) + } + return lettersValue } module.exports = scrabble From 11921f2685533f6c47d3b46d1bc8af7a76ad5c3a Mon Sep 17 00:00:00 2001 From: Shaun Harris Date: Fri, 1 Mar 2024 10:59:39 +0000 Subject: [PATCH 2/3] JS_SCARBBLE_V2 --- src/scrabble.js | 48 +++++++++++++++++++++++------------------------- 1 file changed, 23 insertions(+), 25 deletions(-) diff --git a/src/scrabble.js b/src/scrabble.js index 9b35434..9bb61a5 100644 --- a/src/scrabble.js +++ b/src/scrabble.js @@ -27,33 +27,28 @@ const lettersValues = { } const scrabble = (word) => { - if (wordValidate(word)) { - let lowerCaseWord = word.toLowerCase() - let wordScoreTally = tallyLetterScores(lowerCaseWord) - let wordScoreDouble = doubleWordRule(lowerCaseWord) - let wordScoreTriple = tripleWordRule(lowerCaseWord) - let totalScore = tallyFinalScores( - wordScoreTally, - wordScoreDouble, - wordScoreTriple - ) - return totalScore + if (validateWord(word)) { + const lowerCaseWord = word.toLowerCase() + const wordScoreTally = tallyLetterScores(lowerCaseWord) + const wordScoreDouble = doubleWordRule(lowerCaseWord) + const wordScoreTriple = tripleWordRule(lowerCaseWord) + return tallyFinalScores(wordScoreTally, wordScoreDouble, wordScoreTriple) } else { return 0 } } -const wordValidate = (word) => { +const validateWord = (word) => { let openingBrace = 0 let closingBrace = 0 let openingBracket = 0 let closingBracket = 0 - if (word === null) { + if (!word) { return false } - let lowerCaseWord = word.toLowerCase() + const lowerCaseWord = word.toLowerCase() for (let i = 0; i < lowerCaseWord.length; i++) { if ( @@ -65,17 +60,17 @@ const wordValidate = (word) => { ) { switch (lowerCaseWord[i]) { case '{': - openingBrace++; - break; + openingBrace++ + break case '}': - closingBrace++; - break; + closingBrace++ + break case '[': - openingBracket++; + openingBracket++ break case ']': - closingBracket++; - break; + closingBracket++ + break } } else { return false @@ -94,6 +89,9 @@ const tallyLetterScores = (word) => { let wordScoreDouble = 0 let wordScoreTriple = 0 + const multiplyByTwo = 2 + const multiplyByThree = 3 + for (let i = 0; i < word.length; i++) { if ( word[i] === '{' || @@ -104,9 +102,9 @@ const tallyLetterScores = (word) => { continue } if (word[i - 1] === '{' && word[i + 1] === '}') { - wordScoreDouble += (lettersValues[word[i]] * 2) + wordScoreDouble += lettersValues[word[i]] * multiplyByTwo } else if (word[i - 1] === '[' && word[i + 1] === ']') { - wordScoreTriple += (lettersValues[word[i]] * 3) + wordScoreTriple += lettersValues[word[i]] * multiplyByThree } else { wordScoreSingle += lettersValues[word[i]] } @@ -136,9 +134,9 @@ const tallyFinalScores = (lettersValue, scoreDouble, scoreTriple) => { if (scoreDouble && scoreTriple) { return (lettersValue *= 6) } else if (scoreDouble) { - return (lettersValue *= 2) + return (lettersValue *= multiplyByTwo) } else if (scoreTriple) { - return (lettersValue *= 3) + return (lettersValue *= multiplyByThree) } return lettersValue } From fce974c4c1167405dfa14d7ce83291ea5483e05f Mon Sep 17 00:00:00 2001 From: Shaun Harris Date: Fri, 1 Mar 2024 16:02:05 +0000 Subject: [PATCH 3/3] JS_SCRABBLE_PASSED --- src/scrabble.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/scrabble.js b/src/scrabble.js index 9bb61a5..da589d2 100644 --- a/src/scrabble.js +++ b/src/scrabble.js @@ -12,6 +12,7 @@ const lettersValues = { k: 5, l: 1, m: 3, + n: 1, o: 1, p: 3, q: 10, @@ -49,7 +50,7 @@ const validateWord = (word) => { } const lowerCaseWord = word.toLowerCase() - + console.log(lowerCaseWord) for (let i = 0; i < lowerCaseWord.length; i++) { if ( Object.keys(lettersValues).includes(lowerCaseWord[i]) || @@ -83,6 +84,7 @@ const validateWord = (word) => { return true } } +console.log(validateWord('OXYPHENBUTAZON')) const tallyLetterScores = (word) => { let wordScoreSingle = 0 @@ -91,7 +93,6 @@ const tallyLetterScores = (word) => { const multiplyByTwo = 2 const multiplyByThree = 3 - for (let i = 0; i < word.length; i++) { if ( word[i] === '{' || @@ -134,9 +135,9 @@ const tallyFinalScores = (lettersValue, scoreDouble, scoreTriple) => { if (scoreDouble && scoreTriple) { return (lettersValue *= 6) } else if (scoreDouble) { - return (lettersValue *= multiplyByTwo) + return (lettersValue *= 2) } else if (scoreTriple) { - return (lettersValue *= multiplyByThree) + return (lettersValue *= 3) } return lettersValue }