यहां जावास्क्रिप्ट का उपयोग करना अभी तक एक और समाधान है। मेरे समाधान की विशेषताएं:
- अनंत के रूप में अशक्त मूल्यों को संभालता है
- मान लेता है कि निचला बाउंड समावेशी है और ऊपरी बाउंड अनन्य है।
- परीक्षणों का एक गुच्छा के साथ आता है
परीक्षण पूर्णांकों पर आधारित होते हैं, लेकिन चूंकि जावास्क्रिप्ट में ऑब्जेक्ट्स तुलनीय हैं, आप सिर्फ दो डेट ऑब्जेक्ट्स में भी फेंक सकते हैं। या आप मिलीसेकंड टाइमस्टैम्प में फेंक सकते हैं।
कोड:
/**
* Compares to comparable objects to find out whether they overlap.
* It is assumed that the interval is in the format [from,to) (read: from is inclusive, to is exclusive).
* A null value is interpreted as infinity
*/
function intervalsOverlap(from1, to1, from2, to2) {
return (to2 === null || from1 < to2) && (to1 === null || to1 > from2);
}
टेस्ट:
describe('', function() {
function generateTest(firstRange, secondRange, expected) {
it(JSON.stringify(firstRange) + ' and ' + JSON.stringify(secondRange), function() {
expect(intervalsOverlap(firstRange[0], firstRange[1], secondRange[0], secondRange[1])).toBe(expected);
});
}
describe('no overlap (touching ends)', function() {
generateTest([10,20], [20,30], false);
generateTest([20,30], [10,20], false);
generateTest([10,20], [20,null], false);
generateTest([20,null], [10,20], false);
generateTest([null,20], [20,30], false);
generateTest([20,30], [null,20], false);
});
describe('do overlap (one end overlaps)', function() {
generateTest([10,20], [19,30], true);
generateTest([19,30], [10,20], true);
generateTest([10,20], [null,30], true);
generateTest([10,20], [19,null], true);
generateTest([null,30], [10,20], true);
generateTest([19,null], [10,20], true);
});
describe('do overlap (one range included in other range)', function() {
generateTest([10,40], [20,30], true);
generateTest([20,30], [10,40], true);
generateTest([10,40], [null,null], true);
generateTest([null,null], [10,40], true);
});
describe('do overlap (both ranges equal)', function() {
generateTest([10,20], [10,20], true);
generateTest([null,20], [null,20], true);
generateTest([10,null], [10,null], true);
generateTest([null,null], [null,null], true);
});
});
कर्म और चमेली और प्रेत JS के साथ चलाने पर परिणाम:
फैंटमज 1.9.8 (लिनक्स): 20 में से 20 SUCCESS (0.003 सेकेंड / 0.004 सेकेंड)