diff --git a/src/adagrams.js b/src/adagrams.js index 7ec5afc7..8d4ad77a 100644 --- a/src/adagrams.js +++ b/src/adagrams.js @@ -1,15 +1,136 @@ +const LETTER_POOL = { + '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 +}; +let letterList = []; +for (let letter in LETTER_POOL) { + // console.log(`letter ${LETTER_POOL[letter]}`) + letterList += letter.repeat(LETTER_POOL[letter]) +} +// console.log(letterList) + + +let randomIndex = (letterList) => { + let index = Math.floor(Math.random() * letterList.length); + return letterList[index]; + }; + + export const drawLetters = () => { // Implement this method for wave 1 + let selectedLetters = []; + + + + while (selectedLetters.length < 10) { + + + + let chosenLetter = randomIndex(letterList); + if (selectedLetters.reduce((count, letter) => count + (letter === chosenLetter ? 1 : 0), 0) < LETTER_POOL[chosenLetter]){ + selectedLetters.push(chosenLetter);} + // console.log(selectedLetters);} + else { + continue; + } + + } + return selectedLetters; + }; + +// console.log(drawLetters()) + export const usesAvailableLetters = (input, lettersInHand) => { // Implement this method for wave 2 + + let clone = [...lettersInHand] + + for (let character of input.toUpperCase()){ + if (clone.includes(character)===true){ + let cloneIndex = clone.indexOf(character) + clone.splice(cloneIndex, 1) + } else { + return false + } + } + + return true }; + export const scoreWord = (word) => { - // Implement this method for wave 3 + let wordScore = 0; + const scores = {"A" : 1, "E": 1, "I": 1, "O": 1, "U": 1 ,"L": 1, "N": 1, "R": 1, "S": 1, "T": 1, "D": 2, "G": 2,"B": 3, "C": 3, "M": 3, "P": 3, "F": 4, "H": 4, "V": 4, "W": 4, "Y": 4,"K": 5, "J": 8, "X":8 ,"Q": 10, "Z": 10}; + + if (word === ""){ + return wordScore; + } + + if (word.length < 1){ + return wordScore; + } + + for (let letter of word.toUpperCase()){ + wordScore += scores[letter]} + if (word.length >= 7){ + wordScore += 8} + + + return wordScore; + }; +// console.log(scoreWord("word")) + export const highestScoreFrom = (words) => { - // Implement this method for wave 4 + let winningWord = ''; + + let highestScore = 0; + for (let word of words){ + let wordScore = scoreWord(word); + + if (wordScore > highestScore){ + highestScore = wordScore; + winningWord = word; + } + else if (wordScore === highestScore) { + if (winningWord.length === 10){ + continue; + } + else if (word.length < winningWord.length && winningWord.length != 10){ + winningWord = word; + } + else if (word.length === 10 && winningWord.length != 10){ + winningWord = word + } + } + } + + return {"score": highestScore, "word": winningWord} }; diff --git a/test/adagrams.test.js b/test/adagrams.test.js index 1a0dc94e..8aa0793f 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", () => {