Испытание: Деньги к деньгам

Большое спасибо!)
Видимо из-за того что раньше в ТЗ был Math.round я был уверен, что именно с ним и нужно решать.
x - сумма %, ввел просто для наглядности.

var calculateDeposit = function (startSum, percent, depositTime, isCapitalization) {
  if (!isCapitalization) {
    var depositSum = (percent / 100 / 12) * depositTime * startSum + startSum;
  } else {
    for (var i = 0; i < depositTime; i++) {
     depositSum = startSum += (percent / 100 / 12) * startSum;
    }
  }
  return Math.floor(depositSum);
};

Мой вариант:

Код
var calculateDeposit = function (sum, percent, period, isCapital) {  
    if (isCapital) {
      for (var i = 0; i < period; i++) {
        sum += sum * (percent/1200);
        }       
      }    
    else {
      sum += sum * ((percent/1200) * period);
      }  
    return Math.floor(sum);
};

Мой код в 2 строчки без циклов (извините, не разобралась, как красиво вставить код)

Сводка

`
var calculateDeposit = function (cash0, rate, period, ifCapitalize) {
var cash1 = cash0 * (1 + (rate / 100) / 12 * period);

if(ifCapitalize) {
  cash1 = cash0 * ((1 + (rate / 100) / 12) **  period);
  }

return Math.floor(cash1);
};`

1 лайк

Делюсь своим решением:
let calculateDeposit = (sm,pg,sr,f)=> {

 let pm = (pg/12)/100; // процент за месяц, от 1

 let pp = (a) =>(a=sm*(pm*sr+1),Math.floor(a));// без капитализации
 let cp = () =>(sm*=(1+pm),Math.floor(sm)); // с капитализацией 1 месяц

 return (!f)?pp():Array(sr).fill().reduce(a=>a=cp(),0);

};

скрывать не умею, вставлю пока так, мое решение, вдруг кому-нибудь будет полезно

var calculateDeposit = function (startSum, percent, period, isCapital) {

var sumDeposit = startSum;

if (isCapital) {

for (var i = 0; i < period; i++) {
  
sumDeposit += Math.floor((percent / 12 * 0.01) * sumDeposit);

  } 

} else {
    
sumDeposit = startSum + (percent / 12 *  period * 0.01) * startSum;

  }

return Math.floor(sumDeposit);
};

Что бы скрывать надо сначала нажать на опции (шестеренка) и выбрать пункт скрыть детали, дальше думаю разберешься

1 лайк

Мой вариант :

Как прятать то?

Это-ж гениально! но каким образом программа сeммирует dep при условии isK? Вообще не ясно. Обычно перед if мы ставили какую-то новую переменную, с нулевым значением, что бы потом в неё суммировалось. А у вас этого вообще нету, и всё работает!

ну нам надо найти увеличенную входную переменную, почему бы ее напрямую не увеличить без буфера и не засоряя память? вроде ж логично

2 лайка

Отличное решение, только в конце не round a floor

var calculateDeposit = function (oneSum, percentEars,timeСontribution, 
capitalization) {
  var continSum;
  var percent;
  var plain;
  if (capitalization == false) {
   percent = (percentEars / 12) * timeСontribution;
   plain = oneSum * (percent / 100);
   continSum = Math.floor(plain + oneSum);
    }else{
      percent = (percentEars / 12);
      for (var i = 1; i <= timeСontribution; i++) {
      plain = oneSum * (percent / 100);
      var twoSum = plain + oneSum;
      plain = twoSum * (percent / 100);
      oneSum = twoSum;
      }
      continSum = Math.floor(twoSum);
    }
return continSum;
};

var calculateDeposit = function (sumDeposit, percent, term, isCapitalize) {
if (isCapitalize) {
for (var i = 0; i < term; i++) {
sumDeposit += sumDeposit * percent / 12 * 0.01;
}
} else {
sumDeposit += sumDeposit * percent / 12 * term * 0.01;
}

return Math.floor(sumDeposit);
};

Получилось вот так в результате:

Сводка
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)); 
};

Отдельное спасибо @Hierumo и @Ineska за внятные пояснения)).

[ РЕШЕНО ] Спасибо @Hierumo и @Ineska

Не проходит 4-ю проверку.
Пробовал 3 готовых кода с форума, результат тот же!
Помогите разобраться…

Сводка
let calculateDeposit = function (depositSum,percentYear,month,isCapitalize) {
    let bonus = 0
    let percentMonth = percentYear / 12 / 100
    if (isCapitalize === false) {
       bonus  = depositSum * (percentMonth * month)
    } else if (isCapitalize === true) {
       bonus = depositSum * percentMonth
      for (let i = 1; i < month; i++) {
       bonus += bonus * percentMonth
      }
    }
    return Math.floor(depositSum + bonus)
};

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

:thinking:

Сводка
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 calculateDeposit = function (deposit, percent, month, isCapitalise) {
         let money;
         if (!isCapitalise) {
            money = (percent / 100 / 12) * month * deposit + deposit;
       } else {
            money = deposit * (1 + percent / 100 / 12) ** month;
       }
       return Math.floor(money);
  };
Не очень аккуратно, но проверку проходит.

function calculateDeposit (a, b, c, d) {
let total;
let per = (a / 100) * (b / 12);
if (d) {
for (let i = 0; i < c; i++) {
let perc = a * (b / 12 * 0.01);
a += perc;
}
} else {
a = (per * c) + a;
}
total = Math.floor(a)
return total;
};