Испытание:Вечный вопрос

Спасибо за ответ, буду разбираться)

а почему в задаче требуется вывести “доход от вклада”, а проверка в качестве ответа требует сумму дохода и вклада?

Добрый день!
Это неточность в формулировке задания. Передам информацию авторам, поправим в ближайшее время.

Все-таки введение доп. переменных для сокращения ветвления больше нравится))

код здесь
var calculateDeposit = function (amount, rate, term, isСapitalize) {
  
  var totalSum = amount + ((rate * 0.01 / 12) * term * amount);
  
  if (isСapitalize) {
    for (var i = 0; i < term; i++) {
      amount += ((rate * 0.01 / 12) * amount);
      totalSum = amount;
    }  
  }
  
  return (Math.floor(totalSum)); 
};

var getProfitableDeposit = function (amount, term, simpleRate, complexRate) {
  
  var simple = calculateDeposit(amount, simpleRate, term, false);
  var complex = calculateDeposit(amount, complexRate, term, true);
  var profitableDeposit = simple;
  var recommendation = 'Выбирай обычный вклад. Заработаешь ';
  
  if (complex >= simple) {
    profitableDeposit = complex;
    recommendation = 'Выбирай капитализацию. Заработаешь ';
  }

  return recommendation + profitableDeposit;
};

Hierumo с тобой можно связаться в vk?

Вроде просто получилось и код менял минимум после предыдущего задания.

` let getProfitableDeposit = function (startSum,months,percentNorm, percentCap) {
let finalSumCap = startSum;
let winSum = percentNorm/100/12monthsstartSum;
let finalSumNorm = startSum + winSum;
for (var i=0; i<months; i++){
let winMonth =finalSumCap*percentCap/100/12;
finalSumCap += winMonth
}

let console;
let finalSum;

if (finalSumNorm>finalSumCap){
finalSum = Math.floor(finalSumNorm);
console = 'Выбирай обычный вклад. Получишь ’ + finalSum
} else {
finalSum = Math.floor(finalSumCap);
console = 'Выбирай капитализацию. Получишь ’ + finalSum
}
return console
}; `

Здравствуйте!
Мой вариант:

С функциями как то попроще дела, чем с массивами :monkey:

Сводка
let calculateDeposit = function (sum, percent, term, isPlowBack) {
  
  if (isPlowBack) {
    
    for (let i = 0; i < term; i++) {
      sum += sum * (percent / 12 * term) / 100 / term
      } 
    
  } else {
      sum += sum * (percent / 12 * term) / 100 
     }
     
     return Math.floor(sum)

}

let getProfitableDeposit = function (sum, term, percent, percentPlowBack) {
  
  let simple = calculateDeposit(sum, percent, term, false)
  let plowBack = calculateDeposit(sum, percentPlowBack, term, true)
  
  if (simple > plowBack) { 
  return 'Выбирай обычный вклад. Получишь ' + simple
  } else {
  return 'Выбирай капитализацию. Получишь ' + plowBack
  }
}

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

Сводка
let getProfitableDeposit = function (
   deposit,
   months,
   simplePercent,
   capitalisePercent
) {
   let simpleMoney = Math.floor((simplePercent / 100 / 12) * months * deposit + deposit);
   let capitaliseMoney = Math.floor(deposit * (1 + capitalisePercent / 100 / 12) ** months);
   if (simpleMoney > capitaliseMoney) {
      return "Выбирай обычный вклад. Получишь " + simpleMoney;
   } else {
      return "Выбирай капитализацию. Получишь " + capitaliseMoney;
   }
};

Но ведь в задании четко написано, что предыдущую функцию нужно вызвать из новой (дважды, для каждого вида вклада).

Моё решение:

Сводка
let calculateDeposit = function (depoSum, percent, depoTerm, isCapital) {  
  
if (isCapital) {   
for (let i = 1; i <= depoTerm; i++) { 
let capitalRate = percent*0.01/12*depoSum;
depoSum += capitalRate;
} 
}
else {
let usualRate = percent*0.01/12*depoSum*depoTerm;
depoSum += usualRate;
} 
return Math.floor(depoSum);
}

let getProfitableDeposit = function (depoSum, depoTerm, usualRate, capitalRate) { 
let result = '';

let capitalProfit = calculateDeposit(depoSum, capitalRate, depoTerm, true);  
let usualProfit = calculateDeposit(depoSum, usualRate, depoTerm, false);  

if (capitalProfit > usualProfit) {
   result = 'Выбирай капитализацию. Получишь ' + Math.floor(capitalProfit);
} else {
   result = 'Выбирай обычный вклад. Получишь ' + Math.floor(usualProfit);
} 
return result;
};

Но ведь в задании четко написано, что предыдущую функцию нужно вызвать из новой (дважды, для каждого вида вклада).

?

простите, кому-то другому хотела написать, а случайно вас тегнула

Не увидел тут вариант похожий на мой. Может будет кому интересно

function playScore(itStart, itPercent) {
return monthPercent = itStart * (itPercent/12) / 100
}

function getProfitableDeposit(start, time, percent, percentС) {
let startC = start;

for (let i = 0; i < time; i++){
startC += playScore(startC, percentС) * 1;
}

start += playScore(start, percent) * time;

if (start - startC > 0){
start = 'Выбирай обычный вклад. Получишь ’ + Math.floor(start);
} else {
start = 'Выбирай капитализацию. Получишь ’ + Math.floor(startC);
}

return start
}

