Какой сегодня день? - решение

var getDayOfWeek = function(w, d){
  var y = 0
  var t = 0
  if (w=='понедельник'){y=0}
  else if (w=='вторник'){y=1}
  else if (w=='среда'){y=2}
  else if (w=='четверг'){y=3}
  else if (w=='пятница'){y=4}
  else if (w=='суббота'){y=5}
  else if (w=='воскресенье'){y=6}
  
  t=((y+d)%7)
  
  if (t==1){return 'понедельник'}
  else if (t==2){return 'вторник'}
  else if (t==3){return 'среда'}
  else if (t==4){return 'четверг'}
  else if (t==5){return 'пятница'}
  else if (t==6){return 'суббота'}
  else if (t==0){return 'воскресенье'}
 
}
3 лайка

“о мои глоза!” ©

@juwain жалоба на изнасилование в глаза принимается модераторами?

3 лайка

Поправил форматирование, получше? :grinning:

та у него еще переменные из одной литеры!
image

3 лайка

Автор, идея конечно нормальная, но реализация просто жесть. Вы главы про циклы и массивы просто пролистали что-ли? Вот мой вариант реализации, идея одинаковая у нас.

var getDayOfWeek=function (dayWeek,number){
  var week=['понедельник', 'вторник', 'среда', 'четверг', 'пятница', 'суббота', 'воскресенье'];
  var stMounth;
  for (var i=0;i<=6;i++)
  {
      if (week[i]==dayWeek) {stMounth=i-1;break;}
  }
  var t=((stMounth+number)%7);
  return week[t];
}
for (var i=0;i<=6;i++)
  {
      if (week[i]==dayWeek) {stMounth=i-1;break;}
  }

Зачем цикл, если есть .indexOf() ?

My solution

const days = [‘понедельник’, ‘вторник’, ‘среда’, ‘четверг’, ‘пятница’, ‘суббота’, ‘воскресенье’];
const getDayOfWeek = (firstDay, searchDay) => days[(days.indexOf(firstDay) + searchDay - 1) % 7];

О боги! Неужели я сделал это.
Не знаю почему, но на этой задаче меня заклинило основательно, я уже все остальные вызовы JS сделал, но вот к этой задаче подходил 4 раза и только на 4-ый раз всё же решил.
Сперва почти заставил работать программу (3 из 4 тестов проходили) с двумя циклами в предположении, что искомый день можно найти с помощью разницы числом месяца и ближайшем к нему числом месяца, делящимся нацело на 7, после безуспешно пытался заставить работать этот алгоритм и только потом до меня дошло, что остаток от деления можно использовать напрямую.

indexOf(), объекты и списки, как я понял, здесь использовать нежелательно.

Решение

var getDayOfWeek = function (day, num) {
var a = 0;
var b = 0;
switch (day) {
case ‘понедельник’:
a = 1;
break;
case ‘вторник’:
a = 2;
break;
case ‘среда’:
a = 3;
break;
case ‘четверг’:
a = 4;
break;
case ‘пятница’:
a = 5;
break;
case ‘суббота’:
a = 6;
break;
case ‘воскресенье’:
a = 7;
break;
};

var ost = num % 7;
b = a + (ost - 1);

switch (b) {
case 1: return ‘понедельник’;
case 2: return ‘вторник’;
case 3: return ‘среда’;
case 4: return ‘четверг’;
case 5: return ‘пятница’;
case 6: return ‘суббота’;
case 7: return ‘воскресенье’;
}
}

Мой вариант

var getDayOfWeek = function (weekdayFirst,numberDay) {
      var week=['понедельник','вторник','среда','четверг','пятница','суббота','воскресенье','понедельник','вторник','среда','четверг','пятница','суббота','воскресенье'];
      while (numberDay>7) {numberDay-=7}
      for (var i=0; i<7;i++){ 
        if (weekdayFirst === week[i]) { return (week[i+numberDay-1])}
      }
    }

Решение в две строки:
var getDayOfWeek=function(dayWeek,date){

var week =[‘понедельник’, ‘вторник’, ‘среда’, ‘четверг’, ‘пятница’, ‘суббота’, ‘воскресенье’];
return week[((week.indexOf(dayWeek)-1)+date)%7];
}

3 лайка

Добрый день. Может кто-нибудь объяснить, почему в консоли Chrome данный код работает полностью, но проверку проходит только 3 из 4?

var dayOfWeek = ['понедельник', 'вторник', 'среда', 'четверг', 
                'пятница', 'cуббота', 'воскресенье'];

