Created
December 4, 2019 16:36
-
-
Save angel-rs/9fa17676dc18a055fd04230073958ad0 to your computer and use it in GitHub Desktop.
cassidoo's interview question #1
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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