Skip to content
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

To submit #38

Open
wants to merge 1 commit into
base: master
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
146 changes: 146 additions & 0 deletions player.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,146 @@
var Scrabble = require('./scrabble');
var TileBag = require('./tilebag');
var util = require('./util');


// CONSTRUCTOR ****************************************************
var Player = function(name) {
this.name = name;
this.plays = [];
this.tiles = [];
this.scrabble = new Scrabble;
this.tilebag = new TileBag;
}


// PROTOTYPES ****************************************************
Player.prototype.play = function(word) {
if (util.stringOK(word)[0] ) {
if (this.hasWon()) {
return false;
} else {
this.plays.push(word);
}
} else {
return util.stringOK(word)[1] // Error message
};
};

Player.prototype.totalScore = function() {
var arrayOfScores = this.scrabble.createScoreArray(this.plays);
return util.sum(arrayOfScores)
};

Player.prototype.hasWon = function() {
return (this.totalScore() > 100) ? true : false;
};

Player.prototype.highestScoringWord = function() {
return this.scrabble.highestScoredWord(this.plays);
};

Player.prototype.highestWordScore = function() {
return this.scrabble.score(this.highestScoringWord());
};

// NOT FINISHED
// Player.prototype.drawTiles = function() {
// var tilesNeeded = 7 - this.tiles.length;
// var newTiles = this.tilebag.drawTiles(tilesNeeded);
// this.tilebag.tilebag = this.tilebag.tilebag.concat(newTiles);
// return this.tilebag.tilebag
// };


// TESTING the OUTPUT ****************************************************

// console.log();
// console.log("***************************");
// console.log("TESTS OF PLAYER");
// var andy = new Player('Andy');
//
// console.log(andy.name);
// console.log(andy.play("aaaaa7"));
// console.log(andy.play([]));
// console.log(andy.play(7));
// console.log(andy.play("aaaaa"));
// console.log(andy.plays);
//
// console.log(andy.play("aaaaaaaa"));
// console.log(andy.plays);
//
// console.log();
// console.log('Has won? ' + andy.hasWon());
// console.log(andy.play("r"));
// console.log(andy.plays);
// console.log(andy.totalScore());
// console.log('Has won? ' + andy.hasWon());
//
// console.log();
// console.log('Has won? ' + andy.hasWon());
// console.log(andy.play("aaaaaaa"));
// console.log(andy.plays);
// console.log(andy.totalScore());
// console.log('Has won? ' + andy.hasWon());
//
// console.log();
// console.log('Has won? ' + andy.hasWon());
// console.log(andy.play("aaaaaa"));
// console.log(andy.plays);
// console.log(andy.totalScore());
// console.log('Has won? ' + andy.hasWon());
//
// console.log();
// console.log('Has won? ' + andy.hasWon());
// console.log(andy.play("aaaaaa"));
// console.log(andy.plays);
// console.log(andy.totalScore());
// console.log('Has won? ' + andy.hasWon());
//
// console.log();
// console.log('Has won? ' + andy.hasWon());
// console.log(andy.play("aaaaaa"));
// console.log(andy.plays);
// console.log(andy.totalScore());
// console.log('Has won? ' + andy.hasWon());
//
// console.log();
// console.log('Has won? ' + andy.hasWon());
// console.log(andy.play("aaaaaa"));
// console.log(andy.plays);
// console.log(andy.totalScore());
// console.log('Has won? ' + andy.hasWon());
//
// console.log();
// console.log('Has won? ' + andy.hasWon());
// console.log(andy.play("aaaaaa"));
// console.log(andy.plays);
// console.log(andy.totalScore());
// console.log('Has won? ' + andy.hasWon());
//
// console.log();
// console.log('Has won? ' + andy.hasWon());
// console.log(andy.play("aaaaaa"));
// console.log(andy.plays);
// console.log(andy.totalScore());
// console.log('Has won? ' + andy.hasWon());
//
// console.log();
// console.log('Has won? ' + andy.hasWon());
// console.log(andy.play("a"));
// console.log(andy.plays);
// console.log(andy.totalScore());
// console.log('Has won? ' + andy.hasWon());
//
// console.log();
// console.log('Has won? ' + andy.hasWon());
// console.log(andy.play("a"));
// console.log(andy.plays);
// console.log(andy.totalScore());
// console.log('Has won? ' + andy.hasWon());
//
// console.log();
// console.log();
// console.log();
// console.log(andy.highestScoringWord());
// console.log(andy.highestWordScore());
108 changes: 104 additions & 4 deletions scrabble.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,108 @@
var Scrabble = function() {};
var util = require('./util');

