diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 00000000..4e4015e3 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,17 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "pwa-node", + "request": "launch", + "name": "Launch Program", + "skipFiles": [ + "/**" + ], + "program": "${workspaceFolder}/src/adagrams.js" + } + ] +} \ No newline at end of file diff --git a/src/adagrams.js b/src/adagrams.js index ebc2839c..39b0aeaf 100644 --- a/src/adagrams.js +++ b/src/adagrams.js @@ -1,15 +1,130 @@ +const letterPool = { + A : 9, + B : 2, + C : 2, + D : 4, + E : 12, + F : 2, + G : 3, + H : 2, + I : 9, + J : 1, + K : 1, + L : 4, + M : 2, + N : 6, + O : 8, + P : 2, + Q : 1, + R : 6, + S : 4, + T : 6, + U : 4, + V : 2, + W : 2, + X : 1, + Y : 2, + Z : 1, +}; + +const letterScores = { + 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, + N : 1, + O : 1, + P : 3, + Q : 10, + R : 1, + S : 1, + T : 1, + U : 1, + V : 4, + W : 4, + X : 8, + Y : 4, + Z : 10, +}; + + export const drawLetters = () => { - // Implement this method for wave 1 + const arrayOfLetters = []; + + for (let [letter, quantity] of Object.entries(letterPool)) { + for (let i=0; i { - // Implement this method for wave 2 + + const upperCaseWord = input.toUpperCase(); + + for (let letter of upperCaseWord) { + if (lettersInHand.includes(letter)) { + lettersInHand.splice(lettersInHand.indexOf(letter), 1); + } else { + return false; + } + } + return true; }; export const scoreWord = (word) => { - // Implement this method for wave 3 + let totalScore = 0; + + if (word.length >= 7) { + totalScore += 8 + } + + for (let letter of word.toUpperCase()){ + totalScore += letterScores[letter] + } + return totalScore; }; export const highestScoreFrom = (words) => { - // Implement this method for wave 1 + let highestScore = 0; + let winningWord = ''; + + for (let word of words) { + const scoreOfWord = scoreWord(word); + + if (scoreOfWord > highestScore){ + highestScore = scoreOfWord; + winningWord = word; + } else if (scoreOfWord === highestScore) { + if (winningWord.length === 10){ + continue; + } else if (word.length === 10) { + winningWord = word; + } else if (word.length < winningWord.length){ + winningWord = word; + } + } + } + return ({"word": winningWord, "score": highestScore}); }; diff --git a/test/adagrams.test.js b/test/adagrams.test.js index 1a0dc94e..9c38913f 100644 --- a/test/adagrams.test.js +++ b/test/adagrams.test.js @@ -120,7 +120,9 @@ describe("Adagrams", () => { }); it("returns a score of 0 if given an empty input", () => { - throw "Complete test"; + expectScores({ + '': 0, + }); }); it("adds an extra 8 points if word is 7 or more characters long", () => { @@ -133,7 +135,7 @@ describe("Adagrams", () => { }); }); - describe.skip("highestScoreFrom", () => { + describe("highestScoreFrom", () => { it("returns a hash that contains the word and score of best word in an array", () => { const words = ["X", "XX", "XXX", "XXXX"]; const correct = { word: "XXXX", score: scoreWord("XXXX") }; @@ -145,7 +147,7 @@ describe("Adagrams", () => { const words = ["XXX", "XXXX", "X", "XX"]; const correct = { word: "XXXX", score: scoreWord("XXXX") }; - throw "Complete test by adding an assertion"; + expect(highestScoreFrom(words)).toEqual(correct); }); describe("in case of tied score", () => {