Всем привет!
Мой код проходит 4 из 5 тестов. Почему то во втором тесте предлагается правильный ответ
" Второй тест. Время на проект в часах: 220
, прибыль в срочном режиме: 150000
. Ожидаемый ответ: Выгодней срочный проект. Потратишь на него 262500
"
Хотя по идее должно быть “… потратишь на него 235000”.
var price = 1500;
var priceUrg = 3750;
var finalPrice;
var finalPriceUrg;
var urgantMessage = 'Выгодней срочный проект. Потратишь на него ';
var normalMessage = 'Выгодней обычный проект. Потратишь на него ';
var getProfitableProject = function(hours, profit){
if(hours > 150){
price = 1250;
priceUrg = 3500;
}
finalPrice = price * hours;
finalPriceUrg = priceUrg * (hours / 2) - profit;
if(finalPriceUrg < finalPrice){
return urgantMessage + finalPriceUrg;
} else{
return normalMessage + finalPrice;
}
};
Что не так? Прошу протянуть руку помощи
у вас присваивание новой цены до подстановки часов в срочном проекте. переделайте совсем программу, используя предыдущее задание.
у вас выходит 110 часов в срочном, а вы цену уже скинули на 250.
вот моё решение
Не трать деньги понапрасну 24/24
Спасибо!
Но так и не понял в чем ошибка моей логики. Причем первый тест проходит, ( _Первый тест. Время на проект в часах: 200
, прибыль в срочном режиме: 50000
. Ожидаемый ответ: Выгодней обычный проект. Потратишь на него 250000_
.) Раз для него механика верна, почему для второго теста она не проходит? ( Второй тест. Время на проект в часах: 220
, прибыль в срочном режиме: 150000
. Ожидаемый ответ: Выгодней срочный проект. Потратишь на него 262500
.)
я вам могу такой алгоритм написать, который будет все тесты проходить, но не будет верным =) тупо возвращать ожидаемое значение для теста в виде строки.
по типу
if (аргументы первого теста) {
return `Выгодней обычный проект. Потратишь на него 250000`;
} и так далее
по сути теперь:
у вас на вход идет значение в 220 часов.
идет первым условие - проверку прошло (220 > 150) и тут вы сразу даете цену на 250 ниже.
но в срочном проекте время делится пополам и (110 > 150) уже должно возвращать false, у вас же цена занижается на 250 независимо от того, больше ли 150 часов срочной работы или нет (то, что по идее должно работать на значениях 300+ по дефолту).
должно быть: 110*price*2.5-profit = 110*1500*2.5-150000 = 262500
у вас: 110*(price-250)*2.5-profit
(тут важно: это не формулы, а то что попадает в сравнение проектов)
первый тест проходит проверку, т.к. profit
недостаточно большой, также как и в 4ом.
просто переделайте, не используйте “волшебные константы” (а ведь в курсах про это говорили), опишите логику максимально разжеванно.
1.я понимаю что это доход,но откуда он взялся как он посчитан? чему равен?
2.Если можно то почему ответы разные получаются?
- это входной параметр функции
getProfitableProject
, берется из ввода. никак не посчитан, просто передается при обращении к функции вторым аргументом.
- этот вопрос несколько сложнее, давайте разбираться:
возьмем в качестве проверки 1 тест: 200 часов, 50к дохода.
мы вывели переменную в глобальную область. что это значит? что после каждого запуска функции мы ее будем наглухо изменять.
наша программа работает так: мы запускаем функцию, которая запускает 2 функции, сравнивает их результаты и возвращает что-то своё.
так вот, когда запускается первая вложенная функция (срочный проект), она изменяет глобальную переменную с 1500 на 3750 и переписывает её значение. 3750 * 100 = 375000.
когда запускается вторая вложенная функция (не срочный проект), она уже берет измененное на 3750 в качестве часовой ставки (заметим, что условие не выполняется на увеличение в 2.5 раза, т.к. 2ая вложенная функция несрочная). и отсюда получаем результат второй функции 200 * (3750 - 250) = 700000. ясен красен что результат не должен быть таким. ну а дальше основная функция оперирует неправильными данными, исход предсказуем. переменные даже нельзя поместить внутрь getProfitableProject
, результат будет тот же.
поэтому глобальную область держим всегда чистой. все изменения должны происходить внутри функций, кроме случаев, когда нужно явно её менять (в реальных проектах такого в природе не бывает).
1 лайк
My code!! )))
var getProfitableProject = function(hours, profit) {
var projectHot = getPrice(hours,true) - profit;
var projectNotHot = getPrice(hours, false);
if (projectHot < projectNotHot){
return ('Выгодней срочный проект. Потратишь на него ’ + projectHot );
}
else {
return ('Выгодней обычный проект. Потратишь на него ’ + projectNotHot);
}
};
1 лайк
что - то тупняка на ней поймал и долго решить не мог.
let time;
let profit;
const getPrice = (time, boolean) => {
let fix = 1500;
let sum = 0;
if (boolean) {
time = (time / 2);
fix = (fix * 2.5)
}
if (time > 150) {
fix = fix - 250;
}
sum = time * fix;
return sum;
}
function getProfitableProject(time, importantProfit) {
let urgent = getPrice(time, true) - importantProfit;
let normal = getPrice(time, false);
return urgent < normal ? 'Выгодней срочный проект. Потратишь на него ’ + urgent : 'Выгодней обычный проект. Потратишь на него ’ + normal;
}
getProfitableProject(time, profit)