не понимаю, почему код выдает такое значение

задача из html academy

Назови функцию getPrice. У неё должно быть два параметра:

  • время (в часах), которое нужно потратить на проект;
  • булево значение, которое указывает на срочность проекта — true для срочного заказа и false для обычного.

Названия параметров могу быть любыми.

Для каждого проекта есть фиксированная ставка — 1500 рублей в час. Расчёт стоимости проектов выглядит так: время * ставка в час.

Есть несколько нюансов. Если проект срочный, то часы уменьшаются в два раза, а ставка за час повышается в 2.5 раз.

А если время проекта больше 150 часов, ставка в час уменьшается на 250 рублей.

В первую очередь проверяй срочность. Функция должна возвращать стоимость проекта.

вот мой код

function getPrice(time,isImportant){
    let sum;
    if (isImportant  && time <= 150){
      sum = (time / 2) * (1500*2.5)  
    } else if(isImportant  && time > 150){
      sum = (time / 2)* (1500*2.5-250) 
      }
    
    else if (!isImportant && time <=150){
      sum = time * 1500;
    } else if(!isImportant && time > 150){
      sum = (time) * 1250;
    } else {
      sum = time/2 * 1250
      
      
}
    return sum;

}

есть 6 проверок, 5 из них пройдены,6 не проходится, не могу понять, почему??

Первый тест. Время в часах: 200, срочный ли проект: true. Ожидаемая стоимость: 375000 Результат функции getPrice равен 350000 и не совпадает с ожидаемым значением

Второй тест. Время в часах: 150, срочный ли проект: false. Ожидаемая стоимость: 225000 Результат выполнения функции getPrice равен 225000 и совпадает с ожидаемым значением

Третий тест. Время в часах: 100, срочный ли проект: true. Ожидаемая стоимость: 187500 Результат выполнения функции getPrice равен 187500 и совпадает с ожидаемым значением

Четвёртый тест. Время в часах: 150, срочный ли проект: true. Ожидаемая стоимость: 281250 Результат выполнения функции getPrice равен 281250 и совпадает с ожидаемым значением

Пятый тест. Время в часах: 320, срочный ли проект: true. Ожидаемая стоимость: 560000 Результат выполнения функции getPrice равен 560000 и совпадает с ожидаемым значением

Шестой тест. Время в часах: 320, срочный ли проект: false. Ожидаемая стоимость: 400000 Результат выполнения функции getPrice равен 400000 и совпадает с ожидаемым значением Всего проверок: 6, пройдено: 5 (String)

РАЗОБРАЛСЯ, суть была в том что в любом случае, если проект срочный мы умножаем на 1500*2.5 даже если часов после уменьшения в 2 раза будет меньше 150

function getPrice(time,isImportant){
    let sum;
    
    if (isImportant){
      time = time/2;
      if (time > 150){
        sum = time * (1500*2.5-250)  
      }
      if (time <=150){
        sum = time * (1500 * 2.5)  
      }
    }
    
    else if (!isImportant && time <=150){
      sum = time * 1500;
    } else if(!isImportant && time > 150){
      sum = (time) * 1250;
    } else {
      sum = time/2 * 1250
      
      
}
    return sum;

}

Я СНАЧАЛА не дочитал до конца условие задачи...

Почему нужно сначала проверять срочность? Чтобы программа работала корректно.

Представьте, что пришёл срочный проект на 160 часов. Сначала мы проверяем срочность, увеличиваем ставку и уменьшаем количество часов вдвоё. Часов станет 80. Тогда проверка на количество часов уже не пройдёт и не внесёт свои коррективы в ответ. Так как время часов изменилось, эта проверка и не должна проходить.

Если пришёл срочный проект на 400 часов, то сначала мы сокращаем время в два раза, увеличиваем ставку. Время проекта теперь 200 часов, что всё равно больше 150, поэтому мы снижаем ставку на 250 рублей, раз проект всё равно большой.


Ответы (1 шт):

Автор решения: Артём

Проблема в том, что после того, как ваш проект стал срочным, вы не проверяете ещё раз - является он долгим или нет.

После срочности время сократилось в два раза, то есть он перестал иметь отметку "долгий", вот и вся проблема.

function getPrice(time, isImportant) {
  let cost = 1500;
  if (isImportant) {
    cost = cost * 2.5;
    time = time / 2;
  }

  if (time > 150) {
    cost = cost - 250;
  };

  return cost * time;
};

console.log(getPrice(200, true) === 375000);
console.log(getPrice(150, false) === 225000);
console.log(getPrice(100, true) === 187500);
console.log(getPrice(150, true) === 281250);
console.log(getPrice(320, true) === 560000);
console.log(getPrice(320, false) === 400000);

→ Ссылка