var getDayOfWeek = function (firstDayOfWeek, number) {
	for (var i = 0; i < dayOfWeek.length; i++) {
		if(dayOfWeek[i] == firstDayOfWeek) {
		  i += number - 1;
		  for (var j = 0; j < dayOfWeek.length; j++) {
		    var circle = j;
		    while (circle != i && circle <= i) {
		      circle += 7;
		      if (circle == i) {
		        return dayOfWeek[j];
		      }
		    }
		  }
		}
	}
}

Написал другой код. Ошибка осталась, но в Chrome всё выполняется.

var dayOfWeek = ['понедельник', 'вторник', 'среда', 'четверг', 'пятница', 'cуббота', 'воскресенье'];

var getDayOfWeek = function (firstDayOfWeek, number) {
  for (var i = 0; i < dayOfWeek.length; i++) {
    if (dayOfWeek[i] == firstDayOfWeek) {
      i += number - 1;
      var result = i % 7;
      var answer = result;
    }
  }
  return dayOfWeek[answer];
}

Написал новый код: ситуация не изменилась.

var dayOfWeek = ['понедельник', 'вторник', 'среда', 'четверг', 'пятница', 'cуббота', 'воскресенье'];
var getDayOfWeek = function (firstDayOfWeek, number) {
  var result = dayOfWeek.indexOf(firstDayOfWeek);
      result += number - 1;    
  var circle = result % 7,
      answer = circle;
  return dayOfWeek[answer];
}

код верный. корявый, но верный. у академии косячок проверки, не пугайтесь.

upd: не, у академии все ок.
у вас словарик описан неверно. слово “суббота” начато с латинской “с”

3 лайка

Господи, спасибо большое. :smiling_face_with_three_hearts:

var getDayOfWeek = function(firstDayAtMonth, dayOfMonths)
{
  var daysOfWeek = ['понедельник', 'вторник', 'среда', 'четверг', 'пятница', 'суббота', 'воскресенье']

  var indexOfFirstDayAtMonth;
  
  for (var i = 0; i < daysOfWeek.length; i++)
  {
    if (daysOfWeek[i] === firstDayAtMonth)
    {
      indexOfFirstDayAtMonth = i;
    }
  }
  
  for (var i = 0; i < indexOfFirstDayAtMonth; i++)
  {
    var swap = (daysOfWeek.shift());
    daysOfWeek.push(swap);
  }
  
  if (dayOfMonths % 7 == 0)
  {
    result = daysOfWeek[6];
  }
  else
  {
    result = daysOfWeek[dayOfMonths % 7 - 1];
  }
  
  return result;
}

Безумное решение)

const arr = [‘понедельник’, ‘вторник’, ‘среда’,‘четверг’,‘пятница’,‘суббота’,‘воскресенье’];

let getDayOfWeek = function (day, date) {
let arrNew = [];

for (let i = arr.indexOf(day);i<arr.length && arrNew.length<date; i++) {
arrNew.push(arr[i]);
}
while (arrNew.length<date) {
for (let j = 0; j<arr.length && arrNew.length<date; j++) {
arrNew.push(arr[j])
}
}
return arrNew[arrNew.length-1]
}

Отличное решение. Только //((week.indexOf(dayWeek)-1)+date)// тут лишние скобки. Так достаточно: (week.indexOf(dayWeek) + date - 1)

let getDayOfWeek = function(firstDay, date) {
  let weekDay;
  let week = ['понедельник', 'вторник', 'среда', 'четверг', 'пятница','суббота','воскресенье', 'понедельник', 'вторник', 'среда', 'четверг', 'пятница','суббота','воскресенье'];
  
  let dayIndex = (date - (Math.floor(date / 7))*7) - 1;

  let i = week.indexOf(firstDay);
  if (date % 7 === 0) {
    weekDay = week[i-1];
  }else if (dayIndex === 0) {
    weekDay = firstDay;
  } else  {
    weekDay = week[i+dayIndex];
  }
 
  return weekDay;
}

Провозился около рабочего дня (в перерывах между работой), решение думаю средненькое но рабочее:

let getDayOfWeek = function (dayMonthStart, searchDay) {
  let week = ['понедельник', 'вторник', 'среда', 'четверг', 'пятница', 'суббота', 'воскресенье'];
  let indexDay = 0;
  searchDay -= 1;

  for (let i = 0; i < week.length; i++) {
    if (dayMonthStart === week[i]) {
      indexDay = i;
    }
  }

  if (indexDay > 0) {
    for (let i = 0; i < indexDay; i++) {
      for (let j = 0; j <= 5; j++) {
        let transition = week[j];
        week[j] = week[j+1];
        week[j+1] = transition;
      }
    }
  }

  return week[searchDay % 7];  
};