Skip to content

Instantly share code, notes, and snippets.

@angel-rs
Created December 4, 2019 16:36
Show Gist options
  • Save angel-rs/9fa17676dc18a055fd04230073958ad0 to your computer and use it in GitHub Desktop.
Save angel-rs/9fa17676dc18a055fd04230073958ad0 to your computer and use it in GitHub Desktop.
cassidoo's interview question #1
// first solution "pretty"
const days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];
const dateOffset = (_day, _offset) => {
const day = days.indexOf(_day);
const offset = _offset % 7;
const sum = day + offset;
if ((day + offset) > days.length) {
return dateOffset(days[day], (day + offset) - days.length);
} else {
return days[day + offset];
}
};
// first solution: uglyfied
const days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];
const dateOffset = (day, offset) => ((days.indexOf(day) + offset % 7) > days.length)
? dateOffset(days[days.indexOf(day)], (days.indexOf(day) + (offset % 7)) - days.length)
: days[days.indexOf(day) + (offset % 7)];
// first solution: oneline
const days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']; const dateOffset = (day, offset) => ((days.indexOf(day) + Number(offset) % 7) > days.length) ? dateOffset(days[days.indexOf(day)], (days.indexOf(day) + (Number(offset) % 7)) - days.length) : days[days.indexOf(day) + (Number(offset) % 7)];
// second solution: "pretty"
let dateOffset = (day, offset = 0) =>
(
['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
.reduce(
(x, y, z, days) =>
(
z + 1 === 7 && (
(offset < 0) // if (input is negative)
? (days.indexOf(day) + (offset % 7)) < 0 // if (past array length on the left side)
? days[7 - Math.abs((days.indexOf(day) + (offset % 7)))] // true: 7 - abs(index + (-offset))
: days[days.indexOf(day) - (offset % 7)] // false: index - offset
: (days.indexOf(day) + (offset % 7)) >= 7 // else if (past array length on the right side)
? days[days.indexOf(day) + (offset % 7) - 7] // true: index + offset - 7
: days[days.indexOf(day) + (offset % 7)] // false: index + offset
)
),
0,
)
)
*/
// second solution - oneline challenge accepted ᕦ(ツ)ᕤ
// 437 characters total
// 365 characters without spaces
// no usage of ';' only one expression in the entire line ;)
let dateOffset = (day, offset = 0) => ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'].reduce((x, y, z, days) => z + 1 === 7 && offset < 0 ? (days.indexOf(day) + (offset % 7)) < 0 ? days[7 - Math.abs(days.indexOf(day) + (offset % 7))] : days[days.indexOf(day) - (offset % 7)] : (days.indexOf(day) + (offset % 7)) >= 7 ? days[days.indexOf(day) + (offset % 7) - 7] : days[days.indexOf(day) + (offset % 7)], 0)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment