From 6893515a68a0e72f8db86422a45443c22c4bee1e Mon Sep 17 00:00:00 2001 From: Ivana Maldonado Date: Tue, 7 Jun 2022 12:13:13 -0400 Subject: [PATCH 1/4] Wave 1 and Wave 2 done. Passed all tests --- .vscode/launch.json | 17 +++++++++++++ src/adagrams.js | 60 +++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 75 insertions(+), 2 deletions(-) create mode 100644 .vscode/launch.json 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..a076cc1c 100644 --- a/src/adagrams.js +++ b/src/adagrams.js @@ -1,9 +1,65 @@ +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, +}; + + export const drawLetters = () => { - // Implement this method for wave 1 + const arrayOfLetters = []; + for (const [letter, quantity] of Object.entries(letterPool)) { + for (let i=0; i { - // Implement this method for wave 2 + + let 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) => { From 40a69c8d7170b81b62d05639b36d17ce500eb4b2 Mon Sep 17 00:00:00 2001 From: Ivana Maldonado Date: Tue, 7 Jun 2022 13:20:34 -0400 Subject: [PATCH 2/4] Finished wave 4. Updated test for function scoreWord. --- src/adagrams.js | 42 ++++++++++++++++++++++++++++++++++++++++-- test/adagrams.test.js | 4 +++- 2 files changed, 43 insertions(+), 3 deletions(-) diff --git a/src/adagrams.js b/src/adagrams.js index a076cc1c..bb6b0e75 100644 --- a/src/adagrams.js +++ b/src/adagrams.js @@ -27,6 +27,35 @@ const letterPool = { 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 = () => { const arrayOfLetters = []; @@ -43,7 +72,7 @@ export const drawLetters = () => { arrayOfLetters.splice(arrayOfLetters.indexOf(currentLetter), 1); } - return currentHand + return currentHand; }; console.log(drawLetters) @@ -63,7 +92,16 @@ export const usesAvailableLetters = (input, lettersInHand) => { }; export const scoreWord = (word) => { - // Implement this method for wave 3 + let totalScore = 0 + + for (let letter of word.toUpperCase()){ + totalScore += letterScores[letter] + } + if (word.length >= 7) { + totalScore += 8 + } + + return totalScore; }; export const highestScoreFrom = (words) => { diff --git a/test/adagrams.test.js b/test/adagrams.test.js index 1a0dc94e..24cc7211 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", () => { From 6d561f3c42c41ac6565dd48c4f9c029db42eb0f1 Mon Sep 17 00:00:00 2001 From: Ivana Maldonado Date: Tue, 7 Jun 2022 15:24:22 -0400 Subject: [PATCH 3/4] Wave 4 complete. Updated test file for Wave 4. --- src/adagrams.js | 41 +++++++++++++++++++++++++++++++---------- test/adagrams.test.js | 4 ++-- 2 files changed, 33 insertions(+), 12 deletions(-) diff --git a/src/adagrams.js b/src/adagrams.js index bb6b0e75..6b13516e 100644 --- a/src/adagrams.js +++ b/src/adagrams.js @@ -59,15 +59,17 @@ const letterScores = { export const drawLetters = () => { const arrayOfLetters = []; - for (const [letter, quantity] of Object.entries(letterPool)) { + + for (let [letter, quantity] of Object.entries(letterPool)) { for (let i=0; i { - let upperCaseWord = input.toUpperCase(); + const upperCaseWord = input.toUpperCase(); for (let letter of upperCaseWord) { if (lettersInHand.includes(letter)) { @@ -92,18 +94,37 @@ export const usesAvailableLetters = (input, lettersInHand) => { }; export const scoreWord = (word) => { - let totalScore = 0 + let totalScore = 0; - for (let letter of word.toUpperCase()){ - totalScore += letterScores[letter] - } 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 24cc7211..9c38913f 100644 --- a/test/adagrams.test.js +++ b/test/adagrams.test.js @@ -135,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") }; @@ -147,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", () => { From d0996e3f5fa26849e8c25fc5c86f278bb645aebc Mon Sep 17 00:00:00 2001 From: Ivana Maldonado Date: Tue, 7 Jun 2022 15:28:57 -0400 Subject: [PATCH 4/4] Fixed sytling errors. --- src/adagrams.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/adagrams.js b/src/adagrams.js index 6b13516e..39b0aeaf 100644 --- a/src/adagrams.js +++ b/src/adagrams.js @@ -113,12 +113,12 @@ export const highestScoreFrom = (words) => { for (let word of words) { const scoreOfWord = scoreWord(word); - if(scoreOfWord > highestScore){ + if (scoreOfWord > highestScore){ highestScore = scoreOfWord; winningWord = word; } else if (scoreOfWord === highestScore) { - if(winningWord.length === 10){ - continue + if (winningWord.length === 10){ + continue; } else if (word.length === 10) { winningWord = word; } else if (word.length < winningWord.length){ @@ -126,5 +126,5 @@ export const highestScoreFrom = (words) => { } } } - return ({"word": winningWord, "score": highestScore }) + return ({"word": winningWord, "score": highestScore}); };