Задача:
В стакане размножаются амебы. Амебы размножаются делением на две. Деление происходит 1 раз в секунду. Если в пустой стакан посадить одну амебу, то он заполнится амебами через 1 минуту. Через какое время пустой стакан будет заполнен амебами, если посадить туда сразу две амебы?
Как я решил её:
function getReproductionTime(reproductionSpeed, amoebasQuantuty, glassCapacity) {
//цикл от пустого стакана (0) до полного (capacity)
//увеличивается на скорость размножения
//в цикле первоначальное количество амеб удваивается
for (i = 0; i < glassCapacity; i += reproductionSpeed) {
amoebasQuantuty *= 2;
//стакан заполнился, значит мы полуичли reproduction time
if (amoebasQuantuty >= glassCapacity)
return i;
}
}
function getGlassCapacity(reproductionSpeed, amoebasQuantuty, reproductionTime) {
//цикл от 0 секунд до время размножения, увеличивается на скорость
//в цикле амебы удваиваются
for (i = 0; i < reproductionTime; i += reproductionSpeed) {
amoebasQuantuty *= 2;
}
return amoebasQuantuty;
}
let glassCapacity = getGlassCapacity(1, 1, 60);
console.log('Glass capacity is ' + glassCapacity + ' amoebas');
let start = 2;
let reproductionTime = getReproductionTime(1, start, glassCapacity);
console.log('Start with ' + start + ' amoebas. Glass is full in ' + reproductionTime + ' seconds');
Вроде задачка простая, но я уже не уверен, правильно ли я ее решил или совсем в корне неверно. Смущает огромная цифра в результате и не сильно отличающееся время от 1 минуты.
Glass capacity is 1152921504606847000 amoebas
Start with 2 amoebas. Glass is full in 58 seconds