1. Java / Говнокод #6688

    +147

    1. 1
    2. 2
    3. 3
    4. 4
    public boolean intersects(final Range range) {
          return (((range.indexFrom >= this.indexFrom) ? range.indexFrom : this.indexFrom) <=
            ((range.indexTo <= this.indexTo) ? range.indexTo : this.indexTo));
        }

    проверка пересечения двух диапазонов

    Запостил: Lure Of Chaos, 17 Мая 2011

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

    • А если один диапазон полностью находится в другом, это считается пересечением? [ну мало ли...]
      Ответить
      • должно считаться, но кого это волнует?
        Ответить
      • upd. вообще-то считается, и этот случай в порядке - тогда пересечение, это меньший диапазон
        Ответить
    • Всего то 9 вариантов...
      Ответить
      • поспешил я с функцией, там далее такое чудо:
        public Range[] union(final Range range) {
              return ((((range.indexFrom >= this.indexFrom) ? range.indexFrom : this.indexFrom) <= (range.indexTo <= this.indexTo) ? range.indexTo : this.indexTo))) ? new Range[] { new Range(          ((range.indexFrom <= this.indexFrom) ? range.indexFrom : this.indexFrom), ((range.indexTo = this.indexTo) ? range.indexTo : this.indexTo)) }          : new Range[] { range, this };
            }

        подсчитайте кол-во действий?
        Ответить
        • 1) не хватает ( после <= и в последнем тернарном >

          2)Все варианты:
          abcdefghijkl
          this: cdefghij
          range: cdefghij
          defghi
          cdef
          fghij
          bcdef
          fghijk
          bcdefghij
          cdefghijk
          bcdefghijk

          3) Вернуть область пересечения:
          public Range[] union(final Range range) {
            return new Range[] { 
                        new Range( 
                ((range.indexFrom >= this.indexFrom) ? range.indexFrom : this.indexFrom), 
                 ((range.indexTo <= this.indexTo) ? range.indexTo : this.indexTo)        
                		  )
              }; 
          }
          Ответить
          • Не все.

            // наверно как-то так...
            public Range[] union(final Range range) {
            	if ( (range.indexFrom < this.indexFrom && range.indexTo < this.indexFrom) 
            	     ||
            	     (range.indexFrom > this.indexTo  && range.indexTo > this.indexTo)
            	)
            		return null;
            
            	if (range.indexFrom > range.indexTo) {
            	   	int tmp = range.indexTo;
            	   	range.indexTo = range.indexFrom;   
            	   	range.indexFrom = tmp;
            	}
            
            	return new Range[] { 
                	new Range( ((range.indexFrom < this.indexFrom)? this.indexFrom : range.indexFrom) ,
                                ((range.indexTo > this.indexTo)? this.indexTo : range.indexTo)           
                             )                
               };    
            }
            Ответить
            • рабочий (проходит все придуманные тесты) вариант такой:
              public Range[] union(final Range range) {
                    return (range == null) ? new Range[] { new Range(this.indexFrom, this.indexTo) } : ((((range.indexFrom >= this.indexFrom) ? range.indexFrom
                        : this.indexFrom) <= ((range.indexTo <= this.indexTo) ? range.indexTo : this.indexTo))) ? new Range[] { new Range(
                        ((range.indexFrom <= this.indexFrom) ? range.indexFrom : this.indexFrom), ((range.indexTo >= this.indexTo) ? range.indexTo : this.indexTo)) }
                        : new Range[] { range, this };
                  }
              Ответить
              • и такие:
                |---| - this
                |+++| - range
                # - whitespace
                ----------------------------
                #######|-----|
                ##|+++|
                ----------------------------
                ###|---|
                #######|+++|
                -----------------------------
                #####|-------|
                ###|++++++++|
                ------------------------------
                Ответить
                • TESTING [0:0] and[2:2]:
                  intersects? false intersection:null
                  union:[2:2][0:0]
                  exclusion:[2:2][0:0]

                  TESTING [0:3] and[2:4]:
                  intersects? true intersection:[2:3]
                  union:[0:4]
                  exclusion:[0:1][4:4]

                  TESTING [0:3] and[1:2]:
                  intersects? true intersection:[1:2]
                  union:[0:3]
                  exclusion:[3:3][0:0]

                  TESTING [2:4] and[0:2]:
                  intersects? true intersection:[2:2]
                  union:[0:4]
                  exclusion:[3:4][0:1]
                  Ответить
        • Снова сквозь тернистый к звездам?
          Ответить
    • блядь, наговнякалл как...
      Ответить
    • показать все, что скрытоvanished
      Ответить
    • показать все, что скрытоvanished
      Ответить
    • показать все, что скрытоvanished
      Ответить

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