Flak15/project-lvl1-s292

View on GitHub
src/games/balance.js

Summary

Maintainability
A
0 mins
Test Coverage
import game from '..';
import generateNumber from '../utils';

const minQuestionNumber = 100;
const maxQuestionNumber = 10000;

const balanceNum = (num) => {
  const lengthOfNum = num.toString().length;
  const digitsSum = num.toString().split('').reduce((sum, digit) => sum + Number(digit), 0);
  const calculateNewNum = (SumOfNum, length) => {
    if (length === 0) return '';
    const newDigit = Math.round(SumOfNum / length);
    return [newDigit, ...calculateNewNum(SumOfNum - newDigit, length - 1)];
  };
  return calculateNewNum(digitsSum, lengthOfNum).sort((a, b) => a > b).join('');
};

const description = 'Balance the given number';

const makeQuestionAndAnswer = () => {
  const number = generateNumber(minQuestionNumber, maxQuestionNumber);
  const question = `${number}`;
  const correctAnswer = balanceNum(number);
  return [question, correctAnswer];
};

const gameBalance = () => game(makeQuestionAndAnswer, description);

export default gameBalance;