// YOUR CODE HERE
Scrabble.prototype.helloWorld = function() {
return 'hello world!';

// CONSTRUCTOR ****************************************************
var Scrabble = function() {
this.scoreTable = {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};
};


// PROTOTYPES ****************************************************
Scrabble.prototype.score = function(word) {
if (util.stringOK(word)[0]) {
var wordUpperCase = word.toUpperCase();
var count = 0;
word.length === 7 ? count += 50 : count;
for (var ind = 0; ind < word.length; ind++) {
count += this.scoreTable[wordUpperCase[ind]];
};
return count;
} else {
return util.stringOK(word)[1]; // Error message
};
};

Scrabble.prototype.createScoreArray = function (arrayOfWords) {
var self = this;
var scoreArray = arrayOfWords.map(function(x) {return self.score(x);});
return scoreArray;
};


Scrabble.prototype.highestScoredWords = function (arrayOfWords) {
var scoreArray = this.createScoreArray(arrayOfWords);
var wordArray = [];
var max = Math.max.apply(Math, scoreArray);
for (var index = 0; index < scoreArray.length; index++) {
if (scoreArray[index] >= max){
wordArray.push(arrayOfWords[index]);
}
};
var wordArraySorted = wordArray.sort(function (a, b) {
return a.length - b.length;
});
return wordArraySorted
};


Scrabble.prototype.highestScoredWord = function (arrayOfWords) {
if (util.arrayOK(arrayOfWords)) {
return "Something went wrong";
} else {
var sortedHighScoreWords = this.highestScoredWords(arrayOfWords);
var seven = util.findSeven(sortedHighScoreWords);
if (sortedHighScoreWords.length === 1) {
return sortedHighScoreWords[0];
} else if (seven.length >= 1) {
return seven[0];
} else {
return sortedHighScoreWords[0];
};
}
};



module.exports = Scrabble;



// TESTING the OUTPUT ****************************************************
console.log();
console.log("***************************");
console.log('TESTS OF SCRABBLE');

/*
var test = new Scrabble;
console.log(test.score());
console.log(test.score(''));
console.log(test.score(['hello']));
console.log(test.score(89));
console.log(test.score('hell089'));
console.log(test.score('hel lo'));
console.log(test.score('hello')); // 8
console.log(test.score('Rainbow')); // 62
console.log(test.score('rainbow')); // 62
console.log(test.score('zzzzzx')); // 58
console.log(test.score('risotdo')); // 58
console.log(test.score('wind')); // 8
console.log(test.score('to')); // 2
console.log(test.score('silly')); // 8
console.log(test.score('max')); // 12
*/




var testArr0 = [];
var testArr1 = ['silly','wind','hello'];
var testArr2 = ['zzzzzx','risotdo'];
var testArr3 = ['max','silly','wind'];
var testArr4 = ['rainbow','hello','risotto','to'];
var test = new Scrabble;
console.log(Array.isArray(test.createScoreArray(testArr0)));
console.log(test.createScoreArray(testArr0).length === 0);
console.log(test.createScoreArray(testArr1));
console.log(test.createScoreArray(testArr4)); // [62 , 8 , 57 , 2]
console.log(test.highestScoredWords(testArr1));
console.log(test.highestScoredWords(testArr4));
46 changes: 46 additions & 0 deletions tilebag.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
var util = require('./util');


// CONSTRUCTOR ****************************************************
var TileBag = function(){
this.tilebag
this.bagOfLetters = {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};
};


// PROTOTYPES ****************************************************
TileBag.prototype.drawTiles = function(numOfTiles) {
var tilesDrawn = [];
for (var i = 0; i < numOfTiles; i++) {
var draw = util.random(Object.keys(this.bagOfLetters));
tilesDrawn.push(draw);
this.bagOfLetters[draw] -= 1;
if (this.bagOfLetters[draw] === 0) {
delete this.bagOfLetters[draw];
};
};
return tilesDrawn
};

TileBag.prototype.tilesRemaining = function() {
var valuesArray = util.values(this.bagOfLetters);
return util.sum(valuesArray);
}

module.exports = TileBag;


// TESTING the OUTPUT ****************************************************
console.log();
console.log("***************************");
console.log("TESTS OF TILEBAG");

/*
var testBag = new TileBag;
console.log(testBag.tilesRemaining());
console.log(testBag.drawTiles(4));
console.log(testBag.tilesRemaining());
console.log(testBag.drawTiles(90));
console.log(testBag.tilesRemaining());
console.log(testBag.bagOfLetters);
*/
45 changes: 45 additions & 0 deletions util.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@

module.exports = {
findSeven: function (wordArray) {
var sevenWords = wordArray.filter(function(x){ return x.length === 7});
return sevenWords;
},
findShortest: function (wordArray) {
var shortestWords = wordArray.filter(function(x){ return x.length === wordArray[0].lenght});
return shortestWords;
},
stringOK: function (str) {
if ((typeof(str) === 'string') && (/^[a-z]+$/i.test(str)) && str.length <= 7 ) {
return [true];
} else {
return [false, ("You entered '" + str + "'. Either this is not a string or the string you entered contain characters other than letters a-z, or the string has more then 7 characters.")];
}
},
arrayOK: function (arr) {
if (!Array.isArray(arr)) {
return false;
} else {
for (var i = 0; i < arr.length; i++) {
if (!this.stringOK(arr[i])) {
return false;
}
}
};
return true;
},
random: function (arr) {
return arr[Math.floor((Math.random()*arr.length))];
},
sum: function (arr) {
return arr.reduce(function (a, b) { return a + b;} ,0);
},
values: function (obj) {
var keyArray = Object.keys(obj);
var vals = [];
for (var ind = 0; ind < keyArray.length; ind++) {
vals.push(obj[keyArray[ind]])
};
return vals;
}

};