-
Notifications
You must be signed in to change notification settings - Fork 447
Expand file tree
/
Copy pathmastermind.js
More file actions
106 lines (86 loc) · 2.24 KB
/
mastermind.js
File metadata and controls
106 lines (86 loc) · 2.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
'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(guess) {
// your code here
let randomArray = guess.split('');
let solutionArray = solution.split('');
let correctLetterLoc = 0;
let correctLetters = 0;
for (let i = 0; i < 4; i++) {
let targetIndex = solutionArray.indexOf(randomArray[i]);
if (targetIndex > -1) {
correctLetters++;
solutionArray[targetIndex] = null;
console.log(solutionArray);
}
}
return correctLetterLoc + '-' + correctLetters;
}
function checkForWin (guess, solution) {
if (guess === solution) {
return true;
} else {
return;
}
}
function mastermind(guess) {
solution = 'abcd'; // Comment this out to generate a random solution
let hint = generateHint(guess);
board.push(`Guess: ${guess} - Hint: ${hint}`);
if (checkForWin(guess, solution) == true) {
return "you guessed it!"
}
}
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();
}