Сколько стоит ваш фронтенд?

var getPrice = function(time, isUrgently){
var rate = 1500;
var price;

if(!isUrgently){
if(time > 150){
rate-=250;
}
price = time * rate;
}else{

price = (rate * 2.5)*(time / 2 ) ;

}
return price;
}

getPrice(320, true)

не могу понять в чем проблема.Вместо 56000 выдает 60000

У вас в коде rate -= 250 применяется только для несрочных, а надо, чтоб срочные тоже подпадали под проверку time > 150.

1 лайк

Не проходит последняя проверка. Подскажите, что не так

var getPrice = function (hours, isUrgently) {
  var fixedPrice = 1500;
  if (isUrgently) {
    hours /= 2;
    fixedPrice *=2.5;
  }
   
  if (isUrgently && hours > 150) {
    fixedPrice = (fixedPrice * 2.5) - 250;
    hours /=2;    
  }
    var totalCost = hours * fixedPrice;
  return totalCost;
}
if ( hours > 150) {
    fixedPrice -= 250;   
}

переделайте второе условие так. логически неверно было
переменная totalCost избыточна

Добрый день.
Это первый тест:
"Первый тест. Время в часах: 200 , срочный ли проект: true . Ожидаемая стоимость: 375000"

Здесь: время в часах > 150, а значит фиксированная ставка (1500) * 2,5 и - 250.
Так как это true, то часов соответственно 100.
Итого: 100 часов * ((1500 * 2,5) - 250) = 350000.
В задании ожидаемая стоимость 375000 рублей.
Где ошибка?
Спасибо.

так 100 или 200 часов? =) сами же написали что 100 часов, а денег берете как за 150+.
100 * 1500 * 2.5 = 375000

Как-то так:

code
function getPrice(time, isUrgent) {
  var standardPrice = 1500;
  var urgentPrice = 3750;
  var discount = 250;
  var standardPriceTime = 150;
  
  if (time < (standardPriceTime * 2) && isUrgent) {
    discount = 0;
  }
  
  if (isUrgent && time <= standardPriceTime) {
    return (time / 2) * urgentPrice;
  }  
  else if (isUrgent && time > standardPriceTime) {
    return (time / 2) * (urgentPrice - discount);
  }  
  else if (!isUrgent && time <= standardPriceTime) {
    return time * standardPrice;
  }  
  else if (!isUrgent && time > standardPriceTime) {
    return time * (standardPrice - discount);
  }
}

Оцените. Пришлось довольно долго поковыряться, что бы максимально сократить и оставить ее рабочей)))

var getPrice=function (hours, speed) {
var price=1500;
if (speed) {
price*=2.5;
hours/=2;
}
if(hours>150) {
price-=250;
}
return hours*price
}

6 лайков

Здравствуйте. Программа прошла все проверки вот в таком виде из-за этого я долго мучился в следующем задании, а ошибка была именно тут(в закоментированном виде добавил в код исправление) + не знаю, как избавиться от повторений в коде, подскажите пожалуйста

var getPrice = function (time, isQuickly)
{
var rate = 1500;
var price = time*rate;
if(isQuickly){
time /= 2;
rate *= 2.5
if(time>150){
rate -= 250
price = time * rate}
else{
price = time * rate}
}
else{
if(time>150){rate -=250;
//price = time * rate
}
}
return price
}

сами себя запутали лишней переменной
и else не нужна

var getPrice = function(time, isQuickly) {
  var rate = 1500;
  if (isQuickly) {
    time /= 2;
    rate *= 2.5;
  }
  if (time > 150) {
    rate -= 250;
  }
  return time * rate;
}
6 лайков

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

function getPrice(time, quickly) {
  return quickly ? (time > 150 ? time/2*1250*2.5 : time/2*1500*2.5) : (time > 150 ? time*1250 : time*1500);
}

Я чего-то путаю или тест неправильный? Получается что у нас сначала отрабатывает срочность проекта - (time > 150 ? time/2*1250*2.5 : time/2*1500*2.5), далее проверяется на кол-во времени и срабатывает time/2*1250*2.5.
Т.е.у нас срочный проект, поэтому время уменьшается в два раза time/2, при этом т.к. ставка у нас уменьшается на 250, и одновременно с этим увеличивается на 2.5 то ответ никак не будет при первом тесте 375.000

тернарники - зло

держите, как это должно быть, если собрались нечитабельный вариант сделать

const getPrice = (hours, isUrgency) => isUrgency ?
(hours / 2 > 150 ? hours / 2 * (1500 * 2.5 - 250) : hours / 2 * 1500 * 2.5)
: (hours > 150 ? hours * (1500 - 250) : hours * 1500);

Всеравно логика, по-моему, нарушена. Т.е. у нас ставка за проект 1500 и сначала у нас умножается на 2.5, а только потом уже из этой ставки вычитается 250

А насчет тернарников, не считаю их злом и в данном случае читабельность кода никак не ухудшается

тернарные операторы используют тогда, когда иначе придется городить что-то банальное типо:

if (smth) { a = 1; } else { a = 2;}
или
if (smth) { return 1; } else { return 2;}

в других случаях это ухудшает чтение и их использовать - не лучшая идея. вы даже сами запутались в логике, но упорно продолжаете их использовать в таком случае.

Как то не так

var getPrice = function (timeInHours, urgency) {

var fixedRatePerHour = 1500;
var projectCostCalculation = timeInHours * fixedRatePerHour;

projectCostCalculation = urgency ? (timeInHours /= 2) * (fixedRatePerHour *= 2.5) : projectCostCalculation;
fixedRatePerHour = (timeInHours > 150) ? (fixedRatePerHour - 250) : fixedRatePerHour;
projectCostCalculation = timeInHours * fixedRatePerHour;

return projectCostCalculation;
}

var getPrice = function(urgent, hours){
var rate = 1500;
if(urgent){
hours /= 2;
rate *= 2.5;
}
if(hours > 150){
rate -= 250;
}
return hours * rate;
}
getPrice(true, 150);

Добрового времени суток, дамы и господа, собственно вот мой вариант решения, при подставлении вариантов из проверки - в “консоль” выводит тот же вариант ответа, что должен быть, однако при нажатие на проверку, выдает при всех срочных 1875, а в не срочном 0, как так-то?

Добрый день. Дело в том, что аргументы в вашей функции поменяны местами. То есть, булево значения передаётся в hours, а hours в булево значение. Для достижения 100% достаточно поменять их местами.

var getPrice = function(hours, urgent){
  var rate = 1500;
  if(urgent){
    hours /= 2;
    rate *= 2.5;
  } 
  if (hours > 150) {
    rate -= 250;
  }

return hours * rate;
}
1 лайк
Мой вариант: 
var getPrice = function (time, important) {
    var bet = 1500;
    if (important) {
        time *= 0.5
        bet *= 2.5
    }
    if (time > 150) {
        bet -= 250
        }
        return bet * time;
    }

Добрый день. Помогите разобраться. Код работает. значения на выходе верные, но почему-то проверку не проходит. В чем проблема?
function getPrice (urgency, time) {
var fixMoney = 1500;
if (urgency && (time/2) >= 150) {
time /=2;
fixMoney = ((fixMoney *2.5) - 250)
} else if (urgency) {time /=2; fixMoney *= 2.5
} return time * fixMoney

}
getPrice(true,200);
getPrice(true,320);
getPrice(false,200);
getPrice(true,100);