Испытание "Запасы протеина"


#41

Такого кода вроде бы тут ещё не было:

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

for (var i = 1; i <= days; i++) {
if (i % period === 0) {
if (i % 7 === 0 || i % 7 === 6) {
total += weekendAmount;
} else {
total += workDayAmount;
}
}
}


#42

кстати он так и работает когда меньше делителя. т.е. число уменьшается на N целых делителей, пока не станет меньше делителя и возвращается как остаток от деления.


#43

Вариант работы без остатка(%);
Возможно кому то такой способ будут полезен;

var days = 25; // Дней в периоде
var period = 5; // Как часто я ем протеин (раз в три дня)
var workDayAmount = 200; // Количество протеина в будние
var weekendAmount = 100; // Количество протеина в выходные
var proteininBudnis
var totalv=0
var totalb=0
var totalp=0
var z=0
for (var i=period;i<=days;i+=period){
console.log(‘den’, i)
totalp=totalp+1

for(var p=0; p<=days;p+=6)
{
if (p>0){
if (p===i){
totalv=totalv+1
}
p=p+1
if (z===i)
{
totalv=totalv+1;
}
if (p===i)
{
totalv=totalv+1
}

  }
}

}

console.log(‘totalv=’, totalv)
console.log(‘totalp=’, totalp)
var total = workDayAmount * (totalp-totalv) + weekendAmount * totalv
console.log(total)


#44

var days = 15; // Дней в периоде
var period = 3; // Как часто я ем протеин (раз в три дня)
var workDayAmount = 200; // Количество протеина в будние
var weekendAmount = 100; // Количество протеина в выходные
var total = 0;
var dow=0;
for ( i = 1; i<=days; i ++) {
var weekend = false;
if ((i-1)%7===0){
dow = 0;
}
dow ++;
if (dow % 6 ===0 || dow%7===0){
weekend = true
}

if (i%period ===0 ) {
if (weekend){
total +=weekendAmount
}
else {
total +=workDayAmount
}
}
console.log(total, i)
}
console.log(total)


#46

Наверное, самое глупое решение из всех, но как смог)

var days = 22; // Дней в периоде
var period = 3; // Как часто я ем протеин (раз в три дня)
var workDayAmount = 200; // Количество протеина в будние
var weekendAmount = 100; // Количество протеина в выходные
var total = 0;
for(var i = 1; i <= days; i++){
if(i%period === 0){
if(i%7 >=1 && i%7 < 6){
total+=workDayAmount;console.log(“Day:”+i+’ Глотну прот’ + total +‘грамм’ );}
else if(i%7 === 6 || i%7 === 0){total +=weekendAmount;console.log(“Day:”+i+’ Выходной: ‘+total+ ’ грамм’);}}
else {console.log(‘0’)}
}

Вначале поставил i%7 = 7 думая, что это воскресенье и долго не мог понять, почему прошло 4 проверки из 5. 21 день, 42 день и тд тупо не проходил)


#47

ничего не глупое, все учимся. теперь еще сделайте так, чтобы меньше итераций было. т.е. чтобы итератор был не i++. заодно избавитесь от одного условия. сейчас у вас количество итераций равно days. а для этой задачи нужно меньше


#48

Вариант без остатка от деления:

var days = 9; // Дней в периоде
var period = 3; // Как часто я ем протеин (раз в три дня)
var workDayAmount = 200; // Количество протеина в будние
var weekendAmount = 100; // Количество протеина в выходные
var total = 0;
for (var i = period; i <= days; i += period) {
  var j = i;
  while (true) {
    if (j >= 1 && j <= 5) {
      total += workDayAmount;
      break;
    } else if (j >= 6 && j <= 7) {
      total += weekendAmount;
      break;
    } else {
      j -= 7;
    }
  }
}

#49

while (true) { … }

это конечно было мощно =)
лучше сократить эту часть до:

  var j = i;
  j -= Math.floor(j / 7) * 7;
  if (j == 6 || j == 0) {
    total += weekendAmount;
  } else {
    total += workDayAmount;
  }

#50

Помогите разобраться, что неправильного здесь?
for (var i = 1; i <= days; i++) {
if (i % period === 0 && i % 7 === 0 || i % 7 ===6) {
total += weekendAmount;
} else {
total += workDayAmount;
}
}


#51

i % period === 0
нужно вывести условием выше внутри цикла

либо обойтись вообще без него, изменив шаг итерации на период (а не i++)


#52

Да, спасибо и сам уже понял.


#53

Почему нужно использовать именно так (i % 7 === 6), а не так (i % 6 === 0)??


#54

остаток от деления на 6 и на 7 это разные вещи


#55

Добрый вечер всем!)
Вот мое решение.
вроде как очень похоже на решения остальных, но все-равно не так.
Все работает)
var total = 0;

for (var i = 1; i<= days; i++) {
if (i % period === 0) {
if ((i % 7) === 6 || i % 7 === 0) {
total += weekendAmount;
} else {
total += workDayAmount;
}
}
}
console.log(total);


#56

Так если субботу, это 6 день недели и при делении будет 0. Мы же выделяем выходные, а это 6 и 7 день недели


#57

ключевое слово “недели”. сами подумайте, если в неделе было бы 10 дней (а не 7), у вас бы тот же результат получился?


Решение задачи с потребленным протеином в четные и нечетные дни (без циклов)