From a623ade036ac5e81a002478991c7acfcf3c445b2 Mon Sep 17 00:00:00 2001 From: Stacy Date: Tue, 6 Jun 2023 21:48:14 -0400 Subject: [PATCH 1/6] Finished wave 1 --- src/adagrams.js | 35 ++++++++++++++++++++++++++++++----- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/src/adagrams.js b/src/adagrams.js index 7ec5afc7..836202df 100644 --- a/src/adagrams.js +++ b/src/adagrams.js @@ -1,15 +1,40 @@ export const drawLetters = () => { - // Implement this method for wave 1 + var letters = { + '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 pieces = []; + let count = 98; + + for(let i = 0; i < 10; i++){ + let rand_piece = Math.floor(Math.random() * count+1); + let key = weighted(letters, rand_piece); + pieces.push(key); + + letters[key] -=1; + if (letters[key] == 0){ + delete letters[key]; + } + count -= 1 + } + return pieces +}; +const weighted = (dict, random_piece) => { + for (let [key, value] of Object.entries(dict)){ + random_piece -= value; + if (random_piece <= 0){ + return key; + } + } }; export const usesAvailableLetters = (input, lettersInHand) => { - // Implement this method for wave 2 }; export const scoreWord = (word) => { - // Implement this method for wave 3 -}; +} export const highestScoreFrom = (words) => { - // Implement this method for wave 4 }; From a10eca7c445f6b1006dcf5021ffecedcb55352ef Mon Sep 17 00:00:00 2001 From: Stacy Date: Tue, 6 Jun 2023 22:46:19 -0400 Subject: [PATCH 2/6] Finished wave 2 --- src/adagrams.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/adagrams.js b/src/adagrams.js index 836202df..17350a0e 100644 --- a/src/adagrams.js +++ b/src/adagrams.js @@ -31,10 +31,24 @@ const weighted = (dict, random_piece) => { }; export const usesAvailableLetters = (input, lettersInHand) => { + let new_letter_bank = []; + for(let i = 0; i < lettersInHand.length; i++){ + new_letter_bank.push(lettersInHand[i]); + } + for(const letter of input){ + if(new_letter_bank.includes(letter)){ + new_letter_bank.splice(new_letter_bank.indexOf(letter), 1); + } else{ + return false; + } + } + return true; }; export const scoreWord = (word) => { + // Implement this method for wave 3 } export const highestScoreFrom = (words) => { + // Implement this method for wave 4 }; From 2d050c5aa39d25c32cc5aa95a3c2c38aa1f0c60c Mon Sep 17 00:00:00 2001 From: Stacy Date: Tue, 6 Jun 2023 23:09:52 -0400 Subject: [PATCH 3/6] Finished wave 3 --- src/adagrams.js | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/adagrams.js b/src/adagrams.js index 17350a0e..0edb9f79 100644 --- a/src/adagrams.js +++ b/src/adagrams.js @@ -46,7 +46,28 @@ export const usesAvailableLetters = (input, lettersInHand) => { }; export const scoreWord = (word) => { - // Implement this method for wave 3 + const values = {'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}; + + let sum = 0; + if (word.length == 0){ + return 0; + } + if(word.length >= 7){ + sum += 8; + } + for(const letter of word){ + if(values[letter.toUpperCase()]){ + sum += values[letter.toUpperCase()]; + continue; + } + } + return sum; } export const highestScoreFrom = (words) => { From f93187a045a16c253005fe24f38e4443a290f10c Mon Sep 17 00:00:00 2001 From: Stacy Date: Tue, 6 Jun 2023 23:39:53 -0400 Subject: [PATCH 4/6] Finished wave 4 --- src/adagrams.js | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/src/adagrams.js b/src/adagrams.js index 0edb9f79..df9e1158 100644 --- a/src/adagrams.js +++ b/src/adagrams.js @@ -71,5 +71,26 @@ export const scoreWord = (word) => { } export const highestScoreFrom = (words) => { - // Implement this method for wave 4 -}; + let max_val = 0 + let temp_score = 0 + let max_word = "" + + for(const word of words){ + temp_score = scoreWord(word) + if(max_val < temp_score){ + max_val = temp_score; + max_word = word; + } + else if(max_val == temp_score){ + if(word.length == 10 && max_word.length != 10){ + max_word = word + } + else if(word.length < max_word.length && max_word.length != 10){ + max_word = word + } + } + }; + + const val = {"word": max_word, "score": max_val} + return val +}; \ No newline at end of file From 498ac078a08e4c37313896ca43059ea65ade0db1 Mon Sep 17 00:00:00 2001 From: Stacy Date: Tue, 6 Jun 2023 23:52:58 -0400 Subject: [PATCH 5/6] Finished test cases --- test/adagrams.test.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/test/adagrams.test.js b/test/adagrams.test.js index 1a0dc94e..fc35fcf9 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", () => { From f96bd63ca312d594df52981f73cf4e680d25aac7 Mon Sep 17 00:00:00 2001 From: Stacy Date: Wed, 7 Jun 2023 09:59:11 -0400 Subject: [PATCH 6/6] Refactored code --- src/adagrams.js | 58 ++++++++++++++++++++++++------------------------- 1 file changed, 28 insertions(+), 30 deletions(-) diff --git a/src/adagrams.js b/src/adagrams.js index df9e1158..932e37b0 100644 --- a/src/adagrams.js +++ b/src/adagrams.js @@ -9,35 +9,36 @@ export const drawLetters = () => { let count = 98; for(let i = 0; i < 10; i++){ - let rand_piece = Math.floor(Math.random() * count+1); - let key = weighted(letters, rand_piece); + let randPiece = Math.floor(Math.random() * count+1); + let key = weighted(letters, randPiece); pieces.push(key); letters[key] -=1; if (letters[key] == 0){ delete letters[key]; } - count -= 1 + count -= 1; } - return pieces + return pieces; }; -const weighted = (dict, random_piece) => { + +const weighted = (dict, randomPiece) => { for (let [key, value] of Object.entries(dict)){ - random_piece -= value; - if (random_piece <= 0){ + randomPiece -= value; + if (randomPiece <= 0){ return key; } } }; export const usesAvailableLetters = (input, lettersInHand) => { - let new_letter_bank = []; - for(let i = 0; i < lettersInHand.length; i++){ - new_letter_bank.push(lettersInHand[i]); + let newLetterBank = []; + for(const letter of lettersInHand){ + newLetterBank.push(letter); } for(const letter of input){ - if(new_letter_bank.includes(letter)){ - new_letter_bank.splice(new_letter_bank.indexOf(letter), 1); + if(newLetterBank.includes(letter)){ + newLetterBank.splice(newLetterBank.indexOf(letter), 1); } else{ return false; } @@ -64,33 +65,30 @@ export const scoreWord = (word) => { for(const letter of word){ if(values[letter.toUpperCase()]){ sum += values[letter.toUpperCase()]; - continue; } } return sum; -} +}; export const highestScoreFrom = (words) => { - let max_val = 0 - let temp_score = 0 - let max_word = "" + let maxVal = 0; + let tempScore = 0; + let maxWord = ""; for(const word of words){ - temp_score = scoreWord(word) - if(max_val < temp_score){ - max_val = temp_score; - max_word = word; + tempScore = scoreWord(word) + if(maxVal < tempScore){ + maxVal = tempScore; + maxWord = word; } - else if(max_val == temp_score){ - if(word.length == 10 && max_word.length != 10){ - max_word = word + else if(maxVal == tempScore){ + if(word.length == 10 && maxWord.length != 10){ + maxWord = word; } - else if(word.length < max_word.length && max_word.length != 10){ - max_word = word + else if(word.length < maxWord.length && maxWord.length != 10){ + maxWord = word; } } - }; - - const val = {"word": max_word, "score": max_val} - return val + }; + return {"word": maxWord, "score": maxVal}; }; \ No newline at end of file