Протеиновый коктейль: решение без циклов

Мой мозг категорически не захотел понимать как применить цикл в решении этой задачи и решил ее так:

var days = 9; // Дней в периоде
var period = 3; // Как часто я ем протеин (раз в три дня)
var workDayAmount = 200; // Количество протеина в будние
var weekendAmount = 100; // Количество протеина в выходные
var total;
var dayCount = Math.floor(days / 3);
var workDayCount;
var weekendDayCount;

if (days % 21 >= 6) {
weekendDayCount = Math.floor(days / 21) * 2 + 1;
} else {
weekendDayCount = Math.floor(days / 21) * 2;
};

workDayCount = dayCount - weekendDayCount;

total = workDayAmount * workDayCount + weekendAmount * weekendDayCount;

console.log(total);

magic number)

Вообще не magic. На выходной прием протеина выпадает через 6 дней, через 15, через 6, через 15 и т.д. Отсюда и 21.

а если период изменить?

Работает корректно для абсолютно любого периода.

Если на входе поставить такие данные:

var period = 1; 

То ожидаемый результат равен 1600, но ваш код дает ответ 1700. На месяц если подсчитать, то тоже с ошибкой.

здесь тоже magic

¯\_(ツ)_/¯

Блин, да. Выспавшись это решение и мне кажется уже тупеньким.

Math.floor(days / 3)

здесь тоже magic

Ну это было на period заменить.

В общем этот код работает с любой продолжительностью, но период собьет закономерность 6 и 15 дней и тогда все в урну.