Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "node",
"name": "vscode-jest-tests.v2.js-adagrams",
"request": "launch",
"args": [
"--runInBand",
"--watchAll=false",
"--testNamePattern",
"${jest.testNamePattern}",
"--runTestsByPath",
"${jest.testFile}"
],
"cwd": "${workspaceFolder}",
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen",
"disableOptimisticBPs": true,
"program": "${workspaceFolder}/node_modules/.bin/jest",
"windows": {
"program": "${workspaceFolder}/node_modules/jest/bin/jest"
}
}
]
}
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@
"test": "jest",
"lint": "npx eslint",
"coverage": "open coverage/lcov-report/index.html",
"demo-game": "babel-node src/demo.js"
"demo-game": "babel-node src/demo.js",
"start": "node src/adagrams.js"
},
"repository": {
"type": "git",
Expand Down
108 changes: 103 additions & 5 deletions src/adagrams.js
Original file line number Diff line number Diff line change
@@ -1,15 +1,113 @@
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 scoreChart = {
'A': 1, 'E': 1, 'I': 1, 'O': 1, 'U': 1, 'L': 1, 'N': 1, 'R': 1, 'S': 1, 'T': 1,
'D': 2, 'G': 2,
'B': 3, 'C': 3, 'M': 3, 'P': 3,
'F': 4, 'H': 4, 'V': 4, 'W': 4, 'Y': 4,
'K': 5,
'J': 8, 'X': 8,
'Q': 10, 'Z': 10
};


export const drawLetters = () => {
// Implement this method for wave 1
// Create a frequency pool
const letterFrequency = [];

for (const [key, value] of Object.entries(letterPool)) {
for (let i = 0; i < value; i++) {
letterFrequency.push(key)
};
};
Comment on lines +45 to +49

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice work finding the javascript version of .items!


const hand = [];
let i = 1;
do{
const position = Math.floor(Math.random() * (letterFrequency.length-1));
const randomLetter = letterFrequency[position];
hand.push(randomLetter);
letterFrequency.splice(position, 1);
i++;
} while (i <= 10);
Comment on lines +53 to +59

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there a particular reason as to why you implemented a do...while loop rather than a while loop? The only difference is that the do...while loop is guaranteed to run at least once, but this isn't necessarily being leveraged here. (If you were just testing things out feel free to ignore this comment.)


return hand;

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Something extra to think about is how you could implement this same functionality with the ... syntax that is provided and if you think it provides any advantages against what you have.


};

export const usesAvailableLetters = (input, lettersInHand) => {
// Implement this method for wave 2
const word = input.toUpperCase();
const letterList = []
const letterBankCopy = lettersInHand.slice()

for (let letter of word) {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice, you used the appropriate for loop!

if (letterBankCopy.includes(letter)) {
letterList.push(letter);
letterBankCopy.splice(letter, 1)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These are inputs are going to be the same size (10) but what if they weren't? What if the input size varied? What would be the time complexity of your code? What CS fundamentals data structure did we learn about that is handy for keeping track of the number of occurrences?

} else return false;
} return true;
};

export const scoreWord = (word) => {
// Implement this method for wave 3
const upperCaseWord = word.toUpperCase();
let score = 0;

for (let letter of upperCaseWord) {
score = score + scoreChart[letter];
};

if (word.length > 6) {
score = score + 8;
};
console.log(score);
return score;
Comment on lines +79 to +90

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice work, very legible function! Don't forget to remove your console.logs!

};

export const highestScoreFrom = (words) => {
// Implement this method for wave 4
};
let bestWord = '';
let bestScore = 0;

for (let word of words) {
let score = scoreWord(word);
if (score > bestScore) {
bestWord = word;
bestScore = score;
} else if (score < bestScore) {
null;
Comment on lines +102 to +103

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this line serving some purpose I don't see? Right now it seems like it isn't actually contributing to your logic.

} else if (bestWord.length === 10) {
break;
} else if (word.length === 10 || word.length < bestWord.length) {
bestWord = word;
bestScore = score;
};
};
let result = {score: bestScore, word : bestWord};
return result;
};

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great work on making this logic easy to follow!

8 changes: 5 additions & 3 deletions test/adagrams.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,9 @@ 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", () => {
Expand All @@ -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") };
Expand All @@ -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);
});

describe("in case of tied score", () => {
Expand Down