smashtakov/backend-project-lvl1

View on GitHub
src/games/gcd.js

Summary

Maintainability
A
0 mins
Test Coverage
import { cons } from '@hexlet/pairs';
import getRandomNumber from '../random-number';
import runEngine from '../engine';

// Euclidean algorithm gcd
const calculateGcd = (number1, number2) => {
  const iter = (num1, num2) => {
    if (num2 === 0) {
      return num1;
    }
    if (num1 % num2 === 0) {
      return num2;
    } return iter(num2, num1 % num2);
  };
  return (number1 >= number2) ? iter(number1, number2) : iter(number2, number1);
};

const generateQuestionAndAnswer = () => {
  const first = getRandomNumber(1, 100);
  const second = getRandomNumber(1, 100);
  const question = `${first} ${second}`;
  const answer = String(calculateGcd(first, second));
  return cons(question, answer);
};

const description = 'Find the greatest common divisor of given numbers';
export default () => runEngine(description, generateQuestionAndAnswer);