@cody-maverick

Как можно оптимизировать данный код?

Решил задачку на CodeWars. Все тесты проходит, но на время срабатывания скрипта есть ограничения. Теперь стоит задача оптимизировать код. Как это сделать в данном случае? Задачка на CodeWars
function movie(card, ticket, perc) {
      percCount = rate => {
        let rateCount = 0;
        for (let i = 1; i <= rate; i++) {
          rateCount += Math.pow(perc, i);
        }
        return rateCount;        
      }      
      for (let i = 1; ; i++) {
        let systemA = ticket * i,
            systemB = Math.ceil(card + (ticket * percCount(i)));        
        if (systemB < systemA) {
          return i;
          break;
        }
      }
    };
  • Вопрос задан
  • 227 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Смысл тут такой - не надо считать повторно то, что вы уже считали. А именно - все эти суммы степеней и сами степени. Каждая следующая сумма - это предыдущая сумма плюс ещё одно значение, следующая степень - произведение предыдущей и основания:

function movie(card, ticket, perc) {
  let count = 0;
  let price = ticket;
  let sum = card;

  while (Math.ceil(sum) >= ticket * count) {
    count++;
    price *= perc;
    sum += price;
  }

  return count;
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы