Program: 55919
Project: 55919
Buggy source:
/** 
 * Checks if other towers that intersect the area of the given tower can occupy free positions of the area of the given tower and lets them do so.
 * @param tower
 */
private void checkOtherTowersInArea(PartitionOccupyingTower tower){
  IPredicate<ShortPoint2D> predicate=new IPredicate<ShortPoint2D>(){
    @Override public boolean evaluate(    ShortPoint2D pos){
      final int idx=pos.x + pos.y * width;
      return towers[idx] <= 0;
    }
  }
;
  ArrayList<ShortPoint2D> freedPositions=new IteratorFilter<ShortPoint2D>(tower.area,predicate).toList();
  if (!freedPositions.isEmpty()) {
    List<Tuple<Integer,PartitionOccupyingTower>> towersInRange=occupyingTowers.getTowersInRange(tower.position,tower.radius);
    Collections.sort(towersInRange,Tuple.<Integer,PartitionOccupyingTower>getE1Comparator());
    for (    Tuple<Integer,PartitionOccupyingTower> curr : towersInRange) {
      if (curr.e2.playerId == tower.playerId) {
        continue;
      }
      PartitionOccupyingTower currTower=curr.e2;
      final IMapArea currArea=currTower.area;
      IteratorFilter<ShortPoint2D> area=new IteratorFilter<ShortPoint2D>(freedPositions,new IPredicate<ShortPoint2D>(){
        @Override public boolean evaluate(        ShortPoint2D object){
          return currArea.contains(object);
        }
      }
);
      occupyAreaByTower(currTower.playerId,area,currTower.areaBorders);
    }
  }
}

Fixed version (ground truth):
/** 
 * Checks if other towers that intersect the area of the given tower can occupy free positions of the area of the given tower and lets them do so.
 * @param tower
 */
private void checkOtherTowersInArea(PartitionOccupyingTower tower){
  IPredicate<ShortPoint2D> predicate=new IPredicate<ShortPoint2D>(){
    @Override public boolean evaluate(    ShortPoint2D pos){
      final int idx=pos.x + pos.y * width;
      return towers[idx] <= 0;
    }
  }
;
  ArrayList<ShortPoint2D> freedPositions=new IteratorFilter<ShortPoint2D>(tower.area,predicate).toList();
  if (!freedPositions.isEmpty()) {
    List<Tuple<Integer,PartitionOccupyingTower>> towersInRange=occupyingTowers.getTowersInRange(tower.position,tower.radius);
    Collections.sort(towersInRange,Tuple.<Integer,PartitionOccupyingTower>getE1Comparator());
    for (    Tuple<Integer,PartitionOccupyingTower> curr : towersInRange) {
      if (curr.e2.playerId == tower.playerId) {
        continue;
      }
      final PartitionOccupyingTower currTower=curr.e2;
      final IMapArea currArea=currTower.area;
      IteratorFilter<ShortPoint2D> area=new IteratorFilter<ShortPoint2D>(freedPositions,new IPredicate<ShortPoint2D>(){
        @Override public boolean evaluate(        ShortPoint2D object){
          return currArea.contains(object);
        }
      }
);
      occupyAreaByTower(currTower.playerId,area,currTower.areaBorders);
      PartitionsListingBorderVisitor borderVisitor=new PartitionsListingBorderVisitor(this,blockingProvider);
      final FreeMapArea groundArea=currTower.groundArea;
      ShortPoint2D upperLeftGroundAreaPosition=groundArea.getUpperLeftPosition();
      BorderTraversingAlgorithm.traverseBorder(new IContainingProvider(){
        @Override public boolean contains(        int x,        int y){
          return groundArea.contains(x,y);
        }
      }
,upperLeftGroundAreaPosition,borderVisitor,true);
      checkMergesAndDividesOnPartitionsList(currTower.playerId,getPartitionIdAt(upperLeftGroundAreaPosition.x,upperLeftGroundAreaPosition.y),borderVisitor.getPartitionsList());
    }
  }
}