0TH0N/project-lvl1-s340

View on GitHub
src/games/brain-balance.js

Summary

Maintainability
A
3 hrs
Test Coverage
import { engineForGames } from '..';
import { cons } from 'hexlet-pairs';

export default () => {
  const brainBalance = () => {
    const number = Math.round(Math.random() * 5000);
    let stringFormatNumber = String(number);
    let nextStep = true;
    let minDigitInNumber = 99;
    let maxDigitInNumber = -1;
    let minDigitIndex = -1;
    let maxDigitIndex = -1;

    while (nextStep) {
      for (let i = 0; i < stringFormatNumber.length; i += 1) {
        if (Number(stringFormatNumber.charAt(i)) < minDigitInNumber) {
          minDigitInNumber = Number(stringFormatNumber.charAt(i));
          minDigitIndex = i;
        }

        if (Number(stringFormatNumber.charAt(i)) > maxDigitInNumber) {
          maxDigitInNumber = Number(stringFormatNumber.charAt(i));
          maxDigitIndex = i;
        }
      }

      if ((maxDigitInNumber - minDigitInNumber) > 1) {
        const tempStrNumber = stringFormatNumber;
        stringFormatNumber = '';
        minDigitInNumber += 1;
        maxDigitInNumber -= 1;

        for (let i = 0; i < tempStrNumber.length; i += 1) {
          switch (i) {
            case minDigitIndex: {
              stringFormatNumber += String(minDigitInNumber);
              break;
            }

            case maxDigitIndex: {
              stringFormatNumber += String(maxDigitInNumber);
              break;
            }

            default: {
              stringFormatNumber += tempStrNumber.charAt(i);
            }
          }
        }
      } else nextStep = false;
    }

    let countOfMinDigits = 0;
    for (let i = 0; i < stringFormatNumber.length; i += 1) {
      if (Number(stringFormatNumber.charAt(i)) === minDigitInNumber) countOfMinDigits += 1;
    }
    const lengthOfNumberString = stringFormatNumber.length;
    stringFormatNumber = '';
    for (let i = 0; i < countOfMinDigits; i += 1) stringFormatNumber += String(minDigitInNumber);
    for (let i = countOfMinDigits; i < lengthOfNumberString; i += 1) {
      stringFormatNumber += String(maxDigitInNumber);
    }

    const correctAnswer = stringFormatNumber;
    const expressionForQuestion = String(number);
    return cons(expressionForQuestion, correctAnswer);
  };

  engineForGames(brainBalance, 'Balance the given number.');
  return null;
};