From c741f961afc244781890d384edc7c27ca99ec301 Mon Sep 17 00:00:00 2001 From: Esther Annorzie Date: Sun, 5 Jun 2022 15:07:57 -0400 Subject: [PATCH 01/29] Created scoreChart variable to hold letter distribution --- src/adagrams.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/adagrams.js b/src/adagrams.js index ebc2839c..d3dd4bff 100644 --- a/src/adagrams.js +++ b/src/adagrams.js @@ -1,5 +1,15 @@ export const drawLetters = () => { // Implement this method for wave 1 + const scoreChart = { + 1: ['J', 'K', 'Q', 'X', 'Z'], + 2: ['B', 'C', 'F', 'H', 'M', 'P', 'V', 'W', 'Y'], + 3: ['G'], + 4: ['D', 'L', 'S', 'U'], + 6: ['N', 'R', 'T'], + 8: ['O'], + 9: ['A', 'I'], + 12: ['E'] + } }; export const usesAvailableLetters = (input, lettersInHand) => { From 4880f364bc0978b1fbae021b3ea3b66307ddf680 Mon Sep 17 00:00:00 2001 From: Esther Annorzie Date: Sun, 5 Jun 2022 16:50:09 -0400 Subject: [PATCH 02/29] Able to draw ten letters from pool and return an array --- src/adagrams.js | 54 +++++++++++++++++++++++++++++++++++-------- test/adagrams.test.js | 6 ++--- 2 files changed, 47 insertions(+), 13 deletions(-) diff --git a/src/adagrams.js b/src/adagrams.js index d3dd4bff..730c88a8 100644 --- a/src/adagrams.js +++ b/src/adagrams.js @@ -1,16 +1,50 @@ export const drawLetters = () => { // Implement this method for wave 1 const scoreChart = { - 1: ['J', 'K', 'Q', 'X', 'Z'], - 2: ['B', 'C', 'F', 'H', 'M', 'P', 'V', 'W', 'Y'], - 3: ['G'], - 4: ['D', 'L', 'S', 'U'], - 6: ['N', 'R', 'T'], - 8: ['O'], - 9: ['A', 'I'], - 12: ['E'] - } -}; + 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 letters = []; + + for (const[key, value] of Object.entries(scoreChart)) { + for (let i = 0; i < value; i++) { + letters.push(key); + } + }; + + let drawnLetters = []; + + for (let i = 0; i < 10; i++) { + const randomIndex = Math.floor(Math.random() * letters.length); + drawnLetters.push(letters[randomIndex]); +} + return drawnLetters; +} export const usesAvailableLetters = (input, lettersInHand) => { // Implement this method for wave 2 diff --git a/test/adagrams.test.js b/test/adagrams.test.js index 1a0dc94e..1554aeee 100644 --- a/test/adagrams.test.js +++ b/test/adagrams.test.js @@ -70,7 +70,7 @@ describe("Adagrams", () => { }); }); - describe("usesAvailableLetters", () => { + describe.skip("usesAvailableLetters", () => { it("returns true if the submitted letters are valid against the drawn letters", () => { const drawn = ["D", "O", "G", "X", "X", "X", "X", "X", "X", "X"]; const word = "DOG"; @@ -96,7 +96,7 @@ describe("Adagrams", () => { }); }); - describe("scoreWord", () => { + describe.skip("scoreWord", () => { const expectScores = (wordScores) => { Object.entries(wordScores).forEach(([word, score]) => { expect(scoreWord(word)).toBe(score); @@ -148,7 +148,7 @@ describe("Adagrams", () => { throw "Complete test by adding an assertion"; }); - describe("in case of tied score", () => { + describe.skip("in case of tied score", () => { const expectTie = (words) => { const scores = words.map((word) => scoreWord(word)); const highScore = scores.reduce((h, s) => (h < s ? s : h), 0); From 29b6ebbca002afa1c6a9c666ec93dec19a6cae7f Mon Sep 17 00:00:00 2001 From: Esther Annorzie Date: Sun, 5 Jun 2022 22:01:01 -0400 Subject: [PATCH 03/29] Added shuffle algorithm for drawLetters --- .vscode/settings.json | 6 ++++++ src/adagrams.js | 26 +++++++++++++------------- test/adagrams.test.js | 8 ++++---- 3 files changed, 23 insertions(+), 17 deletions(-) create mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..f247b4fe --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,6 @@ +{ + "cSpell.enableFiletypes": [ + "!javascript", + "!markdown" + ] +} \ No newline at end of file diff --git a/src/adagrams.js b/src/adagrams.js index 730c88a8..75a6325e 100644 --- a/src/adagrams.js +++ b/src/adagrams.js @@ -31,20 +31,20 @@ export const drawLetters = () => { let letters = []; - for (const[key, value] of Object.entries(scoreChart)) { - for (let i = 0; i < value; i++) { - letters.push(key); + for (const [letter, letter_freq] of Object.entries(scoreChart)) { + for (let i = 0; i < letter_freq; i++) { + letters.push(letter); } }; - - let drawnLetters = []; - - for (let i = 0; i < 10; i++) { - const randomIndex = Math.floor(Math.random() * letters.length); - drawnLetters.push(letters[randomIndex]); -} - return drawnLetters; -} + // Fisher-Yates shuffle algorithm + for (let i = letters.length - 1; i >= 1; i--) { + let j = Math.floor(Math.random() * (i + 1)); + let temp = letters[j]; + letters[j] = letters[i]; + letters[i] = temp; + }; + return letters.slice(0, 10); +}; export const usesAvailableLetters = (input, lettersInHand) => { // Implement this method for wave 2 @@ -56,4 +56,4 @@ export const scoreWord = (word) => { export const highestScoreFrom = (words) => { // Implement this method for wave 1 -}; +}; \ No newline at end of file diff --git a/test/adagrams.test.js b/test/adagrams.test.js index 1554aeee..71d1d221 100644 --- a/test/adagrams.test.js +++ b/test/adagrams.test.js @@ -70,7 +70,7 @@ describe("Adagrams", () => { }); }); - describe.skip("usesAvailableLetters", () => { + describe("usesAvailableLetters", () => { it("returns true if the submitted letters are valid against the drawn letters", () => { const drawn = ["D", "O", "G", "X", "X", "X", "X", "X", "X", "X"]; const word = "DOG"; @@ -96,7 +96,7 @@ describe("Adagrams", () => { }); }); - describe.skip("scoreWord", () => { + describe("scoreWord", () => { const expectScores = (wordScores) => { Object.entries(wordScores).forEach(([word, score]) => { expect(scoreWord(word)).toBe(score); @@ -133,7 +133,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") }; @@ -148,7 +148,7 @@ describe("Adagrams", () => { throw "Complete test by adding an assertion"; }); - describe.skip("in case of tied score", () => { + describe("in case of tied score", () => { const expectTie = (words) => { const scores = words.map((word) => scoreWord(word)); const highScore = scores.reduce((h, s) => (h < s ? s : h), 0); From 7b3c7198df6e4e933987b1627852e8a02d366dcf Mon Sep 17 00:00:00 2001 From: Esther Annorzie Date: Tue, 7 Jun 2022 00:03:58 -0400 Subject: [PATCH 04/29] Created frequency map for input and lettersInHand, 1 test passes --- src/adagrams.js | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/src/adagrams.js b/src/adagrams.js index 75a6325e..b4c403ac 100644 --- a/src/adagrams.js +++ b/src/adagrams.js @@ -31,8 +31,8 @@ export const drawLetters = () => { let letters = []; - for (const [letter, letter_freq] of Object.entries(scoreChart)) { - for (let i = 0; i < letter_freq; i++) { + for (const [letter, inputLetterFreq] of Object.entries(scoreChart)) { + for (let i = 0; i < inputLetterFreq; i++) { letters.push(letter); } }; @@ -48,6 +48,32 @@ export const drawLetters = () => { export const usesAvailableLetters = (input, lettersInHand) => { // Implement this method for wave 2 + let inputLetterFreq = {}; + for (const letter of input) { + if (letter in inputLetterFreq) { + inputLetterFreq[letter.toUpperCase()] += 1; + } else { + inputLetterFreq[letter.toUpperCase()] = 1; + } + }; + + let lettersInHandFreq = {}; + + for (const letter of lettersInHand) { + if (letter.toUpperCase() in lettersInHandFreq) { + lettersInHandFreq[letter.toUpperCase()] += 1; + } else { + lettersInHandFreq[letter.toUpperCase()] = 1; + } + } + + for (const letter of input) { + // if the letter does not exist in the lettersInHand or the `input` letter frequency is greater than the letter frequency in `lettersInHand` + if (typeof(lettersInHandFreq[letter]) === 'undefined' || inputLetterFreq[letter.toUpperCase()] > lettersInHandFreq[letter.toUpperCase()]) { + return false; + } + return true; + } }; export const scoreWord = (word) => { From 2934cd01c3d13e7adf6a5109ccb84eac28223800 Mon Sep 17 00:00:00 2001 From: Esther Annorzie Date: Tue, 7 Jun 2022 02:46:51 -0400 Subject: [PATCH 05/29] Adjusted input loop to compare input frequencies --- src/adagrams.js | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/adagrams.js b/src/adagrams.js index b4c403ac..cf630793 100644 --- a/src/adagrams.js +++ b/src/adagrams.js @@ -42,21 +42,23 @@ export const drawLetters = () => { let temp = letters[j]; letters[j] = letters[i]; letters[i] = temp; - }; + }; return letters.slice(0, 10); }; export const usesAvailableLetters = (input, lettersInHand) => { // Implement this method for wave 2 let inputLetterFreq = {}; + for (const letter of input) { - if (letter in inputLetterFreq) { + if (letter.toUpperCase() in inputLetterFreq) { inputLetterFreq[letter.toUpperCase()] += 1; } else { inputLetterFreq[letter.toUpperCase()] = 1; } }; + let lettersInHandFreq = {}; for (const letter of lettersInHand) { @@ -65,15 +67,20 @@ export const usesAvailableLetters = (input, lettersInHand) => { } else { lettersInHandFreq[letter.toUpperCase()] = 1; } - } + }; + for (const letter of input) { - // if the letter does not exist in the lettersInHand or the `input` letter frequency is greater than the letter frequency in `lettersInHand` - if (typeof(lettersInHandFreq[letter]) === 'undefined' || inputLetterFreq[letter.toUpperCase()] > lettersInHandFreq[letter.toUpperCase()]) { + /* If the letter does not exist in the `lettersInHandFreq` or the `input` letter + frequency is greater than `lettersInHand`'s frequency, return false. Otherwise, + return true. */ + if (typeof(lettersInHandFreq[letter.toUpperCase()]) === 'undefined' || + inputLetterFreq[letter.toUpperCase()] > lettersInHandFreq[letter + .toUpperCase()]) { return false; } - return true; - } + } + return true; }; export const scoreWord = (word) => { From af5d6d0fe716ed82546c9b02644dfe2a8661fa33 Mon Sep 17 00:00:00 2001 From: Esther Annorzie Date: Tue, 7 Jun 2022 11:52:54 -0400 Subject: [PATCH 06/29] Implemented scoreChart for scoreWord --- src/adagrams.js | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/src/adagrams.js b/src/adagrams.js index cf630793..ca1c85da 100644 --- a/src/adagrams.js +++ b/src/adagrams.js @@ -85,6 +85,45 @@ export const usesAvailableLetters = (input, lettersInHand) => { export const scoreWord = (word) => { // Implement this method for wave 3 + const scoreChart = { + 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 + }; + + let score = 0; + for (let i = 0; i < word.length, i++) { + if (i in scoreChart) { + score += scoreChart[i]; + } + } + if (word.length >= 7 && word.length <=10) { + score += 8; + } + return score; }; export const highestScoreFrom = (words) => { From 1b5f7354ec5a4c798605480182062c6aa756d521 Mon Sep 17 00:00:00 2001 From: Esther Annorzie Date: Tue, 7 Jun 2022 12:12:52 -0400 Subject: [PATCH 07/29] Added uppercasing for wave 3 loop --- src/adagrams.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/adagrams.js b/src/adagrams.js index ca1c85da..0d47419c 100644 --- a/src/adagrams.js +++ b/src/adagrams.js @@ -115,12 +115,13 @@ export const scoreWord = (word) => { }; let score = 0; - for (let i = 0; i < word.length, i++) { - if (i in scoreChart) { - score += scoreChart[i]; + + for (const letter of word) { + if (letter.toUpperCase() in scoreChart) { + score += scoreChart[letter.toUpperCase()]; } } - if (word.length >= 7 && word.length <=10) { + if (word.length >= 7 && word.length <= 10) { score += 8; } return score; From a836570d8638778b16d4f6263f3eeca0320c9e4c Mon Sep 17 00:00:00 2001 From: Esther Annorzie Date: Tue, 7 Jun 2022 12:18:11 -0400 Subject: [PATCH 08/29] Added assertion for empty input in wave 3 --- test/adagrams.test.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/adagrams.test.js b/test/adagrams.test.js index 71d1d221..a2865ab2 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"; + // throw "Complete test"; + expectScores({'': 0}) }); it("adds an extra 8 points if word is 7 or more characters long", () => { From 075cca83a5ed13a8e08342e7f436a235669eca7a Mon Sep 17 00:00:00 2001 From: Esther Annorzie Date: Tue, 7 Jun 2022 12:23:40 -0400 Subject: [PATCH 09/29] Created score variable to hold scoreWord return value --- src/adagrams.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/adagrams.js b/src/adagrams.js index 0d47419c..0d0b1756 100644 --- a/src/adagrams.js +++ b/src/adagrams.js @@ -129,4 +129,5 @@ export const scoreWord = (word) => { export const highestScoreFrom = (words) => { // Implement this method for wave 1 + const score = scoreWord(words); }; \ No newline at end of file From 9d4dd5985a5b05041948bf333b7659fb9e431553 Mon Sep 17 00:00:00 2001 From: Esther Annorzie Date: Tue, 7 Jun 2022 12:27:37 -0400 Subject: [PATCH 10/29] Created an array to hold score and loop to added each word's score to the array --- src/adagrams.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/adagrams.js b/src/adagrams.js index 0d0b1756..4a5fec0b 100644 --- a/src/adagrams.js +++ b/src/adagrams.js @@ -129,5 +129,9 @@ export const scoreWord = (word) => { export const highestScoreFrom = (words) => { // Implement this method for wave 1 - const score = scoreWord(words); + const scores = []; + + for (let i = 0; i < words.length; i++) { + scores.push(scoreWord(i)); + } }; \ No newline at end of file From a59e847ae3616ec0d3a1101360b01881d79d0093 Mon Sep 17 00:00:00 2001 From: Esther Annorzie Date: Wed, 8 Jun 2022 12:38:57 -0400 Subject: [PATCH 11/29] Added shuffling algorithm source --- src/adagrams.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/adagrams.js b/src/adagrams.js index 4a5fec0b..afd5cc8f 100644 --- a/src/adagrams.js +++ b/src/adagrams.js @@ -37,6 +37,7 @@ export const drawLetters = () => { } }; // Fisher-Yates shuffle algorithm + // https://masteringjs.io/tutorials/fundamentals/shuffle#:~:text=To%20properly%20shuffle%20an%20array%20in%20JavaScript%2C%20use,random%20element%20in%20the%20array%20as%20shown%20below. for (let i = letters.length - 1; i >= 1; i--) { let j = Math.floor(Math.random() * (i + 1)); let temp = letters[j]; @@ -78,7 +79,7 @@ export const usesAvailableLetters = (input, lettersInHand) => { inputLetterFreq[letter.toUpperCase()] > lettersInHandFreq[letter .toUpperCase()]) { return false; - } + } } return true; }; From 09fd913dcb64a5b01f2f18435bf83468a2ea15e4 Mon Sep 17 00:00:00 2001 From: Esther Annorzie Date: Wed, 8 Jun 2022 20:32:04 -0400 Subject: [PATCH 12/29] Started pseudocode for highestScoreFrom --- src/adagrams.js | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/adagrams.js b/src/adagrams.js index afd5cc8f..d2b9ffef 100644 --- a/src/adagrams.js +++ b/src/adagrams.js @@ -36,6 +36,7 @@ export const drawLetters = () => { letters.push(letter); } }; + // not able to create a shuffling algo myself // Fisher-Yates shuffle algorithm // https://masteringjs.io/tutorials/fundamentals/shuffle#:~:text=To%20properly%20shuffle%20an%20array%20in%20JavaScript%2C%20use,random%20element%20in%20the%20array%20as%20shown%20below. for (let i = letters.length - 1; i >= 1; i--) { @@ -59,7 +60,6 @@ export const usesAvailableLetters = (input, lettersInHand) => { } }; - let lettersInHandFreq = {}; for (const letter of lettersInHand) { @@ -70,7 +70,6 @@ export const usesAvailableLetters = (input, lettersInHand) => { } }; - for (const letter of input) { /* If the letter does not exist in the `lettersInHandFreq` or the `input` letter frequency is greater than `lettersInHand`'s frequency, return false. Otherwise, @@ -130,9 +129,14 @@ export const scoreWord = (word) => { export const highestScoreFrom = (words) => { // Implement this method for wave 1 - const scores = []; - - for (let i = 0; i < words.length; i++) { - scores.push(scoreWord(i)); + const word_scores = []; + /* + 1) For loop through each word in `words` + 2) An object is pushed to `word_scores`--the key is a string of the word and the value is a number representing the word's score + 3) Initalize a variable `max_score` where the first object's score as the max value + 4) Loop through `word_scores` + */ + for (const word of words) { + word_scores.push({word: scoreWord(word)}) } }; \ No newline at end of file From ab2fbd40830a6ff45051cfa41de2cdea1cb83b63 Mon Sep 17 00:00:00 2001 From: Esther Annorzie Date: Wed, 8 Jun 2022 22:51:03 -0400 Subject: [PATCH 13/29] Formatted pseudocode --- src/adagrams.js | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/adagrams.js b/src/adagrams.js index d2b9ffef..ffae210d 100644 --- a/src/adagrams.js +++ b/src/adagrams.js @@ -132,11 +132,19 @@ export const highestScoreFrom = (words) => { const word_scores = []; /* 1) For loop through each word in `words` - 2) An object is pushed to `word_scores`--the key is a string of the word and the value is a number representing the word's score - 3) Initalize a variable `max_score` where the first object's score as the max value + + 2) An object is pushed to `word_scores`--the key is a string of the word and + the value is a number representing the word's score + + 3) Initalize a variable `max_score` where the first object's score is the max + value. Initialize an array called `ties` that hold + 4) Loop through `word_scores` + + 5) If the word's score is greater than or equal to the `max_score`, */ - for (const word of words) { - word_scores.push({word: scoreWord(word)}) + + for (let i = 0; i < words.lengthk; i++) { + word_scores.push({words[i]: scoreWord(words[i])}) } }; \ No newline at end of file From 47ee11c8465af4b2402faf3f050f847781493385 Mon Sep 17 00:00:00 2001 From: Esther Annorzie Date: Thu, 9 Jun 2022 11:23:11 -0400 Subject: [PATCH 14/29] Fixed for loop to create array of word scores in highestScoreFrom --- src/adagrams.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/adagrams.js b/src/adagrams.js index ffae210d..8b384042 100644 --- a/src/adagrams.js +++ b/src/adagrams.js @@ -130,6 +130,14 @@ export const scoreWord = (word) => { export const highestScoreFrom = (words) => { // Implement this method for wave 1 const word_scores = []; + + // I want words_scores = [{X: 8}, {XX: 16}, {XXX: 24}, {XXXX: 32}] + // or word_scores = ['X', 8, 'XX', 16, 'XXX', 24, 'XXXX', 32] + + for (let i = 0; i < words.length; i++) { + word_scores.push({[words[i]]: scoreWord(words[i])}) + } + /* 1) For loop through each word in `words` @@ -143,8 +151,4 @@ export const highestScoreFrom = (words) => { 5) If the word's score is greater than or equal to the `max_score`, */ - - for (let i = 0; i < words.lengthk; i++) { - word_scores.push({words[i]: scoreWord(words[i])}) - } }; \ No newline at end of file From 7d77e1cb31467cf1af6cadd34ee353ab41c147a5 Mon Sep 17 00:00:00 2001 From: Esther Annorzie Date: Thu, 9 Jun 2022 12:22:05 -0400 Subject: [PATCH 15/29] Create loop to check for highest score in array, returns object with word and score key --- src/adagrams.js | 41 +++++++++++++++++++++++++++++------------ 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/src/adagrams.js b/src/adagrams.js index 8b384042..19117490 100644 --- a/src/adagrams.js +++ b/src/adagrams.js @@ -1,3 +1,5 @@ +import { indexOf } from "core-js/core/array"; + export const drawLetters = () => { // Implement this method for wave 1 const scoreChart = { @@ -129,26 +131,41 @@ export const scoreWord = (word) => { export const highestScoreFrom = (words) => { // Implement this method for wave 1 - const word_scores = []; - - // I want words_scores = [{X: 8}, {XX: 16}, {XXX: 24}, {XXXX: 32}] - // or word_scores = ['X', 8, 'XX', 16, 'XXX', 24, 'XXXX', 32] - - for (let i = 0; i < words.length; i++) { - word_scores.push({[words[i]]: scoreWord(words[i])}) - } /* 1) For loop through each word in `words` - 2) An object is pushed to `word_scores`--the key is a string of the word and - the value is a number representing the word's score + 2) An string that represents the word and a number representing the score is pushed to `word_scores` 3) Initalize a variable `max_score` where the first object's score is the max value. Initialize an array called `ties` that hold - 4) Loop through `word_scores` + 4) Loop through `word_scores` from the end to the beginnning with a step of -2. - 5) If the word's score is greater than or equal to the `max_score`, + 5) If the `word_score[i]` is is greater than or equal to the `max_score`, reassign `max_score` to `word_scores[i]`. */ + + const word_scores = []; + + // words_scores can be like this = [{X: 8}, {XX: 16}, {XXX: 24}, {XXXX: 32}] + // or maybe this = ['X', 8, 'XX', 16, 'XXX', 24, 'XXXX', 32] + + for (let i = 0; i < words.length; i++) { + // word_scores.push({[words[i]]: scoreWord(words[i])}) + word_scores.push(words[i]) + word_scores.push(scoreWord(words[i])) + } + + let max_score = 0; + + for (let i = 1; word_scores.length; i -= 2) { + if (word_scores[i] > max_score) { + max_score = word_scores[i]; + } + } + + return { + word: word_scores[indexOf(max_score) - 1], + score: max_score + }; }; \ No newline at end of file From 76e0931b92f19bbad79073dd48dfbf92f85d76dc Mon Sep 17 00:00:00 2001 From: Esther Annorzie Date: Thu, 9 Jun 2022 12:43:08 -0400 Subject: [PATCH 16/29] Removed stray import --- src/adagrams.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/adagrams.js b/src/adagrams.js index 19117490..2840f6b1 100644 --- a/src/adagrams.js +++ b/src/adagrams.js @@ -1,5 +1,3 @@ -import { indexOf } from "core-js/core/array"; - export const drawLetters = () => { // Implement this method for wave 1 const scoreChart = { @@ -143,6 +141,8 @@ export const highestScoreFrom = (words) => { 4) Loop through `word_scores` from the end to the beginnning with a step of -2. 5) If the `word_score[i]` is is greater than or equal to the `max_score`, reassign `max_score` to `word_scores[i]`. + + 6) Return an object. The first property has the key word, the value is the index position of `max_score` - 1. The second property has a the key of score and a value of `max_score`. */ const word_scores = []; From 1407b188879e1385fabd8211e2d560241392ff56 Mon Sep 17 00:00:00 2001 From: Esther Annorzie Date: Thu, 9 Jun 2022 12:48:54 -0400 Subject: [PATCH 17/29] Changed highestScoreFrom max score looping length --- src/adagrams.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/adagrams.js b/src/adagrams.js index 2840f6b1..2a7f2994 100644 --- a/src/adagrams.js +++ b/src/adagrams.js @@ -158,7 +158,7 @@ export const highestScoreFrom = (words) => { let max_score = 0; - for (let i = 1; word_scores.length; i -= 2) { + for (let i = word_scores.length; word_scores.length; i -= 2) { if (word_scores[i] > max_score) { max_score = word_scores[i]; } From 2ec2f474851369191ef75b6e58bbd2a8a7e4bce4 Mon Sep 17 00:00:00 2001 From: Esther Annorzie Date: Thu, 9 Jun 2022 17:18:35 -0400 Subject: [PATCH 18/29] Fixed off-by-one error in highestScoreFrom loop --- src/adagrams.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/adagrams.js b/src/adagrams.js index 2a7f2994..dad9a880 100644 --- a/src/adagrams.js +++ b/src/adagrams.js @@ -129,7 +129,7 @@ export const scoreWord = (word) => { export const highestScoreFrom = (words) => { // Implement this method for wave 1 - + // tests for this loop run eternally in vscode /* 1) For loop through each word in `words` @@ -144,11 +144,11 @@ export const highestScoreFrom = (words) => { 6) Return an object. The first property has the key word, the value is the index position of `max_score` - 1. The second property has a the key of score and a value of `max_score`. */ + + // // words_scores can be like this = [{X: 8}, {XX: 16}, {XXX: 24}, {XXXX: 32}] + // // or maybe this = ['X', 8, 'XX', 16, 'XXX', 24, 'XXXX', 32] const word_scores = []; - - // words_scores can be like this = [{X: 8}, {XX: 16}, {XXX: 24}, {XXXX: 32}] - // or maybe this = ['X', 8, 'XX', 16, 'XXX', 24, 'XXXX', 32] for (let i = 0; i < words.length; i++) { // word_scores.push({[words[i]]: scoreWord(words[i])}) @@ -159,8 +159,8 @@ export const highestScoreFrom = (words) => { let max_score = 0; for (let i = word_scores.length; word_scores.length; i -= 2) { - if (word_scores[i] > max_score) { - max_score = word_scores[i]; + if (word_scores[i + 1] > max_score) { + max_score = word_scores[i + 1]; } } From 802f9848ce3cd5fb57cb115295ec13023dc1303d Mon Sep 17 00:00:00 2001 From: Esther Annorzie Date: Thu, 9 Jun 2022 17:48:07 -0400 Subject: [PATCH 19/29] Adjusted syntax of return in highestScoreFrom --- src/adagrams.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/adagrams.js b/src/adagrams.js index dad9a880..1aebc641 100644 --- a/src/adagrams.js +++ b/src/adagrams.js @@ -158,14 +158,15 @@ export const highestScoreFrom = (words) => { let max_score = 0; - for (let i = word_scores.length; word_scores.length; i -= 2) { + // something is up with my condition here + for (let i = word_scores.length; i < word_scores.length; i -= 2) { if (word_scores[i + 1] > max_score) { max_score = word_scores[i + 1]; } } return { - word: word_scores[indexOf(max_score) - 1], + word: word_scores.indexOf(max_score) - 1, score: max_score }; }; \ No newline at end of file From f0692cf7b41e1097d16d54cf84c06fbabf4a1fe7 Mon Sep 17 00:00:00 2001 From: Esther Annorzie Date: Fri, 10 Jun 2022 12:39:42 -0400 Subject: [PATCH 20/29] Adjusted highestScoreFrom to loops correctly, started working on tie breaking word --- src/adagrams.js | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/src/adagrams.js b/src/adagrams.js index 1aebc641..b3047191 100644 --- a/src/adagrams.js +++ b/src/adagrams.js @@ -146,7 +146,7 @@ export const highestScoreFrom = (words) => { */ // // words_scores can be like this = [{X: 8}, {XX: 16}, {XXX: 24}, {XXXX: 32}] - // // or maybe this = ['X', 8, 'XX', 16, 'XXX', 24, 'XXXX', 32] + // // or maybe this = ['X', 8, 'XX', 16, 'XXXX', 32, 'XXXX', 32] const word_scores = []; @@ -157,16 +157,36 @@ export const highestScoreFrom = (words) => { } let max_score = 0; + let max_words = []; // something is up with my condition here - for (let i = word_scores.length; i < word_scores.length; i -= 2) { - if (word_scores[i + 1] > max_score) { - max_score = word_scores[i + 1]; + for (let i = word_scores.length - 1; i >= 1; i -= 2) { + if (word_scores[i] > max_score) { + max_score = word_scores[i]; + max_words.push(word_scores[i - 1]); + } + + if (word_scores[i] === max_score) { + max_words.push(word_scores[i - 1]); + } + } + + let tie_breaking_word = ''; + if (max_words.length > 1) { + for (const word of max_words) { + if (word.length >= 10) { + tie_breaking_word = word; + break; + } + if (word.length < tie_breaking_word.length || !(tie_breaking_word.length)) { + tie_breaking_word = word; + } } } + return { - word: word_scores.indexOf(max_score) - 1, - score: max_score + word: + score: }; }; \ No newline at end of file From 52f0778676429224273b747b45adf5086417b959 Mon Sep 17 00:00:00 2001 From: Esther Annorzie Date: Fri, 10 Jun 2022 12:47:47 -0400 Subject: [PATCH 21/29] Renamed highestScoreFrom variables to camel case --- src/adagrams.js | 58 +++++++++++++++---------------------------------- 1 file changed, 18 insertions(+), 40 deletions(-) diff --git a/src/adagrams.js b/src/adagrams.js index b3047191..a80b704c 100644 --- a/src/adagrams.js +++ b/src/adagrams.js @@ -130,63 +130,41 @@ export const scoreWord = (word) => { export const highestScoreFrom = (words) => { // Implement this method for wave 1 // tests for this loop run eternally in vscode - /* - 1) For loop through each word in `words` - - 2) An string that represents the word and a number representing the score is pushed to `word_scores` - - 3) Initalize a variable `max_score` where the first object's score is the max - value. Initialize an array called `ties` that hold - - 4) Loop through `word_scores` from the end to the beginnning with a step of -2. - - 5) If the `word_score[i]` is is greater than or equal to the `max_score`, reassign `max_score` to `word_scores[i]`. - - 6) Return an object. The first property has the key word, the value is the index position of `max_score` - 1. The second property has a the key of score and a value of `max_score`. - */ - - // // words_scores can be like this = [{X: 8}, {XX: 16}, {XXX: 24}, {XXXX: 32}] // // or maybe this = ['X', 8, 'XX', 16, 'XXXX', 32, 'XXXX', 32] - const word_scores = []; - + const wordScores = []; for (let i = 0; i < words.length; i++) { - // word_scores.push({[words[i]]: scoreWord(words[i])}) - word_scores.push(words[i]) - word_scores.push(scoreWord(words[i])) + wordScores.push(words[i]) + wordScores.push(scoreWord(words[i])) } - let max_score = 0; - let max_words = []; - - // something is up with my condition here - for (let i = word_scores.length - 1; i >= 1; i -= 2) { - if (word_scores[i] > max_score) { - max_score = word_scores[i]; - max_words.push(word_scores[i - 1]); + let maxScore = 0; + let maxWords = []; + for (let i = wordScores.length - 1; i >= 1; i -= 2) { + if (wordScores[i] > maxScore) { + maxScore = wordScores[i]; + maxWords.push(wordScores[i - 1]); } - - if (word_scores[i] === max_score) { - max_words.push(word_scores[i - 1]); + if (wordScores[i] === maxScore) { + maxWords.push(wordScores[i - 1]); } } - let tie_breaking_word = ''; - if (max_words.length > 1) { - for (const word of max_words) { + let winningWord = ''; + if (maxWords.length > 1) { + for (const word of maxWords) { if (word.length >= 10) { - tie_breaking_word = word; + winningWord = word; break; } - if (word.length < tie_breaking_word.length || !(tie_breaking_word.length)) { - tie_breaking_word = word; + if (word.length < winningWord.length || !(winningWord.length)) { + winningWord = word; } } } - return { - word: + word: winningWord, score: }; }; \ No newline at end of file From a02d19de5689508f0cdafcfe76415a0e82fd88b6 Mon Sep 17 00:00:00 2001 From: Esther Annorzie Date: Fri, 10 Jun 2022 13:11:09 -0400 Subject: [PATCH 22/29] Deleted some comments and whitespace --- src/adagrams.js | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/src/adagrams.js b/src/adagrams.js index a80b704c..6647b5bf 100644 --- a/src/adagrams.js +++ b/src/adagrams.js @@ -51,7 +51,6 @@ export const drawLetters = () => { export const usesAvailableLetters = (input, lettersInHand) => { // Implement this method for wave 2 let inputLetterFreq = {}; - for (const letter of input) { if (letter.toUpperCase() in inputLetterFreq) { inputLetterFreq[letter.toUpperCase()] += 1; @@ -61,7 +60,6 @@ export const usesAvailableLetters = (input, lettersInHand) => { }; let lettersInHandFreq = {}; - for (const letter of lettersInHand) { if (letter.toUpperCase() in lettersInHandFreq) { lettersInHandFreq[letter.toUpperCase()] += 1; @@ -115,12 +113,12 @@ export const scoreWord = (word) => { }; let score = 0; - for (const letter of word) { if (letter.toUpperCase() in scoreChart) { score += scoreChart[letter.toUpperCase()]; } } + if (word.length >= 7 && word.length <= 10) { score += 8; } @@ -129,9 +127,6 @@ export const scoreWord = (word) => { export const highestScoreFrom = (words) => { // Implement this method for wave 1 - // tests for this loop run eternally in vscode - // // or maybe this = ['X', 8, 'XX', 16, 'XXXX', 32, 'XXXX', 32] - const wordScores = []; for (let i = 0; i < words.length; i++) { wordScores.push(words[i]) @@ -162,9 +157,8 @@ export const highestScoreFrom = (words) => { } } } - return { word: winningWord, - score: + score: scoreWord(winningWord) }; }; \ No newline at end of file From f613888ad4da45b5d053de2872e9d81297f31ae0 Mon Sep 17 00:00:00 2001 From: Esther Annorzie Date: Fri, 10 Jun 2022 13:18:45 -0400 Subject: [PATCH 23/29] Added assertion to highestScoreFrom test --- test/adagrams.test.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/adagrams.test.js b/test/adagrams.test.js index a2865ab2..93fe90aa 100644 --- a/test/adagrams.test.js +++ b/test/adagrams.test.js @@ -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 b666e82f7f13b4558ca8cd08d8c83c8e80e1a465 Mon Sep 17 00:00:00 2001 From: Esther Annorzie Date: Fri, 10 Jun 2022 17:55:22 -0400 Subject: [PATCH 24/29] Added pseudocode to highestScoreFrom --- src/adagrams.js | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/adagrams.js b/src/adagrams.js index 6647b5bf..a13577aa 100644 --- a/src/adagrams.js +++ b/src/adagrams.js @@ -127,24 +127,27 @@ export const scoreWord = (word) => { export const highestScoreFrom = (words) => { // Implement this method for wave 1 + + // create an array that holds each word and its score, respectively + // for example if `words` is ['X', 'XX', 'XXX', 'XXXX'], `wordScores` should be... + // ["X", 8, "XX", 16, "XXX", 24, "XXXX", 32] const wordScores = []; for (let i = 0; i < words.length; i++) { wordScores.push(words[i]) wordScores.push(scoreWord(words[i])) } + // find the max score in `wordScores` let maxScore = 0; - let maxWords = []; for (let i = wordScores.length - 1; i >= 1; i -= 2) { if (wordScores[i] > maxScore) { maxScore = wordScores[i]; - maxWords.push(wordScores[i - 1]); - } - if (wordScores[i] === maxScore) { - maxWords.push(wordScores[i - 1]); + // maxWords.push(wordScores[i - 1]); } } + + let winningWord = ''; if (maxWords.length > 1) { for (const word of maxWords) { From c1e7ada958e431ada43a81ff575206f042001e56 Mon Sep 17 00:00:00 2001 From: Esther Annorzie Date: Fri, 10 Jun 2022 17:58:27 -0400 Subject: [PATCH 25/29] Separated maxWords into new logic/for loop --- src/adagrams.js | 40 +++++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/src/adagrams.js b/src/adagrams.js index a13577aa..b47daab8 100644 --- a/src/adagrams.js +++ b/src/adagrams.js @@ -131,6 +131,7 @@ export const highestScoreFrom = (words) => { // create an array that holds each word and its score, respectively // for example if `words` is ['X', 'XX', 'XXX', 'XXXX'], `wordScores` should be... // ["X", 8, "XX", 16, "XXX", 24, "XXXX", 32] + const wordScores = []; for (let i = 0; i < words.length; i++) { wordScores.push(words[i]) @@ -142,26 +143,31 @@ export const highestScoreFrom = (words) => { for (let i = wordScores.length - 1; i >= 1; i -= 2) { if (wordScores[i] > maxScore) { maxScore = wordScores[i]; - // maxWords.push(wordScores[i - 1]); } } - - - let winningWord = ''; - if (maxWords.length > 1) { - for (const word of maxWords) { - if (word.length >= 10) { - winningWord = word; - break; - } - if (word.length < winningWord.length || !(winningWord.length)) { - winningWord = word; - } + // find the words that have score that equals `maxScore` + let maxWords = []; + for (let i = wordScores.length - 1; i >= 1; i -= 2) { + if (wordScores[i] === maxScore) { + maxWords.push(wordScores[i - 1]); } } - return { - word: winningWord, - score: scoreWord(winningWord) - }; + + // let winningWord = ''; + // if (maxWords.length > 1) { + // for (const word of maxWords) { + // if (word.length >= 10) { + // winningWord = word; + // break; + // } + // if (word.length < winningWord.length || !(winningWord.length)) { + // winningWord = word; + // } + // } + // } + // return { + // word: winningWord, + // score: scoreWord(winningWord) + // }; }; \ No newline at end of file From 6d8a7691854bfa6786f3daf11b6cbd58a8ccd34c Mon Sep 17 00:00:00 2001 From: Esther Annorzie Date: Fri, 10 Jun 2022 18:10:25 -0400 Subject: [PATCH 26/29] Renamed variable name for tied words array --- src/adagrams.js | 42 +++++++++++++++++++++++------------------- 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/src/adagrams.js b/src/adagrams.js index b47daab8..56513adc 100644 --- a/src/adagrams.js +++ b/src/adagrams.js @@ -146,28 +146,32 @@ export const highestScoreFrom = (words) => { } } - // find the words that have score that equals `maxScore` - let maxWords = []; + // find the words with a score that equals `maxScore` + let tieScoreWords = []; for (let i = wordScores.length - 1; i >= 1; i -= 2) { if (wordScores[i] === maxScore) { - maxWords.push(wordScores[i - 1]); + tieScoreWords.push(wordScores[i - 1]); } } - // let winningWord = ''; - // if (maxWords.length > 1) { - // for (const word of maxWords) { - // if (word.length >= 10) { - // winningWord = word; - // break; - // } - // if (word.length < winningWord.length || !(winningWord.length)) { - // winningWord = word; - // } - // } - // } - // return { - // word: winningWord, - // score: scoreWord(winningWord) - // }; + /* + Loop through the words in `tieScoreWords` + + */ + let winningWord = ''; + if (tieScoreWords.length > 1) { + for (const word of tieScoreWords) { + if (word.length >= 10) { + winningWord = word; + break; + } + if (word.length < winningWord.length || !(winningWord.length)) { + winningWord = word; + } + } + } + return { + word: winningWord, + score: scoreWord(winningWord) + }; }; \ No newline at end of file From 50d4badfc42b9bc8b49896ac4ba23612837e2e37 Mon Sep 17 00:00:00 2001 From: Esther Annorzie Date: Fri, 10 Jun 2022 20:58:48 -0400 Subject: [PATCH 27/29] Changed wordScores loops to iterate forward, passed wave 4 --- src/adagrams.js | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/src/adagrams.js b/src/adagrams.js index 56513adc..4a128820 100644 --- a/src/adagrams.js +++ b/src/adagrams.js @@ -128,50 +128,44 @@ export const scoreWord = (word) => { export const highestScoreFrom = (words) => { // Implement this method for wave 1 - // create an array that holds each word and its score, respectively - // for example if `words` is ['X', 'XX', 'XXX', 'XXXX'], `wordScores` should be... - // ["X", 8, "XX", 16, "XXX", 24, "XXXX", 32] - const wordScores = []; for (let i = 0; i < words.length; i++) { wordScores.push(words[i]) wordScores.push(scoreWord(words[i])) } - // find the max score in `wordScores` let maxScore = 0; - for (let i = wordScores.length - 1; i >= 1; i -= 2) { + for (let i = 1; i < wordScores.length; i += 2) { if (wordScores[i] > maxScore) { maxScore = wordScores[i]; } } - // find the words with a score that equals `maxScore` let tieScoreWords = []; - for (let i = wordScores.length - 1; i >= 1; i -= 2) { + for (let i = 1; i < wordScores.length; i += 2) { if (wordScores[i] === maxScore) { tieScoreWords.push(wordScores[i - 1]); } } - /* - Loop through the words in `tieScoreWords` - - */ let winningWord = ''; if (tieScoreWords.length > 1) { for (const word of tieScoreWords) { - if (word.length >= 10) { + if (word.length < winningWord.length || !(winningWord.length)) { winningWord = word; - break; } - if (word.length < winningWord.length || !(winningWord.length)) { + if (word.length >= 10) { winningWord = word; + break; } } } + else { + winningWord = tieScoreWords[0]; + } + return { word: winningWord, - score: scoreWord(winningWord) + score: maxScore }; }; \ No newline at end of file From 944c72a98fbf732acd30d6515c390b3c8068c91a Mon Sep 17 00:00:00 2001 From: Esther Annorzie Date: Fri, 10 Jun 2022 21:15:50 -0400 Subject: [PATCH 28/29] Renamed scoreChart to availableLetters, remove stray file --- .gitignore | 4 +++- .vscode/settings.json | 6 ------ src/adagrams.js | 10 +++++----- 3 files changed, 8 insertions(+), 12 deletions(-) delete mode 100644 .vscode/settings.json diff --git a/.gitignore b/.gitignore index f6851a87..a081031c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,6 @@ node_modules package.json.lock .DS_Store -coverage \ No newline at end of file +coverage +.vscode +.gitignore \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index f247b4fe..00000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "cSpell.enableFiletypes": [ - "!javascript", - "!markdown" - ] -} \ No newline at end of file diff --git a/src/adagrams.js b/src/adagrams.js index 4a128820..e7474b2d 100644 --- a/src/adagrams.js +++ b/src/adagrams.js @@ -1,6 +1,6 @@ export const drawLetters = () => { // Implement this method for wave 1 - const scoreChart = { + const availableLetters = { A: 9, B: 2, C: 2, @@ -31,7 +31,7 @@ export const drawLetters = () => { let letters = []; - for (const [letter, inputLetterFreq] of Object.entries(scoreChart)) { + for (const [letter, inputLetterFreq] of Object.entries(availableLetters)) { for (let i = 0; i < inputLetterFreq; i++) { letters.push(letter); } @@ -83,7 +83,7 @@ export const usesAvailableLetters = (input, lettersInHand) => { export const scoreWord = (word) => { // Implement this method for wave 3 - const scoreChart = { + const availableLetters = { A: 1, B: 3, C: 3, @@ -114,8 +114,8 @@ export const scoreWord = (word) => { let score = 0; for (const letter of word) { - if (letter.toUpperCase() in scoreChart) { - score += scoreChart[letter.toUpperCase()]; + if (letter.toUpperCase() in availableLetters) { + score += availableLetters[letter.toUpperCase()]; } } From 22307c05b95f37821bb1e38b88b4f97ead1ca869 Mon Sep 17 00:00:00 2001 From: Esther Annorzie Date: Fri, 10 Jun 2022 23:52:18 -0400 Subject: [PATCH 29/29] Edited gitignore --- .gitignore | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index a081031c..86f5fb02 100644 --- a/.gitignore +++ b/.gitignore @@ -2,5 +2,4 @@ node_modules package.json.lock .DS_Store coverage -.vscode -.gitignore \ No newline at end of file +.vscode \ No newline at end of file