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

Долго не мог понять, почему не работает условие

if (i % 6 == 0 || i % 7 == 0) 

Оказалось, что суббота 2-й недели - не 12-й день :slight_smile:

В итоге подправил и заработало:

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

Эта запись означает:

if( i % 7 === 6 ) - при делении на 7 (дней в неделе) мы в остатке получаем 6-й день, значит субботу, воскресенье.
if(i % 7 === 0) - при делении переменной i на 7 (дней в неделе) мы в остатке получаем 0, значит седьмой день в неделе, т.е. воскресенье, выходной.

|| - логический оператор “или”.

У меня возник вопрос.Почему во втором условии мы отнимаем
weekendAmount = 100.

Не могу понять, почему проходит 4 из 5 проверок. На значении 25 выдаёт ошибку !

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 < 6 ) {
total += workDayAmount;
} else {
total +=weekendAmount;
}
}
}
console.log(total);

Ваш код не проходит проверку со значением 25 из-за того, что один из дней приёма выпадает на воскресенье. 21 день. остаток от деления равен 0. Он меньше, чем 6, поэтому помечается рабочим днём и прибавляется 200 грамм. Обработайте отдельно случай с воскресеньями и тест будет пройден

Спасибо, исправил!

1 лайк

Странно что это нигде не написано, я всё делил 6/7 и получал 0.8 и не мог понять как
6 % 7 === 6. Так что спасибо за разъеснение.

1 лайк

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

for( var i = 1; i <= days; i++){
if( i % 7 == 6 || i % 7 == 0 && i % 3 == 0 ){
total+=weekendAmount;

}; if ( i % 7 != 6 && i % 7 != 0 && i % 3 == 0){
total+=workDayAmount;

}

}

console.log(total)

Добрый день!
В первом If не хватает скобок. Условие не всегда корректно срабатывает.
( (i % 7 == 6 || i % 7 == 0) && i % 3 == 0 )

Долго мучилась с тем как определить субботу (не заглядывала в подсказки) .
В итоге придумалось )

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

Не знаю как, но меня занесло почему-то решать через while. Долго не мог понять, почему не проходит все испытания. Пока не поменял (day%6===0) на (day%7===6). Ведь на 6 делится без остатка 18,24,30 и т.д.

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

while (day<=days){
if (day%3===0 &&((day%7===6)||(day%7===0))){
total+=weekendAmount;
console.log(total);
} else if(day%3===0){
total+=workDayAmount;

}else{
  total=total;}
    console.log(total);
  
day++;
}

Получается если n%m и n < m всегда будет = m?

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

3%7 == 3 || 3%7 == 3
6%7 == 6 || 6%7 == 6
Я правильно написал?

Ведь если сработает условие 7%7 === 0, то выполнится условие “Количество протеина в выходные”, на воскресенье, а он только пьет “выходную” норму коктейля в субботу.
Или я что-то не понимаю?

Долго не мог сам додумать, как высчитать субботу…Пока не посмотрел подсказку.

for (let i = period; i <= days; i += period) {  
    ( i % 7 === 0 || i % 7 === 6) ? 
        total += weekendAmount : total += workDayAmount   
}

console.log(total)

Да, детка!

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

for (let dayNumber = 2; dayNumber <= days; dayNumber++){
  console.log(dayNumber);
  if (dayNumber % period === 0) {
    if (dayNumber === 6) {
      total += weekendAmount;
      console.log(total);
    } else if (dayNumber % 7 === 6 || dayNumber % 7 === 0) {
      total += weekendAmount;
      console.log(total);
    } else {
      total += workDayAmount;
      console.log(total);
    }
  }
}
1 лайк

тоже на это попалась )) Допёрла, исправила, заработало ))

Без подсказки получилось так.

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

for (day = period; day <= days; day += period) {
if(day % period === 0) {
if ((day >= 6 && day <= 7) || (day >= 13 && day <= 14) || (day >= 20 && day <= 21) || (day >= 27 && day <= 28))
{total += weekendAmount;}
else {total += workDayAmount}
}
}

1 лайк

длинно, но работает

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

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

if (i % 7 === 1 || i % 7 === 2 || i % 7 == 3 || i % 7 == 4 || i % 7 == 5){
total=total+workDayAmount
}
}
console.log(total)

Всем привет,подскажите упражнение из тренажеров ‘Запасы протеина’,программа принимает решение все хорошо,но такой вопрос,если i будет равняться 7-ми в этом случае первое условие не выполнится,а выполнится второе то-есть от значение total отнимется значение weekendAmount, тогда total на 7-й день должен равняться 200,а программа пишет что 300,как так не могу понять.

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

}

}

Вот мое решение, расписал вдруг кому-то пригодится. Изначально не мог решить тк думал что остаток деления на 6 находит день субботы, но как оказалось - нет

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

//Находим каждый день указанный в period
for(i = period; i <= days; i += period) {
  //Выходные (6 и 7 день недели)
  let weekendDays = i % 7 === 6 || i % 7 === 0;
  
  if (!weekendDays) {
    console.log(i + ' День приема протеина, Босс. Суточное колличество: ' + workDayAmount + ' г');
    total += workDayAmount;
  } 
  else {
    console.log(i + ' День приема протеина, Босс. Суточное колличество: ' + weekendAmount + ' г');  
    total += weekendAmount;
  }
}
for (let day = period; day <= days; day += period) {
  let periodDay = day % 7;

  if (!(periodDay % 6) || !(periodDay % 7)) {
    total += weekendAmount;
  } else  {
    total += workDayAmount;
  }
}
1 лайк