project-braingames-simply
Version:
brain-games project
122 lines (110 loc) • 13.8 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.runGcdGame = exports.runCalcGame = exports.runEvenGame = undefined;
var _readlineSync = require('readline-sync');
var _readlineSync2 = _interopRequireDefault(_readlineSync);
var _commonFuncs = require('./commonFuncs');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var getRandom = function getRandom(minNum, maxNum) {
var min = minNum || 0;
var max = maxNum || 100;
return Math.floor(Math.random() * (max - min + 1)) + min;
};
var isCorrect = function isCorrect(user, userAnswer, rightAnswer) {
if (userAnswer === rightAnswer) {
console.log('Correct!');
} else {
console.log('"' + userAnswer + '" is wrong answer ;(. Correct answer was "' + rightAnswer + '"');
console.log('Let\'s try again, ' + user + '!');
}
return userAnswer === rightAnswer;
};
var getGCD = function getGCD(a, b) {
var maxNum = a > b ? a : b;
var gcd = 1;
for (var i = 1; i <= maxNum; i += 1) {
if (a % i === 0 && b % i === 0) gcd = i;
}
return gcd;
};
var runEvenGame = function runEvenGame(user, times) {
if (!user) (0, _commonFuncs.welcome)();
console.log('Answer "yes" if number even otherwise answer "no".');
var runTimes = times || 3;
var userName = user || (0, _commonFuncs.askName)();
for (var i = 0; i < runTimes; i += 1) {
var numQuestion = getRandom();
console.log('Question: ' + numQuestion);
var rightAnswer = numQuestion % 2 === 0 ? 'yes' : 'no';
var userAnswer = _readlineSync2.default.question('Your answer: ');
if (!isCorrect(userName, userAnswer, rightAnswer)) return;
}
console.log('Congratulations, ' + userName + '!');
};
var runCalcGame = function runCalcGame(user, times) {
if (!user) (0, _commonFuncs.welcome)();
console.log('What is the result of the expression?');
var runTimes = times || 3;
var userName = user || (0, _commonFuncs.askName)();
var expressionType = ['add', 'substract', 'multiply'];
var expressionTypeLength = expressionType.length - 1;
var add = function add(a, b) {
return a + b;
};
var substract = function substract(a, b) {
return a - b;
};
var multiply = function multiply(a, b) {
return a * b;
};
for (var i = 0; i < runTimes; i += 1) {
var a = getRandom();
var b = getRandom();
var expressionTypeNumber = getRandom(0, expressionTypeLength);
var rightAnswer = void 0;
var userAnswer = void 0;
switch (expressionTypeNumber) {
case 0:
console.log('Question: ' + a + ' + ' + b);
rightAnswer = add(a, b);
userAnswer = _readlineSync2.default.question('Your answer: ');
break;
case 1:
console.log('Question: ' + a + ' - ' + b);
rightAnswer = substract(a, b);
userAnswer = _readlineSync2.default.question('Your answer: ');
break;
case 2:
console.log('Question: ' + a + ' * ' + b);
rightAnswer = multiply(a, b);
userAnswer = _readlineSync2.default.question('Your answer: ');
break;
default:
break;
}
if (!isCorrect(userName, Number(userAnswer), rightAnswer)) return;
}
console.log('Congratulations, ' + userName + '!');
};
var runGcdGame = function runGcdGame(user, times) {
if (!user) (0, _commonFuncs.welcome)();
console.log('Find the greatest common divisor of given numbers.');
var runTimes = times || 3;
var userName = user || (0, _commonFuncs.askName)();
for (var i = 0; i < runTimes; i += 1) {
var multiply = getRandom(1, 10);
var a = getRandom(1, 10) * multiply;
var b = getRandom(1, 10) * multiply;
var rightAnswer = getGCD(a, b);
console.log('Question: ' + a + ' ' + b);
var userAnswer = _readlineSync2.default.question('Your answer: ');
if (!isCorrect(userName, Number(userAnswer), rightAnswer)) return;
}
console.log('Congratulations, ' + userName + '!');
};
exports.runEvenGame = runEvenGame;
exports.runCalcGame = runCalcGame;
exports.runGcdGame = runGcdGame;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9nYW1lcy5qcyJdLCJuYW1lcyI6WyJnZXRSYW5kb20iLCJtaW5OdW0iLCJtYXhOdW0iLCJtaW4iLCJtYXgiLCJNYXRoIiwiZmxvb3IiLCJyYW5kb20iLCJpc0NvcnJlY3QiLCJ1c2VyIiwidXNlckFuc3dlciIsInJpZ2h0QW5zd2VyIiwiY29uc29sZSIsImxvZyIsImdldEdDRCIsImEiLCJiIiwiZ2NkIiwiaSIsInJ1bkV2ZW5HYW1lIiwidGltZXMiLCJydW5UaW1lcyIsInVzZXJOYW1lIiwibnVtUXVlc3Rpb24iLCJyZWFkbGluZVN5bmMiLCJxdWVzdGlvbiIsInJ1bkNhbGNHYW1lIiwiZXhwcmVzc2lvblR5cGUiLCJleHByZXNzaW9uVHlwZUxlbmd0aCIsImxlbmd0aCIsImFkZCIsInN1YnN0cmFjdCIsIm11bHRpcGx5IiwiZXhwcmVzc2lvblR5cGVOdW1iZXIiLCJOdW1iZXIiLCJydW5HY2RHYW1lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7Ozs7QUFDQTs7OztBQUVBLElBQU1BLFlBQVksU0FBWkEsU0FBWSxDQUFDQyxNQUFELEVBQVNDLE1BQVQsRUFBb0I7QUFDcEMsTUFBTUMsTUFBTUYsVUFBVSxDQUF0QjtBQUNBLE1BQU1HLE1BQU1GLFVBQVUsR0FBdEI7QUFDQSxTQUFPRyxLQUFLQyxLQUFMLENBQVdELEtBQUtFLE1BQUwsTUFBaUJILE1BQU1ELEdBQU4sR0FBWSxDQUE3QixDQUFYLElBQThDQSxHQUFyRDtBQUNELENBSkQ7O0FBTUEsSUFBTUssWUFBWSxTQUFaQSxTQUFZLENBQUNDLElBQUQsRUFBT0MsVUFBUCxFQUFtQkMsV0FBbkIsRUFBbUM7QUFDbkQsTUFBSUQsZUFBZUMsV0FBbkIsRUFBZ0M7QUFDOUJDLFlBQVFDLEdBQVIsQ0FBWSxVQUFaO0FBQ0QsR0FGRCxNQUVPO0FBQ0xELFlBQVFDLEdBQVIsT0FBZ0JILFVBQWhCLGtEQUF1RUMsV0FBdkU7QUFDQUMsWUFBUUMsR0FBUix3QkFBZ0NKLElBQWhDO0FBQ0Q7QUFDRCxT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O0FBQ0EsUUFBSSxDQUFDakIsVUFBVWMsUUFBVixFQUFvQlksT0FBT3hCLFVBQVAsQ0FBcEIsRUFBd0NDLFdBQXhDLENBQUwsRUFBMkQ7QUFDNUQ7QUFDREMsVUFBUUMsR0FBUix1QkFBZ0NTLFFBQWhDO0FBQ0QsQ0FmRDs7UUFpQlNILFcsR0FBQUEsVztRQUFhTyxXLEdBQUFBLFc7UUFBYVMsVSxHQUFBQSxVIiwiZmlsZSI6ImdhbWVzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJlYWRsaW5lU3luYyBmcm9tICdyZWFkbGluZS1zeW5jJztcbmltcG9ydCB7IHdlbGNvbWUsIGFza05hbWUgfSBmcm9tICcuL2NvbW1vbkZ1bmNzJztcblxuY29uc3QgZ2V0UmFuZG9tID0gKG1pbk51bSwgbWF4TnVtKSA9PiB7XG4gIGNvbnN0IG1pbiA9IG1pbk51bSB8fCAwO1xuICBjb25zdCBtYXggPSBtYXhOdW0gfHwgMTAwO1xuICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbiArIDEpKSArIG1pbjtcbn07XG5cbmNvbnN0IGlzQ29ycmVjdCA9ICh1c2VyLCB1c2VyQW5zd2VyLCByaWdodEFuc3dlcikgPT4ge1xuICBpZiAodXNlckFuc3dlciA9PT0gcmlnaHRBbnN3ZXIpIHtcbiAgICBjb25zb2xlLmxvZygnQ29ycmVjdCEnKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zb2xlLmxvZyhgXCIke3VzZXJBbnN3ZXJ9XCIgaXMgd3JvbmcgYW5zd2VyIDsoLiBDb3JyZWN0IGFuc3dlciB3YXMgXCIke3JpZ2h0QW5zd2VyfVwiYCk7XG4gICAgY29uc29sZS5sb2coYExldCdzIHRyeSBhZ2FpbiwgJHt1c2VyfSFgKTtcbiAgfVxuICByZXR1cm4gdXNlckFuc3dlciA9PT0gcmlnaHRBbnN3ZXI7XG59O1xuXG5jb25zdCBnZXRHQ0QgPSAoYSwgYikgPT4ge1xuICBjb25zdCBtYXhOdW0gPSBhID4gYiA/IGEgOiBiO1xuICBsZXQgZ2NkID0gMTtcbiAgZm9yIChsZXQgaSA9IDE7IGkgPD0gbWF4TnVtOyBpICs9IDEpIHtcbiAgICBpZiAoYSAlIGkgPT09IDAgJiYgYiAlIGkgPT09IDApIGdjZCA9IGk7XG4gIH1cbiAgcmV0dXJuIGdjZDtcbn07XG5cbmNvbnN0IHJ1bkV2ZW5HYW1lID0gKHVzZXIsIHRpbWVzKSA9PiB7XG4gIGlmICghdXNlcikgd2VsY29tZSgpO1xuICBjb25zb2xlLmxvZygnQW5zd2VyIFwieWVzXCIgaWYgbnVtYmVyIGV2ZW4gb3RoZXJ3aXNlIGFuc3dlciBcIm5vXCIuJyk7XG4gIGNvbnN0IHJ1blRpbWVzID0gdGltZXMgfHwgMztcbiAgY29uc3QgdXNlck5hbWUgPSB1c2VyIHx8IGFza05hbWUoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBydW5UaW1lczsgaSArPSAxKSB7XG4gICAgY29uc3QgbnVtUXVlc3Rpb24gPSBnZXRSYW5kb20oKTtcbiAgICBjb25zb2xlLmxvZyhgUXVlc3Rpb246ICR7bnVtUXVlc3Rpb259YCk7XG4gICAgY29uc3QgcmlnaHRBbnN3ZXIgPSBudW1RdWVzdGlvbiAlIDIgPT09IDAgPyAneWVzJyA6ICdubyc7XG4gICAgY29uc3QgdXNlckFuc3dlciA9IHJlYWRsaW5lU3luYy5xdWVzdGlvbignWW91ciBhbnN3ZXI6ICcpO1xuICAgIGlmICghaXNDb3JyZWN0KHVzZXJOYW1lLCB1c2VyQW5zd2VyLCByaWdodEFuc3dlcikpIHJldHVybjtcbiAgfVxuICBjb25zb2xlLmxvZyhgQ29uZ3JhdHVsYXRpb25zLCAke3VzZXJOYW1lfSFgKTtcbn07XG5cbmNvbnN0IHJ1bkNhbGNHYW1lID0gKHVzZXIsIHRpbWVzKSA9PiB7XG4gIGlmICghdXNlcikgd2VsY29tZSgpO1xuICBjb25zb2xlLmxvZygnV2hhdCBpcyB0aGUgcmVzdWx0IG9mIHRoZSBleHByZXNzaW9uPycpO1xuICBjb25zdCBydW5UaW1lcyA9IHRpbWVzIHx8IDM7XG4gIGNvbnN0IHVzZXJOYW1lID0gdXNlciB8fCBhc2tOYW1lKCk7XG4gIGNvbnN0IGV4cHJlc3Npb25UeXBlID0gWydhZGQnLCAnc3Vic3RyYWN0JywgJ211bHRpcGx5J107XG4gIGNvbnN0IGV4cHJlc3Npb25UeXBlTGVuZ3RoID0gZXhwcmVzc2lvblR5cGUubGVuZ3RoIC0gMTtcbiAgY29uc3QgYWRkID0gKGEsIGIpID0+IGEgKyBiO1xuICBjb25zdCBzdWJzdHJhY3QgPSAoYSwgYikgPT4gYSAtIGI7XG4gIGNvbnN0IG11bHRpcGx5ID0gKGEsIGIpID0+IGEgKiBiO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJ1blRpbWVzOyBpICs9IDEpIHtcbiAgICBjb25zdCBhID0gZ2V0UmFuZG9tKCk7XG4gICAgY29uc3QgYiA9IGdldFJhbmRvbSgpO1xuICAgIGNvbnN0IGV4cHJlc3Npb25UeXBlTnVtYmVyID0gZ2V0UmFuZG9tKDAsIGV4cHJlc3Npb25UeXBlTGVuZ3RoKTtcbiAgICBsZXQgcmlnaHRBbnN3ZXI7XG4gICAgbGV0IHVzZXJBbnN3ZXI7XG4gICAgc3dpdGNoIChleHByZXNzaW9uVHlwZU51bWJlcikge1xuICAgICAgY2FzZSAwOlxuICAgICAgICBjb25zb2xlLmxvZyhgUXVlc3Rpb246ICR7YX0gKyAke2J9YCk7XG4gICAgICAgIHJpZ2h0QW5zd2VyID0gYWRkKGEsIGIpO1xuICAgICAgICB1c2VyQW5zd2VyID0gcmVhZGxpbmVTeW5jLnF1ZXN0aW9uKCdZb3VyIGFuc3dlcjogJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxOlxuICAgICAgICBjb25zb2xlLmxvZyhgUXVlc3Rpb246ICR7YX0gLSAke2J9YCk7XG4gICAgICAgIHJpZ2h0QW5zd2VyID0gc3Vic3RyYWN0KGEsIGIpO1xuICAgICAgICB1c2VyQW5zd2VyID0gcmVhZGxpbmVTeW5jLnF1ZXN0aW9uKCdZb3VyIGFuc3dlcjogJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyOlxuICAgICAgICBjb25zb2xlLmxvZyhgUXVlc3Rpb246ICR7YX0gKiAke2J9YCk7XG4gICAgICAgIHJpZ2h0QW5zd2VyID0gbXVsdGlwbHkoYSwgYik7XG4gICAgICAgIHVzZXJBbnN3ZXIgPSByZWFkbGluZVN5bmMucXVlc3Rpb24oJ1lvdXIgYW5zd2VyOiAnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgaWYgKCFpc0NvcnJlY3QodXNlck5hbWUsIE51bWJlcih1c2VyQW5zd2VyKSwgcmlnaHRBbnN3ZXIpKSByZXR1cm47XG4gIH1cbiAgY29uc29sZS5sb2coYENvbmdyYXR1bGF0aW9ucywgJHt1c2VyTmFtZX0hYCk7XG59O1xuXG5jb25zdCBydW5HY2RHYW1lID0gKHVzZXIsIHRpbWVzKSA9PiB7XG4gIGlmICghdXNlcikgd2VsY29tZSgpO1xuICBjb25zb2xlLmxvZygnRmluZCB0aGUgZ3JlYXRlc3QgY29tbW9uIGRpdmlzb3Igb2YgZ2l2ZW4gbnVtYmVycy4nKTtcbiAgY29uc3QgcnVuVGltZXMgPSB0aW1lcyB8fCAzO1xuICBjb25zdCB1c2VyTmFtZSA9IHVzZXIgfHwgYXNrTmFtZSgpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJ1blRpbWVzOyBpICs9IDEpIHtcbiAgICBjb25zdCBtdWx0aXBseSA9IGdldFJhbmRvbSgxLCAxMCk7XG4gICAgY29uc3QgYSA9IGdldFJhbmRvbSgxLCAxMCkgKiBtdWx0aXBseTtcbiAgICBjb25zdCBiID0gZ2V0UmFuZG9tKDEsIDEwKSAqIG11bHRpcGx5O1xuICAgIGNvbnN0IHJpZ2h0QW5zd2VyID0gZ2V0R0NEKGEsIGIpO1xuICAgIGNvbnNvbGUubG9nKGBRdWVzdGlvbjogJHthfSAke2J9YCk7XG4gICAgY29uc3QgdXNlckFuc3dlciA9IHJlYWRsaW5lU3luYy5xdWVzdGlvbignWW91ciBhbnN3ZXI6ICcpO1xuICAgIGlmICghaXNDb3JyZWN0KHVzZXJOYW1lLCBOdW1iZXIodXNlckFuc3dlciksIHJpZ2h0QW5zd2VyKSkgcmV0dXJuO1xuICB9XG4gIGNvbnNvbGUubG9nKGBDb25ncmF0dWxhdGlvbnMsICR7dXNlck5hbWV9IWApO1xufTtcblxuZXhwb3J0IHsgcnVuRXZlbkdhbWUsIHJ1bkNhbGNHYW1lLCBydW5HY2RHYW1lIH07XG4iXX0=