From 579416a4a9e86690136a684695aa8d3c7c8bf5e8 Mon Sep 17 00:00:00 2001 From: jae Date: Mon, 6 Jun 2022 15:18:44 -0500 Subject: [PATCH 1/6] passing tests, no refactoring or class --- src/adagrams.js | 251 +++++++++++++++++++++++++++++++++++++++++- test/adagrams.test.js | 12 +- 2 files changed, 255 insertions(+), 8 deletions(-) diff --git a/src/adagrams.js b/src/adagrams.js index ebc2839c..dd47184e 100644 --- a/src/adagrams.js +++ b/src/adagrams.js @@ -1,15 +1,258 @@ +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, +}; + + + + +const letterScore = { + 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, + }; + + + +// If the length of the word is 7, 8, 9, or 10, +// then the word gets an additional 8 points + + + +// CONSIDER CHANGING DATA STRUCTURE TO REFLECT ## OF LETTERS (PROBABILITY!) +// for letterCopy export const drawLetters = () => { - // Implement this method for wave 1 + let letterBank = [] + let letterCopy = Object.assign({}, LETTER_POOL) + let i = 0 + let keys = Object.keys(letterCopy) + // let prop = keys[Math.floor(Math.random() * keys.length)] + while (i < 10) { + let prop = keys[Math.floor(Math.random() * keys.length)] + if (letterCopy[prop] > 0){ + letterBank[i] = prop; + letterCopy[prop] -= 1; + + i ++; + } + } + // console.log(letterBank); + return letterBank; }; + +// console.log(letterBank()); + export const usesAvailableLetters = (input, lettersInHand) => { - // Implement this method for wave 2 + const handHash = {}; + let hashInput = {}; + let valid = [] + + for (const letter of lettersInHand){handHash[letter] = handHash[letter] ? handHash[letter] + 1 : 1; + }; + + for (const letter of input){ + if (letter in handHash){ + hashInput[letter] = hashInput[letter]? hashInput[letter] + 1 : 1; + }if (hashInput[letter] <= handHash[letter]){ + valid.push(letter) + } + }; + if (valid.length == input.length){ + return true; + }else{ + return false; + } + +}; + +// letterScore +// Letter Value +// [A, E, I, O, U, L, N, R, S, T] 1 +// [D, G] 2 +// [B, C, M, P] 3 +// [F, H, V, W, Y] 4 +// [K] 5 +// [J, X] 8 +// [Q, Z] 10 + +// If the length of the word is 7, 8, 9, or 10, +// then the word gets an additional 8 points + +export const wordInfo = (word) => { + let wordInfoDict = {} + if (word.length == 0){ + return 0; + } + const input = word.toUpperCase() + let wordHash = {}; + let counter = word.length > 6 ? 8 : 0; + + for (const letter of input){ + + wordHash[letter] = wordHash[letter]? (wordHash[letter] + letterScore[letter]) : letterScore[letter]; + } + for (const key in wordHash) { + counter += wordHash[key]; + }wordInfoDict['word'] = word; + wordInfoDict['score'] = counter; + return wordInfoDict; + }; + export const scoreWord = (word) => { - // Implement this method for wave 3 + if (word.length == 0){ + return 0; + } + let results = wordInfo(word); + return results['score']; }; + // wordInfo(word); + +// if (word.length == 0){ +// return 0; +// } +// const input = word.toUpperCase() +// let wordHash = {}; +// let counter = word.length > 6 ? 8 : 0; + +// for (const letter of input){ + +// wordHash[letter] = wordHash[letter]? (wordHash[letter] + letterScore[letter]) : letterScore[letter]; +// } +// for (const key in wordHash) { +// counter += wordHash[key]; +// } +// return counter; + +// }; + +// it("returns a hash that contains the word and score of best word in an array", () => { +// const words = ["X", "XX", "XXX", "XXXX"]; + export const highestScoreFrom = (words) => { - // Implement this method for wave 1 + let winningScore = {} + let allInfo = [] + let scores = [] + let allBest = [] + for (const word of words){ + if(word.length == 10){ + return wordInfo(word); + } + let amnt = scoreWord(word); + scores.push(amnt) + } + const winner = Math.max(...scores); + const word_sort = words.sort((a,b) => a.length - b.length); + + for (const word of word_sort){ + let word_dict = wordInfo(word); + if (word_dict.score == winner){ + allBest.push(word_dict)}; + } + // if (allBest.length > 1) { + // allBest.sort((a,b) => a.length - b.length); + // } + // let min = Math.min(...allBest.map(({ length }) => length)); + // let shortest_word = Math.min(...allBest) + // console.log(allBest[0]); + // console.log('ONE WORD'); + return allBest[0]; + + + }; + +// export const highestScoreFrom = (words) => { +// let winningScore = {} +// let allInfo = [] +// let scores = [] +// for (const word of words){ +// if(word.length == 10){ +// return wordInfo(word); +// } +// allInfo.push(wordInfo(word)); +// let amnt = scoreWord(word); +// scores.push(amnt) +// }const winner = Math.max(...scores); +// const index = scores.indexOf(winner); +// for (const word of words) +// console.log(words[index], winner); +// let winning_word = words[index]; + +// winningScore['word'] = winning_word; +// winningScore['score'] = winner; +// console.log(winningScore); +// if (winningScore.length > 1){ +// return winningScore[0]; +// } +// return winningScore; + +// }; + + +// export const highestScoreFrom = (words) => { +// let winningScore = {} +// let scores = [] +// for (const word of words){ +// let amnt = scoreWord(word); +// scores.push(amnt) +// }const winner = Math.max(...scores); +// const index = scores.indexOf(winner); +// console.log(words[index], winner); +// let winning_word = words[index]; + +// winningScore['word'] = winning_word; +// winningScore['score'] = winner; +// return winningScore; + +// }; diff --git a/test/adagrams.test.js b/test/adagrams.test.js index 1a0dc94e..2320102d 100644 --- a/test/adagrams.test.js +++ b/test/adagrams.test.js @@ -38,7 +38,7 @@ describe("Adagrams", () => { describe("drawLetters", () => { it("draws ten letters from the letter pool", () => { const drawn = drawLetters(); - + expect(drawn).toHaveLength(10); }); @@ -120,7 +120,10 @@ 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 +136,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 +148,8 @@ 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 265a44a3bf257c992fb8cd85cb2d1856c14cafb3 Mon Sep 17 00:00:00 2001 From: jae Date: Mon, 6 Jun 2022 17:52:01 -0500 Subject: [PATCH 2/6] refactoring of first funciton // creating new data set for letter_bank --- src/adagrams.js | 165 ++++++++++++++---------------------------------- 1 file changed, 49 insertions(+), 116 deletions(-) diff --git a/src/adagrams.js b/src/adagrams.js index dd47184e..f87c6b98 100644 --- a/src/adagrams.js +++ b/src/adagrams.js @@ -28,6 +28,31 @@ const LETTER_POOL = { }; +const letter = Object.keys(LETTER_POOL); +const vals = Object.keys(LETTER_POOL).map(key => LETTER_POOL[key]); +const letter_list = [] +let i = 0 +for (i = 0; i < letter.length; i++){ + let count = 0 + while (count != vals[i]){ + letter_list.push(letter[i]) + count += 1} + // i += 1; + + } + +export const drawLetters = () => { + const set = new Set(); + while (set.size !== 10) { + set.add(Math.floor(Math.random() * letter_list.length)); + } + const numbers = [...set]; + let hand = [] + for (const num of numbers){ + hand.push(letter_list[num]) + }return hand; +}; + const letterScore = { @@ -61,31 +86,26 @@ const letterScore = { -// If the length of the word is 7, 8, 9, or 10, -// then the word gets an additional 8 points - - - // CONSIDER CHANGING DATA STRUCTURE TO REFLECT ## OF LETTERS (PROBABILITY!) // for letterCopy -export const drawLetters = () => { - let letterBank = [] - let letterCopy = Object.assign({}, LETTER_POOL) - let i = 0 - let keys = Object.keys(letterCopy) - // let prop = keys[Math.floor(Math.random() * keys.length)] - while (i < 10) { - let prop = keys[Math.floor(Math.random() * keys.length)] - if (letterCopy[prop] > 0){ - letterBank[i] = prop; - letterCopy[prop] -= 1; +// export const drawLetters = () => { +// let letterBank = [] +// let letterCopy = Object.assign({}, LETTER_POOL) +// let i = 0 +// let keys = Object.keys(letterCopy) +// // let prop = keys[Math.floor(Math.random() * keys.length)] +// while (i < 10) { +// let prop = keys[Math.floor(Math.random() * keys.length)] +// if (letterCopy[prop] > 0){ +// letterBank[i] = prop; +// letterCopy[prop] -= 1; - i ++; - } - } - // console.log(letterBank); - return letterBank; -}; +// i ++; +// } +// } +// // console.log(letterBank); +// return letterBank; +// }; // console.log(letterBank()); @@ -113,21 +133,9 @@ export const usesAvailableLetters = (input, lettersInHand) => { }; -// letterScore -// Letter Value -// [A, E, I, O, U, L, N, R, S, T] 1 -// [D, G] 2 -// [B, C, M, P] 3 -// [F, H, V, W, Y] 4 -// [K] 5 -// [J, X] 8 -// [Q, Z] 10 - -// If the length of the word is 7, 8, 9, or 10, -// then the word gets an additional 8 points export const wordInfo = (word) => { - let wordInfoDict = {} + let wordInfoObj = {} if (word.length == 0){ return 0; } @@ -141,13 +149,12 @@ export const wordInfo = (word) => { } for (const key in wordHash) { counter += wordHash[key]; - }wordInfoDict['word'] = word; - wordInfoDict['score'] = counter; - return wordInfoDict; + }wordInfoObj['word'] = word; + wordInfoObj['score'] = counter; + return wordInfoObj; }; - export const scoreWord = (word) => { if (word.length == 0){ return 0; @@ -155,28 +162,6 @@ export const scoreWord = (word) => { let results = wordInfo(word); return results['score']; }; - // wordInfo(word); - -// if (word.length == 0){ -// return 0; -// } -// const input = word.toUpperCase() -// let wordHash = {}; -// let counter = word.length > 6 ? 8 : 0; - -// for (const letter of input){ - -// wordHash[letter] = wordHash[letter]? (wordHash[letter] + letterScore[letter]) : letterScore[letter]; -// } -// for (const key in wordHash) { -// counter += wordHash[key]; -// } -// return counter; - -// }; - -// it("returns a hash that contains the word and score of best word in an array", () => { -// const words = ["X", "XX", "XXX", "XXXX"]; export const highestScoreFrom = (words) => { @@ -191,6 +176,8 @@ export const highestScoreFrom = (words) => { let amnt = scoreWord(word); scores.push(amnt) } + + // find max score & sort words by length const winner = Math.max(...scores); const word_sort = words.sort((a,b) => a.length - b.length); @@ -198,61 +185,7 @@ export const highestScoreFrom = (words) => { let word_dict = wordInfo(word); if (word_dict.score == winner){ allBest.push(word_dict)}; - } - // if (allBest.length > 1) { - // allBest.sort((a,b) => a.length - b.length); - // } - // let min = Math.min(...allBest.map(({ length }) => length)); - // let shortest_word = Math.min(...allBest) - // console.log(allBest[0]); - // console.log('ONE WORD'); - return allBest[0]; - - + } return allBest[0]; }; -// export const highestScoreFrom = (words) => { -// let winningScore = {} -// let allInfo = [] -// let scores = [] -// for (const word of words){ -// if(word.length == 10){ -// return wordInfo(word); -// } -// allInfo.push(wordInfo(word)); -// let amnt = scoreWord(word); -// scores.push(amnt) -// }const winner = Math.max(...scores); -// const index = scores.indexOf(winner); -// for (const word of words) -// console.log(words[index], winner); -// let winning_word = words[index]; - -// winningScore['word'] = winning_word; -// winningScore['score'] = winner; -// console.log(winningScore); -// if (winningScore.length > 1){ -// return winningScore[0]; -// } -// return winningScore; - -// }; - - -// export const highestScoreFrom = (words) => { -// let winningScore = {} -// let scores = [] -// for (const word of words){ -// let amnt = scoreWord(word); -// scores.push(amnt) -// }const winner = Math.max(...scores); -// const index = scores.indexOf(winner); -// console.log(words[index], winner); -// let winning_word = words[index]; - -// winningScore['word'] = winning_word; -// winningScore['score'] = winner; -// return winningScore; - -// }; From 9230654e96a42cbee3ecc635ce21d3ed9faf40e8 Mon Sep 17 00:00:00 2001 From: jae Date: Tue, 7 Jun 2022 00:04:55 -0500 Subject: [PATCH 3/6] some refactoring --- src/adagrams.js | 354 ++++++++++++++++++++++++++---------------------- 1 file changed, 190 insertions(+), 164 deletions(-) diff --git a/src/adagrams.js b/src/adagrams.js index f87c6b98..a8c06e90 100644 --- a/src/adagrams.js +++ b/src/adagrams.js @@ -1,191 +1,217 @@ 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, -}; + 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 letter = Array.from(Object.keys(LETTER_POOL)); +const vals = Array.from(Object.values(LETTER_POOL)); -const letter = Object.keys(LETTER_POOL); -const vals = Object.keys(LETTER_POOL).map(key => LETTER_POOL[key]); const letter_list = [] let i = 0 for (i = 0; i < letter.length; i++){ - let count = 0 - while (count != vals[i]){ - letter_list.push(letter[i]) - count += 1} - // i += 1; - - } + letter_list.push(...letter[i].repeat(vals[i])) + }; -export const drawLetters = () => { - const set = new Set(); - while (set.size !== 10) { - set.add(Math.floor(Math.random() * letter_list.length)); - } - const numbers = [...set]; - let hand = [] - for (const num of numbers){ - hand.push(letter_list[num]) - }return hand; -}; +const letterScore = { + 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 set = new Set(); +// while (set.size !== 10) { +// set.add(Math.floor(Math.random() * letter_list.length)); +// } +// const numbers = [...set]; +// let hand = [] +// for (const num of numbers){ +// hand.push(letter_list[num]) +// }return hand; +// }; +export const drawLetters = () => { + // choose random index of letters from letterlist + const numbers = new Set(); + while (numbers.size !== 10) { + numbers.add(Math.floor(Math.random() * letter_list.length)); + } -const letterScore = { - 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 hand = [] + for (const num of numbers){ + hand.push(letter_list[num]) + }return hand; }; - + + +export const usesAvailableLetters = (input, lettersInHand) => { + const handHash = {}; + let hashInput = {}; + let valid = [] + + for (const letter of lettersInHand){handHash[letter] = handHash[letter] ? handHash[letter] + 1 : 1; + }; + + for (const letter of input){ + if (letter in handHash){ + hashInput[letter] = hashInput[letter]? hashInput[letter] + 1 : 1; + }if (hashInput[letter] <= handHash[letter]){ + valid.push(letter) + } + }; return valid.length == input.length; +}; +export const wordInfo = (word) => { + let wordInfoObj = {} + if (word.length == 0){ + return 0; + } + const input = word.toUpperCase() + let wordHash = {}; + let counter = word.length > 6 ? 8 : 0; + + for (const letter of input){ + wordHash[letter] = wordHash[letter]? (wordHash[letter] + letterScore[letter]) : letterScore[letter]; + // counter += wordHash[key]; + + } + for (const key in wordHash) { + counter += wordHash[key]; + }wordInfoObj['word'] = word; + wordInfoObj['score'] = counter; + return wordInfoObj; + +}; -// CONSIDER CHANGING DATA STRUCTURE TO REFLECT ## OF LETTERS (PROBABILITY!) -// for letterCopy -// export const drawLetters = () => { -// let letterBank = [] -// let letterCopy = Object.assign({}, LETTER_POOL) -// let i = 0 -// let keys = Object.keys(letterCopy) -// // let prop = keys[Math.floor(Math.random() * keys.length)] -// while (i < 10) { -// let prop = keys[Math.floor(Math.random() * keys.length)] -// if (letterCopy[prop] > 0){ -// letterBank[i] = prop; -// letterCopy[prop] -= 1; +export const scoreWord = (word) => { + if (word.length == 0){ + return 0; + } + let results = wordInfo(word); + return results['score']; +}; + +export const highestScoreFrom = (words) => { + let winningScore = {} + let allInfo = [] + let scores = [] + let allBest = [] + for (const word of words){ + if(word.length == 10){ + return wordInfo(word); + } + let amnt = scoreWord(word); + scores.push(amnt) + } + + // find max score & sort words by length + const winner = Math.max(...scores); + const word_sort = words.sort((a,b) => a.length - b.length); + + for (const word of word_sort){ + let word_dict = wordInfo(word); + if (word_dict.score == winner){ + allBest.push(word_dict)}; + } return allBest[0]; +}; + + + // CONSIDER CHANGING DATA STRUCTURE TO REFLECT ## OF LETTERS (PROBABILITY!) + // for letterCopy + // export const drawLetters = () => { + // let letterBank = [] + // let letterCopy = Object.assign({}, LETTER_POOL) + // let i = 0 + // let keys = Object.keys(letterCopy) + // // let prop = keys[Math.floor(Math.random() * keys.length)] + // while (i < 10) { + // let prop = keys[Math.floor(Math.random() * keys.length)] + // if (letterCopy[prop] > 0){ + // letterBank[i] = prop; + // letterCopy[prop] -= 1; + + // i ++; + // } + // } + // // console.log(letterBank); + // return letterBank; + // }; -// i ++; -// } + // console.log(letterBank()); + +// export class Adagrams { +// constructor(word, words, input, lettersInHand){ +// this.word = word; +// this.words = words; +// this.input = input; +// this.lettersInHand = lettersInHand; // } -// // console.log(letterBank); -// return letterBank; + +// // word(){ +// // return this.word; // }; - -// console.log(letterBank()); - -export const usesAvailableLetters = (input, lettersInHand) => { - const handHash = {}; - let hashInput = {}; - let valid = [] - for (const letter of lettersInHand){handHash[letter] = handHash[letter] ? handHash[letter] + 1 : 1; - }; - for (const letter of input){ - if (letter in handHash){ - hashInput[letter] = hashInput[letter]? hashInput[letter] + 1 : 1; - }if (hashInput[letter] <= handHash[letter]){ - valid.push(letter) - } - }; - if (valid.length == input.length){ - return true; - }else{ - return false; - } +// }; + -}; +// export default Adagrams; -export const wordInfo = (word) => { - let wordInfoObj = {} - if (word.length == 0){ - return 0; - } - const input = word.toUpperCase() - let wordHash = {}; - let counter = word.length > 6 ? 8 : 0; - - for (const letter of input){ - - wordHash[letter] = wordHash[letter]? (wordHash[letter] + letterScore[letter]) : letterScore[letter]; - } - for (const key in wordHash) { - counter += wordHash[key]; - }wordInfoObj['word'] = word; - wordInfoObj['score'] = counter; - return wordInfoObj; - -}; -export const scoreWord = (word) => { - if (word.length == 0){ - return 0; - } - let results = wordInfo(word); - return results['score']; -}; -export const highestScoreFrom = (words) => { - let winningScore = {} - let allInfo = [] - let scores = [] - let allBest = [] - for (const word of words){ - if(word.length == 10){ - return wordInfo(word); - } - let amnt = scoreWord(word); - scores.push(amnt) - } +// let myAdagrams = new Adagrams('word', ['XX', 'XS'], 'input', 'LETTERS'); - // find max score & sort words by length - const winner = Math.max(...scores); - const word_sort = words.sort((a,b) => a.length - b.length); - - for (const word of word_sort){ - let word_dict = wordInfo(word); - if (word_dict.score == winner){ - allBest.push(word_dict)}; - } return allBest[0]; + +// console.log(myAdagrams.word); -}; - From 7a26b878395d28d35c6ba753d903b3e9301935db Mon Sep 17 00:00:00 2001 From: jae Date: Tue, 7 Jun 2022 00:05:38 -0500 Subject: [PATCH 4/6] correct accidental delete --- test/adagrams.test.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/test/adagrams.test.js b/test/adagrams.test.js index 2320102d..37800388 100644 --- a/test/adagrams.test.js +++ b/test/adagrams.test.js @@ -1,3 +1,5 @@ +// import {Adagrams} from "../src/adagrams"; + import { drawLetters, usesAvailableLetters, @@ -5,6 +7,12 @@ import { highestScoreFrom, } from "adagrams"; +// import Adagrams from "../src/adagrams"; + +// import Adagrams from "../src/adagrams"; +// let myInstance = new Adagrams() + + const LETTER_POOL = { A: 9, B: 2, @@ -149,7 +157,7 @@ describe("Adagrams", () => { const correct = { word: "XXXX", score: scoreWord("XXXX") }; expect(highestScoreFrom(words)).toEqual(correct); - + }); describe("in case of tied score", () => { From 43be8771db4c2ceffa2f87d43a12afc28de4ee8d Mon Sep 17 00:00:00 2001 From: jae Date: Tue, 7 Jun 2022 00:26:02 -0500 Subject: [PATCH 5/6] delete unused var --- src/adagrams.js | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/src/adagrams.js b/src/adagrams.js index a8c06e90..32bf46a0 100644 --- a/src/adagrams.js +++ b/src/adagrams.js @@ -115,33 +115,26 @@ export const wordInfo = (word) => { return 0; } const input = word.toUpperCase() - let wordHash = {}; let counter = word.length > 6 ? 8 : 0; - + for (const letter of input){ - wordHash[letter] = wordHash[letter]? (wordHash[letter] + letterScore[letter]) : letterScore[letter]; - // counter += wordHash[key]; - + counter += (letterScore[letter]) } - for (const key in wordHash) { - counter += wordHash[key]; - }wordInfoObj['word'] = word; + wordInfoObj['word'] = input; wordInfoObj['score'] = counter; return wordInfoObj; - + }; export const scoreWord = (word) => { if (word.length == 0){ return 0; } - let results = wordInfo(word); - return results['score']; + let results = wordInfo(word).score; + return results; }; export const highestScoreFrom = (words) => { - let winningScore = {} - let allInfo = [] let scores = [] let allBest = [] for (const word of words){ From 70b5a5240595421e15b4ebdd8bb3499d61ed4e43 Mon Sep 17 00:00:00 2001 From: jae Date: Tue, 7 Jun 2022 14:37:11 -0500 Subject: [PATCH 6/6] remove some comments --- src/adagrams-working.js | 202 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 202 insertions(+) create mode 100644 src/adagrams-working.js diff --git a/src/adagrams-working.js b/src/adagrams-working.js new file mode 100644 index 00000000..280a7cec --- /dev/null +++ b/src/adagrams-working.js @@ -0,0 +1,202 @@ +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, +}; + + +const letter = Array.from(Object.keys(LETTER_POOL)); +const vals = Array.from(Object.values(LETTER_POOL)); + +const letter_list = [] +let i = 0 +for (i = 0; i < letter.length; i++){ + let count = 0 + letter_list.push(...letter[i].repeat(vals[i])) + // while (count != vals[i]){ + // letter_list.push(letter[i]) + + // count += 1} + }; + +const letterScore = { + 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, + }; + + + +// CONSIDER CHANGING DATA STRUCTURE TO REFLECT ## OF LETTERS (PROBABILITY!) +// for letterCopy +// export const drawLetters = () => { +// let letterBank = [] +// let letterCopy = Object.assign({}, LETTER_POOL) +// let i = 0 +// let keys = Object.keys(letterCopy) +// // let prop = keys[Math.floor(Math.random() * keys.length)] +// while (i < 10) { +// let prop = keys[Math.floor(Math.random() * keys.length)] +// if (letterCopy[prop] > 0){ +// letterBank[i] = prop; +// letterCopy[prop] -= 1; + +// i ++; +// } +// } +// // console.log(letterBank); +// return letterBank; +// }; + +// console.log(letterBank()); + +// class Adagrams { +// constructure(word, words, input, lettersInHand,){ +// this.word = word; +// this.words = words; +// this.input = input; +// this.lettersInHand = lettersInHand; +// } + + +export const drawLetters = () => { + const numbers = new Set(); + while (numbers.size !== 10) { + numbers.add(Math.floor(Math.random() * letter_list.length)); + } + // const numbers = [...set]; + let hand = [] + for (const num of numbers){ + hand.push(letter_list[num]) + }return hand; +}; + + + +export const usesAvailableLetters = (input, lettersInHand) => { + const handHash = {}; + let hashInput = {}; + let valid = [] + + for (const letter of lettersInHand){handHash[letter] = handHash[letter] ? handHash[letter] + 1 : 1; + }; + + for (const letter of input){ + if (letter in handHash){ + hashInput[letter] = hashInput[letter]? hashInput[letter] + 1 : 1; + }if (hashInput[letter] <= handHash[letter]){ + valid.push(letter) + } + }; + return valid.length == input.length; + + // if (valid.length == input.length){ + // return true; + // }else{ + // return false; + // } + +}; + + +export const wordInfo = (word) => { + let wordInfoObj = {} + if (word.length == 0){ + return 0; + } + const input = word.toUpperCase() + let wordHash = {}; + let counter = word.length > 6 ? 8 : 0; + + for (const letter of input){ + + wordHash[letter] = wordHash[letter]? (wordHash[letter] + letterScore[letter]) : letterScore[letter]; + } + for (const key in wordHash) { + counter += wordHash[key]; + }wordInfoObj['word'] = word; + wordInfoObj['score'] = counter; + return wordInfoObj; + +}; + +export const scoreWord = (word) => { + if (word.length == 0){ + return 0; + } + let results = wordInfo(word); + return results['score']; +}; + + +export const highestScoreFrom = (words) => { + let winningScore = {} + let allInfo = [] + let scores = [] + let allBest = [] + for (const word of words){ + if(word.length == 10){ + return wordInfo(word); + } + let amnt = scoreWord(word); + scores.push(amnt) + } + + // find max score & sort words by length + const winner = Math.max(...scores); + const word_sort = words.sort((a,b) => a.length - b.length); + + for (const word of word_sort){ + let word_dict = wordInfo(word); + if (word_dict.score == winner){ + allBest.push(word_dict)}; + } return allBest[0]; + +}; +