-
Notifications
You must be signed in to change notification settings - Fork 447
Expand file tree
/
Copy pathmastermind.js
More file actions
81 lines (67 loc) · 1.69 KB
/
mastermind.js
File metadata and controls
81 lines (67 loc) · 1.69 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
'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) {
let solution = 'abcd'; // Comment this out to generate a random solution
if (guess === solution) {
return 'you guessed it!';
} else {
return 'that is wrong.';
}
}
function getPrompt() {
rl.question('guess: ', (guess) => {
mastermind(guess);
console.log(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();
}