From 0d97f88db91fd7c3043f3d9a0111282a15312e52 Mon Sep 17 00:00:00 2001 From: Artjom Kivonen Date: Wed, 17 Apr 2024 21:28:26 +0300 Subject: [PATCH] refactoring prime, even --- bin/brain-calc.js | 2 +- bin/brain-even.js | 2 +- bin/brain-gcd.js | 2 +- bin/brain-prime.js | 2 +- bin/brain-progression.js | 2 +- src/even.js | 16 ---------------- src/{ => games}/calc.js | 8 +++++--- src/games/even.js | 6 ++++++ src/{ => games}/gcd.js | 8 +++++--- src/games/prime.js | 17 +++++++++++++++++ src/{ => games}/progression.js | 8 +++++--- src/index.js | 3 +-- src/prime.js | 27 --------------------------- src/utils/predicateGame.js | 17 +++++++++++++++++ 14 files changed, 61 insertions(+), 59 deletions(-) delete mode 100644 src/even.js rename src/{ => games}/calc.js (87%) create mode 100644 src/games/even.js rename src/{ => games}/gcd.js (83%) create mode 100644 src/games/prime.js rename src/{ => games}/progression.js (84%) delete mode 100644 src/prime.js create mode 100644 src/utils/predicateGame.js diff --git a/bin/brain-calc.js b/bin/brain-calc.js index 839f6cd..4b3e14f 100755 --- a/bin/brain-calc.js +++ b/bin/brain-calc.js @@ -1,6 +1,6 @@ #!/usr/bin/env node import app from '../src/index.js'; -import calc from '../src/calc.js'; +import calc from '../src/games/calc.js'; app(calc); diff --git a/bin/brain-even.js b/bin/brain-even.js index f50c3f8..75ea662 100755 --- a/bin/brain-even.js +++ b/bin/brain-even.js @@ -1,6 +1,6 @@ #!/usr/bin/env node import app from '../src/index.js'; -import even from '../src/even.js'; +import even from '../src/games/even.js'; app(even); diff --git a/bin/brain-gcd.js b/bin/brain-gcd.js index be673e2..0919e8b 100755 --- a/bin/brain-gcd.js +++ b/bin/brain-gcd.js @@ -1,6 +1,6 @@ #!/usr/bin/env node import app from '../src/index.js'; -import gcd from '../src/gcd.js'; +import gcd from '../src/games/gcd.js'; app(gcd); diff --git a/bin/brain-prime.js b/bin/brain-prime.js index 6580f60..c0381c7 100755 --- a/bin/brain-prime.js +++ b/bin/brain-prime.js @@ -1,6 +1,6 @@ #!/usr/bin/env node import app from '../src/index.js'; -import prime from '../src/prime.js'; +import prime from '../src/games/prime.js'; app(prime); diff --git a/bin/brain-progression.js b/bin/brain-progression.js index ea80d76..088ad05 100755 --- a/bin/brain-progression.js +++ b/bin/brain-progression.js @@ -1,6 +1,6 @@ #!/usr/bin/env node import app from '../src/index.js'; -import progression from '../src/progression.js'; +import progression from '../src/games/progression.js'; app(progression); diff --git a/src/even.js b/src/even.js deleted file mode 100644 index 0812eee..0000000 --- a/src/even.js +++ /dev/null @@ -1,16 +0,0 @@ -import randomize from './utils/randomize.js'; - -const isEven = (num) => num % 2 === 0; -export default function even(questionCount = 3) { - const rules = 'Answer "yes" if the number is even, otherwise answer "no".'; - const questionsAnswers = []; - for (let i = 0; i < questionCount; i += 1) { - const randomInt = randomize(1, 50); - const correctAnswer = isEven(randomInt) ? 'yes' : 'no'; - questionsAnswers.push({ - question: randomInt, - correctAnswer, - }); - } - return { rules, questionsAnswers }; -} diff --git a/src/calc.js b/src/games/calc.js similarity index 87% rename from src/calc.js rename to src/games/calc.js index bf04a64..6de6da1 100644 --- a/src/calc.js +++ b/src/games/calc.js @@ -1,6 +1,6 @@ -import randomize from './utils/randomize.js'; +import randomize from '../utils/randomize.js'; -export default function calc(questionCount = 3) { +const calc = (questionCount = 3) => { const rules = 'What is the result of the expression?'; const questionsAnswers = []; const operationsMapping = { @@ -25,4 +25,6 @@ export default function calc(questionCount = 3) { }); } return { rules, questionsAnswers }; -} +}; + +export default calc; diff --git a/src/games/even.js b/src/games/even.js new file mode 100644 index 0000000..6fb3cd3 --- /dev/null +++ b/src/games/even.js @@ -0,0 +1,6 @@ +import predicateGame from '../utils/predicateGame.js'; + +const isEven = (num) => num % 2 === 0; +const even = (questionCount = 3) => predicateGame(isEven, questionCount); + +export default even; diff --git a/src/gcd.js b/src/games/gcd.js similarity index 83% rename from src/gcd.js rename to src/games/gcd.js index 69bc468..995cb49 100644 --- a/src/gcd.js +++ b/src/games/gcd.js @@ -1,4 +1,4 @@ -import randomize from './utils/randomize.js'; +import randomize from '../utils/randomize.js'; const getGCD = (a, b) => { if (b === 0) { @@ -6,7 +6,7 @@ const getGCD = (a, b) => { } return getGCD(b, a % b); }; -export default function gcd(questionCount = 3) { +const gcd = (questionCount = 3) => { const rules = 'Find the greatest common divisor of given numbers.'; const questionsAnswers = []; for (let i = 0; i < questionCount; i += 1) { @@ -20,4 +20,6 @@ export default function gcd(questionCount = 3) { }); } return { rules, questionsAnswers }; -} +}; + +export default gcd; diff --git a/src/games/prime.js b/src/games/prime.js new file mode 100644 index 0000000..58b2c55 --- /dev/null +++ b/src/games/prime.js @@ -0,0 +1,17 @@ +import predicateGame from '../utils/predicateGame.js'; + +const isPrime = (num) => { + if (num < 2) { + return false; + } + const halfNum = Math.floor(num / 2); + for (let i = halfNum; i > 1; i -= 1) { + if (num % i === 0) { + return false; + } + } + return true; +}; +const prime = (questionCount = 3) => predicateGame(isPrime, questionCount); + +export default prime; diff --git a/src/progression.js b/src/games/progression.js similarity index 84% rename from src/progression.js rename to src/games/progression.js index 50b528d..35287b4 100644 --- a/src/progression.js +++ b/src/games/progression.js @@ -1,6 +1,6 @@ -import randomize from './utils/randomize.js'; +import randomize from '../utils/randomize.js'; -export default function progression(questionCount = 3) { +const progression = (questionCount = 3) => { const rules = 'What number is missing in the progression?'; const arrayLength = randomize(5, 15); const questionsAnswers = []; @@ -22,4 +22,6 @@ export default function progression(questionCount = 3) { }); } return { rules, questionsAnswers }; -} +}; + +export default progression; diff --git a/src/index.js b/src/index.js index cc57c0c..fdb94f8 100644 --- a/src/index.js +++ b/src/index.js @@ -16,8 +16,7 @@ export default function app(game, questionsCount = countOfQuestions) { console.log(`Question: ${question}`); const answer = readlineSync.question('Your answer: '); if (answer !== correctAnswer) { - console.log(`${answer} is wrong answer ;(. Correct answer was ${correctAnswer}. - Let's try again, Bill!`); + console.log(`${answer} is wrong answer ;(. Correct answer was ${correctAnswer}.\nLet's try again, ${userName}!`); return; } console.log('Correct!'); diff --git a/src/prime.js b/src/prime.js deleted file mode 100644 index bf12b15..0000000 --- a/src/prime.js +++ /dev/null @@ -1,27 +0,0 @@ -import randomize from './utils/randomize.js'; - -const isPrime = (num) => { - if (num < 2) { - return false; - } - const halfNum = Math.floor(num / 2); - for (let i = halfNum; i > 1; i -= 1) { - if (num % i === 0) { - return false; - } - } - return true; -}; -export default function prime(questionCount = 3) { - const rules = 'Answer "yes" if given number is prime. Otherwise answer "no".'; - const questionsAnswers = []; - for (let i = 0; i < questionCount; i += 1) { - const number = randomize(0, 100); - const correctAnswer = isPrime(number) ? 'yes' : 'no'; - questionsAnswers.push({ - question: number, - correctAnswer, - }); - } - return { rules, questionsAnswers }; -} diff --git a/src/utils/predicateGame.js b/src/utils/predicateGame.js new file mode 100644 index 0000000..5528002 --- /dev/null +++ b/src/utils/predicateGame.js @@ -0,0 +1,17 @@ +import randomize from './randomize.js'; + +const predicateGame = (predicateFunc, questionCount) => { + const rules = 'Answer "yes" if given number is prime. Otherwise answer "no".'; + const questionsAnswers = []; + for (let i = 0; i < questionCount; i += 1) { + const number = randomize(0, 100); + const correctAnswer = predicateFunc(number) ? 'yes' : 'no'; + questionsAnswers.push({ + question: number, + correctAnswer, + }); + } + return { rules, questionsAnswers }; +}; + +export default predicateGame;