-
Notifications
You must be signed in to change notification settings - Fork 169
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
SL - Presley #132
base: main
Are you sure you want to change the base?
SL - Presley #132
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,15 +1,169 @@ | ||
|
||
export const drawLetters = () => { | ||
// Implement this method for wave 1 | ||
const handOfLetters = []; | ||
|
||
const lettersPool = { | ||
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 createPool = function() { | ||
const pool = []; | ||
for (const [letter, quantity] of Object.entries(lettersPool)) { | ||
Comment on lines
+35
to
+36
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Nice job using const for these variables here |
||
for (let i = 0; i < quantity; i++) { | ||
pool.push(letter); | ||
} | ||
} | ||
|
||
return pool | ||
}; | ||
|
||
const getNum = function(pool) { | ||
const maxLength = pool.length - 1; | ||
const theNum = Math.floor(Math.random() * maxLength); | ||
return theNum | ||
}; | ||
|
||
const pool = createPool(); | ||
|
||
while(handOfLetters.length < 10) { | ||
const getTheNum = getNum(pool); | ||
const letterScore = function () { | ||
return pool[getTheNum]; | ||
} | ||
|
||
handOfLetters.push(letterScore()); | ||
pool.splice(getTheNum, 1); | ||
}; | ||
|
||
return handOfLetters | ||
}; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The helper functions createPool and getNum should be created outside of the function drawLetters, but since they'd all be in the adagrams.js file, your drawLetters function will still be able to access them. If you want to read more about benefits/disadvantages to nested functions, here's a resource: https://evgenii.info/nested-functions/ |
||
|
||
|
||
export const usesAvailableLetters = (input, lettersInHand) => { | ||
// Implement this method for wave 2 | ||
const lettersInHandCopy = [...lettersInHand]; | ||
const turnUpperCase = input.toUpperCase(); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Usually we use verbs for variables that refer to a function that does something. You could rename this to |
||
for (let letter of turnUpperCase) { | ||
if (lettersInHandCopy.includes(letter)) { | ||
const index = lettersInHandCopy.indexOf(letter); | ||
lettersInHandCopy.splice(index, 1); | ||
} else { | ||
return false; | ||
} | ||
} | ||
return true; | ||
}; | ||
|
||
export const scoreWord = (word) => { | ||
// Implement this method for wave 3 | ||
// This wave is still failing one test and I'm stuck on how to get it | ||
// to return 0 | ||
Comment on lines
+82
to
+83
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I ran the tests for scoreWord and they passed on my end. Your logic looks fine. I do see the tests for tied scores failing. |
||
|
||
const letterScores = { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Could also rename this with caps and underscore to indicate it's a hardcoded value that shouldn't be changed, like |
||
'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 totalScore = 0; | ||
if(word === '') { | ||
return totalScore; | ||
} | ||
Comment on lines
+115
to
+117
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. You can get rid of this here because if |
||
for (let letter of word.toUpperCase()) { | ||
totalScore += letterScores[letter]; | ||
} | ||
if(word.length > 6){ | ||
totalScore += 8; | ||
} | ||
|
||
return totalScore; | ||
}; | ||
|
||
export const highestScoreFrom = (words) => { | ||
// Implement this method for wave 4 | ||
const wordScoreLength = []; | ||
for (let word of words) { | ||
const wordDict = {}; | ||
wordDict['word'] = word; | ||
wordDict['score'] = scoreWord(word); | ||
wordDict['length'] = word.length; | ||
wordScoreLength.push(wordDict); | ||
} | ||
let maxWords = []; | ||
let maxScore = 0; | ||
|
||
for (let wordDict of wordScoreLength) { | ||
if (wordDict['score'] == maxScore) { | ||
maxWords.push(wordDict['word']); | ||
} else if (wordDict['score'] > maxScore) { | ||
maxScore = wordDict['score']; | ||
maxWords = []; | ||
maxWords.push(wordDict['word']); | ||
} | ||
} | ||
|
||
if (maxWords.length === 1) { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think the issue with the logic for handling ties is here. When I ran the tests, I saw there were times when maxWords.length != 1 (instead it had 2 words in it) |
||
return { | ||
word: maxWords[0], | ||
score: maxScore, | ||
}; | ||
} | ||
|
||
// From here: | ||
// create a for loop (possibly a for of loop) for word in maxWords | ||
// | ||
// that if the length of word is 10, return word & score | ||
// | ||
// then have an else statement that if the length of word is less than 10 | ||
// | ||
// find the word with the minimum length and store it in a let variable | ||
// | ||
// after looping through all the words and finding the shortest word | ||
// | ||
// return that word and the word's score | ||
}; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Since this is hardcoded value that shouldn't change (which it can't because you use
const
), you can rename this variable to LETTERS_POOL