Skip to content

Instantly share code, notes, and snippets.

@spirinvladimir
Created April 13, 2017 08:24
Show Gist options
  • Save spirinvladimir/30a7f9c24e215444617cad60dcd0947e to your computer and use it in GitHub Desktop.
Save spirinvladimir/30a7f9c24e215444617cad60dcd0947e to your computer and use it in GitHub Desktop.
var
toAdd = true,
notToAdd = false,
events = [
{start: 1, end: 5},
{start: 2, end: 3},
{start: 4, end: 6},
{start: 7, end: 8},
{start: 9, end: 10},
{start: 10, end: 11},
{start: 11, end: 11}
];
function step(head, isAdd, events, intersect) {
var
neck = events.shift(),
tail = events;
if (neck === undefined) {
return isAdd
? intersect.push(head) && intersect
: intersect;
} else {
var
headEnd = head.end,
neckEnd = neck.end;
return neck.start > headEnd
? isAdd
? step(neck, notToAdd, tail, intersect.push(head) && intersect)
: step(neck, notToAdd, tail, intersect)
: headEnd > neckEnd
? step(head, toAdd, tail, intersect.push(neck) && intersect)
: step(neck, toAdd, tail, intersect.push(head) && intersect);
}
}
function doubleBooked(events) {
var
sortedEvents = events.sort(function (a, b) {return a.start - b.start; });
return step(
sortedEvents.shift(),
notToAdd,
sortedEvents,
[]
);
}
console.dir(doubleBooked(events));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment