Detecting if two number ranges clash

math, php, range

Solution

Well, first make sure you have well-ordered pairs (probably a good idea anyway, depending on what you plan to do with them):

if($a1 > $a2) {
    // swap $a1 and $a2
    $temp = $a1;
    $a1 = $a2;
    $a2 = $temp;
}
if($b1 > $b2) {
    // swap $b1 and $b2
    $temp = $b1;
    $b1 = $b2;
    $b2 = $temp;
}

Then you should be able to simplify to:

$clash = ($a2 <= $b1) || ($a1 >= $b2);

Edit: Whoops, got that test backwards! Try:

$clash = !(($a2 <= $b1) || ($a1 >= $b2));

Problem

This is hopefully a very simple maths question. If I have two number ranges, what is the simplest and most efficient way to check if they clash, eg: ``` 10-20 and 11-14 // clash as B is contained in A 11-15 and 20-22 // don't clash 24-26 and 20-30 // clash as A is contained in B 15-25 and 20-30 // clash as they overlap at each end ``` I currently have this mess, but there must be a much simpler way to do this check: ``` $clash = ($b1 >= $a1 && $b1 <= $a2) || ($b2 >= $a1 && $b2 <= $a2) || ($a1 >= $b1 && $a1 <= $b2) || ($a2 >= $b1 && $a2 <= $b2); ```

Original source