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 'воскресенье'}
}
Поправил форматирование, получше?
та у него еще переменные из одной литеры!
Автор, идея конечно нормальная, но реализация просто жесть. Вы главы про циклы и массивы просто пролистали что-ли? Вот мой вариант реализации, идея одинаковая у нас.
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];
}
Добрый день. Может кто-нибудь объяснить, почему в консоли 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: не, у академии все ок.
у вас словарик описан неверно. слово “суббота” начато с латинской “с”
Господи, спасибо большое.
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]; };