-
Notifications
You must be signed in to change notification settings - Fork 169
Ev Montgomery - Cheetahs - S18 #131
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
base: main
Are you sure you want to change the base?
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,203 @@ | ||
//import { hasOwnMetadata } from "core-js/fn/reflect"; | ||
|
||
//import { forEach } from "core-js/core/array"; | ||
|
||
export const drawLetters = () => { | ||
// Implement this method for wave 1 | ||
const hand = []; | ||
|
||
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 makePoolArr = function() { | ||
const poolArr = []; | ||
for (const [letter, quantity] of Object.entries(letterPool)) { | ||
for (let i = 0; i < quantity; i++) { | ||
poolArr.push(letter); | ||
} | ||
} | ||
|
||
return poolArr | ||
}; | ||
|
||
const getRandNum = function(poolArr) { | ||
const maxLength = poolArr.length - 1; | ||
const randNum = Math.floor(Math.random() * maxLength); | ||
return randNum | ||
}; | ||
|
||
const poolArr = makePoolArr(); | ||
|
||
while(hand.length < 10) { | ||
//let letterPoolCopy = letterPool; | ||
//const poolArr = makePoolArr(); | ||
const randNum = getRandNum(poolArr); | ||
const letterValue = function () { | ||
return poolArr[randNum]; | ||
} | ||
Comment on lines
+60
to
+62
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. There's no need for a function. Instead, you can just do |
||
|
||
hand.push(letterValue()); | ||
poolArr.splice(randNum, 1); | ||
//letterPool[letterValue()] = (letterPool[letterValue()]) - 1; | ||
|
||
}; | ||
|
||
return hand | ||
}; | ||
|
||
export const usesAvailableLetters = (input, lettersInHand) => { | ||
// Implement this method for wave 2 | ||
let validLetterCounter = 0 | ||
for(let letter of input) { | ||
let index = lettersInHand.indexOf(letter); | ||
if(lettersInHand.includes(letter)){ | ||
lettersInHand.splice(index, 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. We do not want to modify the lettersInHand array. We should be making a copy of it at the beginning. If the user's hand loses letters every time we're just checking to see if the input has the correct letters, the user will be out of letters quickly. |
||
validLetterCounter += 1 | ||
} else { | ||
return false | ||
}; | ||
}; | ||
if(input.length === validLetterCounter){ | ||
return true | ||
}; | ||
|
||
}; | ||
|
||
export const scoreWord = (word) => { | ||
// Implement this method for wave 3 | ||
const scoreChart = { | ||
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. Again, this can be declared outside of the function so it doesn't have to be recreated every time the function is called. |
||
"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 | ||
} | ||
// for(let [letter, ptValue] in scoreChart){ | ||
// console.log(scoreChart[letter]) | ||
// }; | ||
|
||
let score = 0 | ||
//console.log(score) | ||
//console.log('word:', word) | ||
if(word === "") { | ||
return score | ||
}; | ||
|
||
for(let letter of word.toUpperCase()) { | ||
//console.log(letter) | ||
score += scoreChart[letter]; | ||
//console.log(score) | ||
} | ||
|
||
if(word.length > 6){ | ||
score += 8; | ||
} | ||
|
||
return score | ||
Comment on lines
+123
to
+140
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. Excellent! |
||
}; | ||
|
||
export const highestScoreFrom = (words) => { | ||
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. Great start! This gets us to the correct answer, but requires going through the list of words multiple times. There is a way to just go through the list once. This requires having an object that keeps track of the current highest-scoring word and checking it against the next word to see if it should be replaced until you make it through the whole list. |
||
// Implement this method for wave 4 | ||
const wordsAndScores = []; | ||
for(let word of words){ | ||
let wordObj = { | ||
"word": word, | ||
"score": scoreWord(word) | ||
}; | ||
wordsAndScores.push(wordObj); | ||
} | ||
//console.log(wordsAndScores); | ||
|
||
const scores = []; | ||
for(let wordObj of wordsAndScores){ | ||
scores.push(wordObj["score"]) | ||
}; | ||
//console.log(scores) | ||
|
||
const max_score = Math.max(...scores); | ||
//console.log(max_score) | ||
|
||
const indices = []; | ||
for(let i = 0; i < scores.length; i++){ | ||
if (scores[i] === max_score){ | ||
indices.push(i); | ||
} | ||
}; | ||
//console.log(indices) | ||
|
||
const possibleAnswers = []; | ||
if(indices.length === 1){ | ||
return wordsAndScores[indices[0]] | ||
} else { | ||
for(let index of indices){ | ||
possibleAnswers.push(wordsAndScores[index]) | ||
}; | ||
//console.log(possibleAnswers) | ||
}; | ||
Comment on lines
+160
to
179
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. Careful with indentation! It's not required to make Javascript work like in Python, but should still be done to make things easier to read. |
||
|
||
const possibleWords = []; | ||
for(let wordObj of possibleAnswers){ | ||
possibleWords.push(wordObj["word"]) | ||
}; | ||
//console.log(possibleWords) | ||
|
||
const wordLengths = []; | ||
for(let possibleWord of possibleWords){ | ||
wordLengths.push(possibleWord.length) | ||
}; | ||
//console.log(wordLengths) | ||
|
||
if(wordLengths.includes(10)){ | ||
const indexOfTen = wordLengths.indexOf(10); | ||
//console.log(possibleAnswers[indexOfTen]) | ||
return possibleAnswers[indexOfTen] | ||
} | ||
const smallestLength = Math.min(...wordLengths); | ||
//console.log(smallestLength); | ||
const indexOfSmallestLength = wordLengths.indexOf(smallestLength); | ||
return possibleAnswers[indexOfSmallestLength] | ||
}; | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -120,7 +120,9 @@ describe("Adagrams", () => { | |
}); | ||
|
||
it("returns a score of 0 if given an empty input", () => { | ||
throw "Complete test"; | ||
expectScores({ | ||
'': 0 | ||
Comment on lines
+123
to
+124
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. Excellent! |
||
}); | ||
}); | ||
|
||
it("adds an extra 8 points if word is 7 or more characters long", () => { | ||
|
@@ -133,7 +135,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 +147,7 @@ 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); | ||
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. Excellent! |
||
}); | ||
|
||
describe("in case of tied 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.
All of this can be done outside of the function. That way it doesn't all have to be re-created every time the drawLetters function is called. Great use of helper functions though!