From 7495d7dced3ae73127b9b1ef66992da2a5f47e08 Mon Sep 17 00:00:00 2001 From: Aksana Date: Fri, 22 Nov 2024 18:44:30 -0800 Subject: [PATCH 1/6] created letterPool object, implemented function to build hand with 10 letters --- src/adagrams.js | 103 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 102 insertions(+), 1 deletion(-) diff --git a/src/adagrams.js b/src/adagrams.js index 7ec5afc7..9132322c 100644 --- a/src/adagrams.js +++ b/src/adagrams.js @@ -1,8 +1,109 @@ +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 scoreObj = { + 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 letterArray = []; +for (const [letter, freq] of Object.entries(letterPool)) { + for (let num = 0; num < freq; num++) { + letterArray.push(letter); + }; +} +// console.log(letterArray) + +const hand = []; +const letterArrayLen = letterArray.length; +const letterCount = {}; + +while (hand.length < 10 ){ + let index = Math.floor(Math.random()*letterArrayLen); + let newLetter = letterArray[index]; + if (!letterCount[newLetter]) { + letterCount[newLetter] = 0; + } + + if (letterCount[newLetter] < letterPool[newLetter]){ + hand.push(newLetter); + letterCount[newLetter] +=1; + } +} +console.log(hand) +return hand; }; +// Implement this method for wave 1 export const usesAvailableLetters = (input, lettersInHand) => { + let copyLettersInHand = lettersInHand; + let inputUp = input.toUpperCase(); + + for (const letter of inputUp) { + if (!copyLettersInHand.includes(letter)){ + return false; + } + // else if copyLettersInHand.icludes(letter) + + + } + + + + + + // Implement this method for wave 2 }; From 8044425f499508f4510944c0fc925b1cbb293d66 Mon Sep 17 00:00:00 2001 From: Aksana Date: Fri, 22 Nov 2024 20:25:57 -0800 Subject: [PATCH 2/6] implemented function usesAvailableLetters --- src/adagrams.js | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/src/adagrams.js b/src/adagrams.js index 9132322c..00935745 100644 --- a/src/adagrams.js +++ b/src/adagrams.js @@ -87,25 +87,43 @@ return hand; // Implement this method for wave 1 export const usesAvailableLetters = (input, lettersInHand) => { - let copyLettersInHand = lettersInHand; let inputUp = input.toUpperCase(); + // create an object with frequency of the letters in the input + // create an object with frequency of the letters in the lettersInHand + const inputCount = {}; + const letterInHandCount = {}; for (const letter of inputUp) { - if (!copyLettersInHand.includes(letter)){ - return false; + if(!inputCount[letter]){ + inputCount[letter] = 1; + } else { + inputCount[letter] +=1; } - // else if copyLettersInHand.icludes(letter) - + } + for (const char of lettersInHand) { + if (!letterInHandCount[char]) { + letterInHandCount[char] = 1; + } else { + letterInHandCount[char] +=1; + } } +// compare if the letter from input is in lettersInHand and it's frequency is not higher + for (const inputLetter of inputUp) { + if (!letterInHandCount[inputLetter] || inputCount[inputLetter] > letterInHandCount[inputLetter]){ + return false; + } + } + return true; + }; // Implement this method for wave 2 -}; + export const scoreWord = (word) => { // Implement this method for wave 3 From 8685fbdf25d99fa0f6bd44924ac4db13ac3a6d6e Mon Sep 17 00:00:00 2001 From: Aksana Date: Fri, 22 Nov 2024 21:12:21 -0800 Subject: [PATCH 3/6] implemented scoreWord function, completed test for wave 3 --- src/adagrams.js | 19 +++++++++++++------ test/adagrams.test.js | 3 ++- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/adagrams.js b/src/adagrams.js index 00935745..b29aaec7 100644 --- a/src/adagrams.js +++ b/src/adagrams.js @@ -115,20 +115,27 @@ export const usesAvailableLetters = (input, lettersInHand) => { } } return true; - }; - - - - // Implement this method for wave 2 -export const scoreWord = (word) => { +export const scoreWord = (word) => { + if (word.length === 0) return 0; + const wordUp = word.toUpperCase(); + let score =0; + for (const letter of wordUp) { + score += scoreObj[letter] + } + if (wordUp.length >=7){ + score += 8; + } + return score; + // Implement this method for wave 3 }; + export const highestScoreFrom = (words) => { // Implement this method for wave 4 }; diff --git a/test/adagrams.test.js b/test/adagrams.test.js index 1a0dc94e..df292731 100644 --- a/test/adagrams.test.js +++ b/test/adagrams.test.js @@ -120,7 +120,8 @@ describe("Adagrams", () => { }); it("returns a score of 0 if given an empty input", () => { - throw "Complete test"; + expectScores(0); + // throw "Complete test"; }); it("adds an extra 8 points if word is 7 or more characters long", () => { From e72b177ecb09f4dfb8dd22600563f1888c58868c Mon Sep 17 00:00:00 2001 From: Aksana Date: Sat, 23 Nov 2024 00:13:06 -0800 Subject: [PATCH 4/6] implemented function highestScoreFrom, completed test for wave 4 --- src/adagrams.js | 29 ++++++++++++++++++++++++++++- test/adagrams.test.js | 5 +++-- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/src/adagrams.js b/src/adagrams.js index b29aaec7..9f1aa141 100644 --- a/src/adagrams.js +++ b/src/adagrams.js @@ -137,5 +137,32 @@ export const scoreWord = (word) => { export const highestScoreFrom = (words) => { - // Implement this method for wave 4 +const wordScoreObj = {}; +for (const word of words) { + wordScoreObj[word] = scoreWord(word); +} +let maxScore = 0; +let maxScoreWords = []; +for (const [word, wScore] of Object.entries(wordScoreObj)) { + if (wScore > maxScore) { + maxScore = wScore; + maxScoreWords = [word]; + } else if (maxScore === wScore) { + maxScoreWords.push(word); + } +} +if (maxScoreWords.length === 1){ + return { word: maxScoreWords[0], score: maxScore }; +} else { + let bestScoreWord = maxScoreWords[0]; + for (const maxWord of maxScoreWords){ + if (maxWord.length === 10){ + bestScoreWord = maxWord; + break; + } else if (maxWord.length < bestScoreWord.length) { + bestScoreWord = maxWord; + } + } + return { word: bestScoreWord, score: maxScore}; + } }; diff --git a/test/adagrams.test.js b/test/adagrams.test.js index df292731..e600aab5 100644 --- a/test/adagrams.test.js +++ b/test/adagrams.test.js @@ -134,7 +134,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") }; @@ -146,7 +146,8 @@ describe("Adagrams", () => { const words = ["XXX", "XXXX", "X", "XX"]; const correct = { word: "XXXX", score: scoreWord("XXXX") }; - throw "Complete test by adding an assertion"; + //throw "Complete test by adding an assertion"; + expect(highestScoreFrom(words)).toEqual(correct); }); describe("in case of tied score", () => { From 0ce66987731379c4d63cf367c0254bb86d332b3f Mon Sep 17 00:00:00 2001 From: Aksana Date: Sat, 23 Nov 2024 00:18:41 -0800 Subject: [PATCH 5/6] uncommented tests to run --- test/demo/model.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/demo/model.test.js b/test/demo/model.test.js index 49bf9599..52ae8d23 100644 --- a/test/demo/model.test.js +++ b/test/demo/model.test.js @@ -1,7 +1,7 @@ import Model from 'demo/model'; import Adagrams from 'demo/adagrams'; -describe.skip('Game Model', () => { +describe('Game Model', () => { const config = { players: [ 'Player A', From 64141a0899da570011bfea244b9731f3af3e270d Mon Sep 17 00:00:00 2001 From: Aksana Date: Tue, 26 Nov 2024 20:15:07 -0800 Subject: [PATCH 6/6] removed comments --- src/adagrams.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/adagrams.js b/src/adagrams.js index 9f1aa141..87e64cd1 100644 --- a/src/adagrams.js +++ b/src/adagrams.js @@ -63,7 +63,6 @@ for (const [letter, freq] of Object.entries(letterPool)) { letterArray.push(letter); }; } -// console.log(letterArray) const hand = []; const letterArrayLen = letterArray.length; @@ -120,8 +119,7 @@ export const usesAvailableLetters = (input, lettersInHand) => { // Implement this method for wave 2 -export const scoreWord = (word) => { - if (word.length === 0) return 0; +export const scoreWord = (word) => { const wordUp = word.toUpperCase(); let score =0; for (const letter of wordUp) {