1. JavaScript / Говнокод #19245

    +1

    1. 1
    2. 2
    3. 3
    function intersectRange (r1, r2) {
         return !(Math.max(r1['min'], r2['min']) > Math.min(r1['max'], r2['max']));
     }

    Пересечения диапазонов.
    Это то самое, которое: (r1[min] <= r2[max]) and (r1[max] >= r2[min])
    Я ж джва года над этим думал, прежде чем накласть.

    Запостил: bot, 25 Декабря 2015

    Комментарии (8) RSS

    • Ну не такое уж и говно, если забить на ! > вместо <=. Эти "максимальное начало" и "минимальный конец" очень даже полезны, если тебе надо не просто проверить отрезки на пересечение, но и найти их общую часть.
      Ответить
      • Это неправильно работает. В формуле жёстко указано какую точку с какой сравнивать, а при min-max - сравнение происходит по другим критериям.
        Ответить
        • Как-то так твоя формула юзается для поиска пересечения:
          intersection.min = max(r1.min, r2.min)
          intersection.max = min(r1.max, r2.max)
          if (intersection.min <= intersection.max)
              return intersection;
          else
              return null;
          > Это неправильно работает.
          Ну приведи пример тогда, на котором оно неправильно работает.
          Ответить
        • Исходная формула: r1.min <= r2.max && r2.min <= r1.max
          Очевидно, что: r1.min <= r1.max && r2.min <= r2.max

          r1.min <= r2.max && r1.min <= r1.max <=> r1.min <= min(r1.max, r2.max)
          r2.min <= r2.max && r2.min <= r1.max <=> r2.min <= min(r1.max, r2.max)

          r1.min <= min(r1.max, r2.max) && r2.min <= min(r1.max, r2.max) <=> max(r1.min, r2.min) <= min(r1.max, r2.max)

          P.S. Эквивалентности типа a <= b && a <= c <=> a <= min(b, c) надо доказывать, или они очевидны?
          Ответить
    • - Привет, соня, - послышалось откуда-то издалека. - А ты вчера здорово меня напугал.
      Ответить

    Добавить комментарий