From 65dfc580bd412d09cd6895f340832bd6b667cc3f Mon Sep 17 00:00:00 2001 From: Collin Betori Date: Thu, 31 Jan 2019 07:54:44 -0600 Subject: [PATCH 1/2] 4.1 HW Initial Upload --- 04week/mastermind.js | 77 -------------------------------- 04week/mastermind/mastermind.js | 78 +++++++++++++++++++++++++++++++++ 04week/mastermind/package.json | 9 ++++ 04week/mastermind/test.js | 32 ++++++++++++++ package.json | 3 ++ 5 files changed, 122 insertions(+), 77 deletions(-) delete mode 100644 04week/mastermind.js create mode 100644 04week/mastermind/mastermind.js create mode 100644 04week/mastermind/package.json create mode 100644 04week/mastermind/test.js diff --git a/04week/mastermind.js b/04week/mastermind.js deleted file mode 100644 index 60e5cfa18..000000000 --- a/04week/mastermind.js +++ /dev/null @@ -1,77 +0,0 @@ -'use strict'; - -const assert = require('assert'); -const readline = require('readline'); -const rl = readline.createInterface({ - input: process.stdin, - output: process.stdout -}); - -let board = []; -let solution = ''; -let letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']; - -function printBoard() { - for (let i = 0; i < board.length; i++) { - console.log(board[i]); - } -} - -function generateSolution() { - for (let i = 0; i < 4; i++) { - const randomIndex = getRandomInt(0, letters.length); - solution += letters[randomIndex]; - } -} - -function getRandomInt(min, max) { - return Math.floor(Math.random() * (max - min)) + min; -} - -function generateHint() { - // your code here -} - -function mastermind(guess) { - solution = 'abcd'; // Comment this out to generate a random solution - // your code here -} - - -function getPrompt() { - rl.question('guess: ', (guess) => { - mastermind(guess); - printBoard(); - getPrompt(); - }); -} - -// Tests - -if (typeof describe === 'function') { - solution = 'abcd'; - describe('#mastermind()', () => { - it('should register a guess and generate hints', () => { - mastermind('aabb'); - assert.equal(board.length, 1); - }); - it('should be able to detect a win', () => { - assert.equal(mastermind(solution), 'You guessed it!'); - }); - }); - - describe('#generateHint()', () => { - it('should generate hints', () => { - assert.equal(generateHint('abdc'), '2-2'); - }); - it('should generate hints if solution has duplicates', () => { - assert.equal(generateHint('aabb'), '1-1'); - }); - - }); - -} else { - - generateSolution(); - getPrompt(); -} diff --git a/04week/mastermind/mastermind.js b/04week/mastermind/mastermind.js new file mode 100644 index 000000000..afa400bd3 --- /dev/null +++ b/04week/mastermind/mastermind.js @@ -0,0 +1,78 @@ +'use strict'; + +const readline = require('readline'); +const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout +}); + +let board = []; +let solution = ''; +let letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']; + +function printBoard() { + for (let i = 0; i < board.length; i++) { + console.log(board); + } +} + +function generateSolution() { + for (let i = 0; i < 4; i++) { + const randomIndex = getRandomInt(0, letters.length); + solution += letters[randomIndex]; + } +} + +function getRandomInt(min, max) { + return Math.floor(Math.random() * (max - min)) + min; +} + +function generateHint(solution, guess) { + let matchCheck = 0; + let indexCheck = 0; + for(let i=0; i { + mastermind(guess); + printBoard(); + getPrompt(); + }); +} + +module.exports={ + mastermind, + board, + generateHint, + generateSolution, + getPrompt +} + +getPrompt(); + + diff --git a/04week/mastermind/package.json b/04week/mastermind/package.json new file mode 100644 index 000000000..e168edcb5 --- /dev/null +++ b/04week/mastermind/package.json @@ -0,0 +1,9 @@ +{ + "scripts": { + "start": "start", + "test": "mocha" + }, + "devDependencies": { + "mocha": "^5.2.0" + } +} diff --git a/04week/mastermind/test.js b/04week/mastermind/test.js new file mode 100644 index 000000000..79f22f25a --- /dev/null +++ b/04week/mastermind/test.js @@ -0,0 +1,32 @@ +const assert = require("assert"); +let board = require('./mastermind').board; +let generateHint = require('./mastermind').generateHint; +let mastermind = require('./mastermind').mastermind; +let getPrompt = require('./mastermind').getPrompt; +let generateSolution = require('./mastermind').generateSolution; + +if (typeof describe === "function") { + solution = "abcd"; + guess = 'abcd'; + describe("#mastermind()", () => { + it("should register a guess and generate hints", () => { + mastermind("aabb"); + assert.equal(board.length, 1); + }); + it("should be able to detect a win", () => { + assert.equal(mastermind(solution), "You guessed it!"); + }); + }); + + describe("#generateHint()", () => { + it("should generate hints", () => { + assert.equal(generateHint("abdc"), "2-2"); + }); + it("should generate hints if solution has duplicates", () => { + assert.equal(generateHint("aabb"), "1-1"); + }); + }); +} else { + generateSolution(); + getPrompt(); +} diff --git a/package.json b/package.json index aff08712c..eeeb79a29 100644 --- a/package.json +++ b/package.json @@ -28,5 +28,8 @@ "mocha": "^5.0.0", "postcss-html": "^0.34.0", "stylelint": "^7.13.0" + }, + "devDependencies": { + "mocha": "^5.2.0" } } From f7912510462582b549644ff25bef6d9e2c1f80fa Mon Sep 17 00:00:00 2001 From: Collin Betori Date: Thu, 31 Jan 2019 16:35:25 -0600 Subject: [PATCH 2/2] Final 4.1HW --- 04week/mastermind/mastermind.js | 58 ++++---- 04week/mastermind/package-lock.json | 199 ++++++++++++++++++++++++++++ 04week/mastermind/package.json | 5 +- 04week/mastermind/test.js | 1 - 4 files changed, 238 insertions(+), 25 deletions(-) create mode 100644 04week/mastermind/package-lock.json diff --git a/04week/mastermind/mastermind.js b/04week/mastermind/mastermind.js index afa400bd3..9a45947b6 100644 --- a/04week/mastermind/mastermind.js +++ b/04week/mastermind/mastermind.js @@ -10,9 +10,10 @@ let board = []; let solution = ''; let letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']; -function printBoard() { +function printBoard(guess) { + board.push(guess) for (let i = 0; i < board.length; i++) { - console.log(board); + //console.log(board); } } @@ -27,36 +28,47 @@ function getRandomInt(min, max) { return Math.floor(Math.random() * (max - min)) + min; } -function generateHint(solution, guess) { - let matchCheck = 0; - let indexCheck = 0; - for(let i=0; i -1){ + correctLetter = correctLetter + 1; + solutionArray[i] = null; } } - return matchCheck + '-' + indexCheck; + console.log('Hint: '+ correctLetterLocations + '-' + correctLetter); + return correctLetterLocations + '-' + correctLetter; } -function mastermind() { +function mastermind(guess) { solution = 'abcd'; - guess = 'abcd'; - printBoard(board.push(solution)); - if(guess === solution){ + + if (guess === solution) { + console.log("You guessed it!") return "You guessed it!" - }else{ - generateHint() + } else { + console.log("Wrong") + generateHint(guess); } - // Comment this out to generate a random solution + printBoard(guess); + // Comment this out to generate a random solution // your code here } - function getPrompt() { rl.question('guess: ', (guess) => { mastermind(guess); @@ -65,7 +77,7 @@ function getPrompt() { }); } -module.exports={ +module.exports = { mastermind, board, generateHint, diff --git a/04week/mastermind/package-lock.json b/04week/mastermind/package-lock.json new file mode 100644 index 000000000..6bf800238 --- /dev/null +++ b/04week/mastermind/package-lock.json @@ -0,0 +1,199 @@ +{ + "requires": true, + "lockfileVersion": 1, + "dependencies": { + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "colors": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz", + "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==" + }, + "commander": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "mocha": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", + "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", + "dev": true, + "requires": { + "browser-stdout": "1.3.1", + "commander": "2.15.1", + "debug": "3.1.0", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "glob": "7.1.2", + "growl": "1.10.5", + "he": "1.1.1", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "supports-color": "5.4.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + } + } +} diff --git a/04week/mastermind/package.json b/04week/mastermind/package.json index e168edcb5..89d80a325 100644 --- a/04week/mastermind/package.json +++ b/04week/mastermind/package.json @@ -5,5 +5,8 @@ }, "devDependencies": { "mocha": "^5.2.0" - } + }, + "dependencies": { + "colors": "^1.3.3" + } } diff --git a/04week/mastermind/test.js b/04week/mastermind/test.js index 79f22f25a..27674f766 100644 --- a/04week/mastermind/test.js +++ b/04week/mastermind/test.js @@ -7,7 +7,6 @@ let generateSolution = require('./mastermind').generateSolution; if (typeof describe === "function") { solution = "abcd"; - guess = 'abcd'; describe("#mastermind()", () => { it("should register a guess and generate hints", () => { mastermind("aabb");