-
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
Amethyst Megan G. #146
base: main
Are you sure you want to change the base?
Amethyst Megan G. #146
Changes from all commits
a52f2ce
0d0cd60
c8852f4
eb6a73b
6625a3f
352f51e
853f4db
c31b697
a9b3aa8
bfdaa2c
15fbcf2
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,153 @@ | ||
// import { random } from "core-js/core/number"; | ||
|
||
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_VALUES = { | ||
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, | ||
}; | ||
|
||
// create array of all letters | ||
const createLetterList = letters => { | ||
const letterList = []; | ||
for (const letter in letters) { | ||
for(let i = 0; i < letters[letter]; i++) { | ||
letterList.push(letter); | ||
} | ||
} | ||
return letterList; | ||
} | ||
|
||
// generates random letter | ||
const generateRandomLetter = () => { | ||
const letters = createLetterList(LETTER_POOL); | ||
const randomLetter = letters[Math.floor(Math.random() * letters.length)]; | ||
return randomLetter; | ||
} | ||
|
||
// draw 10 letters into hand | ||
// ensure each drawn letter is drawn no more than the total amount of that letter | ||
export const drawLetters = () => { | ||
// Implement this method for wave 1 | ||
const lettersDrawnForHand = []; | ||
|
||
while (lettersDrawnForHand.length < 10) { | ||
let randomLetter = generateRandomLetter(); | ||
const numberOfOccurences = lettersDrawnForHand.filter(element => element === randomLetter).length | ||
if ( numberOfOccurences < LETTER_POOL[randomLetter]){ | ||
lettersDrawnForHand.push(randomLetter); | ||
} | ||
} | ||
return lettersDrawnForHand; | ||
}; | ||
|
||
// handles input that doesn't contain letters in hand | ||
// handles the correct quantity of letters in hand | ||
export const usesAvailableLetters = (input, lettersInHand) => { | ||
// Implement this method for wave 2 | ||
const letterHandCopy = JSON.parse(JSON.stringify(lettersInHand)); | ||
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 are most likely aware of this now, but just in case you can make a copy array with the spread syntax like so |
||
|
||
for(let i = 0; i < input.length; i++) { | ||
let letterIndex = letterHandCopy.indexOf(input[i]); | ||
if (letterIndex === -1) { | ||
return false; | ||
} | ||
letterHandCopy[letterIndex] = ''; | ||
} | ||
return true; | ||
}; | ||
|
||
// scores each letter in the user submitted word | ||
// if word is 7 or more letters, word gets 8 bonus points | ||
export const scoreWord = (word) => { | ||
// Implement this method for wave 3 | ||
const playerWord = word.toUpperCase() | ||
let score = 0; | ||
|
||
for(const letter of playerWord) { | ||
score += LETTER_VALUES[letter]; | ||
} | ||
if (playerWord.length > 6) { | ||
score += 8; | ||
} | ||
|
||
return score; | ||
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. ⭐️ |
||
}; | ||
|
||
// finds the highest scoring word from all words submitted | ||
// in case of tie, will break tie based on shortest length unless word is 10 letters exactly | ||
export const highestScoreFrom = (words) => { | ||
// Implement this method for wave 4 | ||
|
||
let highestScore = 0; | ||
let highestScoringWord = ''; | ||
Comment on lines
+133
to
+134
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. If we know we want to return these variables in object form, could just initialize said object here? |
||
|
||
for(const word of words){ | ||
let score = scoreWord(word); | ||
|
||
if (score > highestScore) { | ||
highestScore = score; | ||
highestScoringWord = word; | ||
} | ||
else if (score === highestScore) { | ||
if(highestScoringWord.length != 10 && (word.length === 10 || word.length < highestScoringWord.length)) { | ||
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. Love the compound if statement very easy to follow! |
||
highestScoringWord = word | ||
} | ||
} | ||
} | ||
return { | ||
'score': highestScore, | ||
'word': highestScoringWord | ||
} | ||
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, Megs! As you probably noticed, I didn't give too much feedback due to the scope of the project (Translating your python code to Javascript code). I tried to just point out any glaring issues, if any. With that being said, if you want to discuss anything in greater detail, feel free to reach out to me! |
||
}; |
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.
So, when you defined
generateRandomLetter
, you make a call ofcreateLetteList
in it to create your list of letters from yourLETTER_POOL
. With this being said, every iteration of your while loop will make a new list of letters even though we don't really need a new list (it will look the same every time). I would suggest pulling it out of this function and callingcreateLetterList
somewhere above the while loop in this function.