Сделал на базе предыдущей, но без вызова одной функции из другой

Сводка

let getProfitableDeposit = function (baze, month, simpleInterest, compoundInterest) {

 //Депозит с простых %
 let newPercent = simpleInterest / 12 * month;
 let furtherAmount = baze/100 * newPercent;
 let total = Math.floor(baze + furtherAmount);

 //Депозит со сложных %
 let monthPercent = compoundInterest / 12;     
 for (let i = 1; i <= month; i++) {
 baze += (baze/100 *monthPercent);    
  }
 let totalCompound = Math.floor(baze); 

 // Сравнение
 if (total > totalCompound) {
 return ('Выбирай обычный вклад. Получишь ') + total;
 } return ('Выбирай капитализацию. Получишь ') + totalCompound; 

}

let calculateDeposit = function (startDep, percent, time, isCapital) {
  let summ = 0;
  percent = percent / 100;
  if(!isCapital) {
    percent = (percent / 12 * time);
    summ = startDep + Math.floor(startDep * percent);
  } else {
      for(let i = 0; i < time; i++) {
        startDep += startDep * percent / 12;
        summ = Math.floor(startDep);
      }
    }
  return summ;
};

let getProfitableDeposit = function(depSource, depTime, freePercent, capitalPercent) {
  let simple = calculateDeposit(depSource, freePercent, depTime, false);
  let hard = calculateDeposit(depSource, capitalPercent, depTime, true);
  
  if(simple > hard) {
    return 'Выбирай обычный вклад. Получишь ' + simple;
  } else if (simple < hard){
    return 'Выбирай капитализацию. Получишь ' + hard;
    }
}
getProfitableDeposit();

Мой вариант решения на основе изученных материалов:

Сводка

let getProfitableDeposit = function (startSum, period, persentNonCap, persentCap) {

let totalCap = startSum;
let totalNonCap;
let decision;

  totalNonCap = startSum + (startSum * (persentNonCap / 12 * period) / 100);
 
      for (let i=1; i<=period; i++) {
        totalCap += totalCap * (persentCap / 12) / 100;
      };
   
    
  if (totalNonCap > totalCap) {
    
    decision = 'Выбирай обычный вклад. Получишь ' + Math.floor(totalNonCap);  
  };
  
  if (totalNonCap < totalCap) {
    
    decision = 'Выбирай капитализацию. Получишь ' + Math.floor(totalCap);  
  };

return decision
}

Мой вариант. У меня всё работает.)))

let calculateDeposit = function (initialSum, percentAge, depositMonths, boolVariable) {
  let percent = percentAge / 100;
  let depositTotal = 0;
  
  if(!boolVariable) {
    depositTotal = ((percent / 12) * depositMonths * initialSum) + initialSum;
  }
  else {
    depositTotal = calculateDepositMonths(initialSum, percentAge, depositMonths);
  }
  return Math.floor(depositTotal);
};

let calculateDepositMonths = function (initialSum, percentAge, depositMonths) {
  let percent = percentAge / 100;
  let depositTotal = initialSum;
  
  for(let i = 0; i <= depositMonths - 1; i++) {
    depositTotal += (percent / 12) * depositTotal;
  }
  return depositTotal;
};

getProfitableDeposit = function (initialSum, depositMonths, simplePercent, capitalPercent) {
  OutCapitalization = calculateDeposit(initialSum, simplePercent, depositMonths, false);
  Capitalization = calculateDeposit(initialSum, capitalPercent, depositMonths, true);
  if(OutCapitalization >= Capitalization) {
  return strVal1 = 'Выбирай обычный вклад. Получишь ' + OutCapitalization;
  } else {
    return strVal2 = 'Выбирай капитализацию. Получишь ' + Capitalization;
  }
}

console.log(getProfitableDeposit(10000, 9, 7, 6.8));

Ого, интересное решение)

Я решил так, добавлю в общую кучу - может кому-то поможет понять:

let getProfitableDeposit =function(startDeposit, termDeposit, percentDef, percentCap) {
  let percentDefProfit = (startDeposit * 0.01) * (100 + percentDef / 12 * termDeposit);
  
  let percentCapProfit = startDeposit;
  for(i = 1; i <= termDeposit; i++) {
    percentCapProfit += (percentCapProfit * percentCap / 1200);
  }
  
  if(percentDefProfit > percentCapProfit) {
    return 'Выбирай обычный вклад. Получишь ' + Math.floor(percentDefProfit);
  }
  return 'Выбирай капитализацию. Получишь ' + Math.floor(percentCapProfit);
}

Рабочий код, проходит проверку.
let getProfitableDeposit = function(depositAmount,termOfDeposit, percentYearNotCap, percentYearCap){
let totalSumNotCap = Math.floor(depositAmount + depositAmount * (percentYearNotCap/12*termOfDeposit/100))
let profitAmount = 0;
for (let i = 1; i <= termOfDeposit; i++){
profitAmount += (depositAmount + profitAmount) * (percentYearCap/12/100)
};
let totalSumCap = depositAmount+Math.floor(profitAmount);
console.log(totalSumCap);

    if(totalSumNotCap-depositAmount > totalSumCap-depositAmount){
      return 'Выбирай обычный вклад. Получишь ' + totalSumNotCap;
      } else{
        return 'Выбирай капитализацию. Получишь ' + totalSumCap;
        }

}