aleksey-ilin/project-lvl1-s364

View on GitHub
src/games/progression.js

Summary

Maintainability
A
0 mins
Test Coverage
import engine from '..';
import { randomNum } from '../utils';

const task = 'What number is missing in this progression?';

const minRandomNum = 1;
const maxRandomNum = 10;

const getProgression = (startingNum, step, length, index) => {
  const iter = (acc) => {
    if (acc.length >= length) {
      return [...acc.slice(0, index), '..', ...acc.slice(index + 1)];
    }
    const newElement = startingNum + acc.length * step;
    return iter([...acc, newElement]);
  };
  return iter([startingNum]);
};

const getCorrectAnswer = (startingNum, step, index) => String(startingNum + index * step);

const length = 10;

const getData = () => {
  const startingNum = randomNum(minRandomNum, maxRandomNum);
  const step = randomNum(minRandomNum, maxRandomNum);
  const index = randomNum(1, length);
  const question = getProgression(startingNum, step, length, index);
  const correctAnswer = getCorrectAnswer(startingNum, step, index);
  return [question, correctAnswer];
};

export default () => engine(task, getData);