Skip to content

Phoenix - Aksana #24

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

Open
wants to merge 6 commits into
base: main
Choose a base branch
from
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
159 changes: 155 additions & 4 deletions src/adagrams.js
Original file line number Diff line number Diff line change
@@ -1,15 +1,166 @@
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 scoreObj = {
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 = () => {
// Implement this method for wave 1
const letterArray = [];
for (const [letter, freq] of Object.entries(letterPool)) {
for (let num = 0; num < freq; num++) {
letterArray.push(letter);
};
}

const hand = [];
const letterArrayLen = letterArray.length;
const letterCount = {};

while (hand.length < 10 ){
let index = Math.floor(Math.random()*letterArrayLen);
let newLetter = letterArray[index];
if (!letterCount[newLetter]) {
letterCount[newLetter] = 0;
}

if (letterCount[newLetter] < letterPool[newLetter]){
hand.push(newLetter);
letterCount[newLetter] +=1;
}
}
console.log(hand)
return hand;
};
// Implement this method for wave 1

export const usesAvailableLetters = (input, lettersInHand) => {
let inputUp = input.toUpperCase();
// create an object with frequency of the letters in the input
// create an object with frequency of the letters in the lettersInHand
const inputCount = {};
const letterInHandCount = {};

for (const letter of inputUp) {
if(!inputCount[letter]){
inputCount[letter] = 1;
} else {
inputCount[letter] +=1;
}
}

for (const char of lettersInHand) {
if (!letterInHandCount[char]) {
letterInHandCount[char] = 1;
} else {
letterInHandCount[char] +=1;
}
}
// compare if the letter from input is in lettersInHand and it's frequency is not higher
for (const inputLetter of inputUp) {
if (!letterInHandCount[inputLetter] || inputCount[inputLetter] > letterInHandCount[inputLetter]){
return false;
}
}
return true;
};

// Implement this method for wave 2
};

export const scoreWord = (word) => {

export const scoreWord = (word) => {
const wordUp = word.toUpperCase();
let score =0;
for (const letter of wordUp) {
score += scoreObj[letter]
}
if (wordUp.length >=7){
score += 8;
}
return score;

// Implement this method for wave 3
};


export const highestScoreFrom = (words) => {
// Implement this method for wave 4
const wordScoreObj = {};
for (const word of words) {
wordScoreObj[word] = scoreWord(word);
}
let maxScore = 0;
let maxScoreWords = [];
for (const [word, wScore] of Object.entries(wordScoreObj)) {
if (wScore > maxScore) {
maxScore = wScore;
maxScoreWords = [word];
} else if (maxScore === wScore) {
maxScoreWords.push(word);
}
}
if (maxScoreWords.length === 1){
return { word: maxScoreWords[0], score: maxScore };
} else {
let bestScoreWord = maxScoreWords[0];
for (const maxWord of maxScoreWords){
if (maxWord.length === 10){
bestScoreWord = maxWord;
break;
} else if (maxWord.length < bestScoreWord.length) {
bestScoreWord = maxWord;
}
}
return { word: bestScoreWord, score: maxScore};
}
};
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,8 @@ describe("Adagrams", () => {
});

it("returns a score of 0 if given an empty input", () => {
throw "Complete test";
expectScores(0);
// throw "Complete test";
});

it("adds an extra 8 points if word is 7 or more characters long", () => {
Expand All @@ -133,7 +134,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 +146,8 @@ describe("Adagrams", () => {
const words = ["XXX", "XXXX", "X", "XX"];
const correct = { word: "XXXX", score: scoreWord("XXXX") };

throw "Complete test by adding an assertion";
//throw "Complete test by adding an assertion";
expect(highestScoreFrom(words)).toEqual(correct);
});

describe("in case of tied score", () => {
Expand Down
2 changes: 1 addition & 1 deletion test/demo/model.test.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import Model from 'demo/model';
import Adagrams from 'demo/adagrams';

describe.skip('Game Model', () => {
describe('Game Model', () => {
const config = {
players: [
'Player A',
Expand Down