private static void removeUnreachableSpiders() { List toRemove = new ArrayList<>(); for (Spider candidate : spiders) { double minDistance = myBase.distanceTo(hisBase); Hero closest = null; for (Hero hero : myHeroes) { double distance = hero.distanceTo(candidate); if (distance < minDistance) { minDistance = distance; closest = hero; } } int iteration = 0; Point currentPosition = candidate; if (currentPosition.distanceTo(closest) < 2 * Constants.HERO_SPEED) continue; while (true) { iteration++; currentPosition = currentPosition.nextPosition(candidate.speed); if (currentPosition.isOutOfMap()) { toRemove.add(candidate); break; } if (currentPosition.distanceTo(myBase) < Constants.BASE_RADIUS || currentPosition.distanceTo(closest) < (2 + iteration) * Constants.HERO_SPEED) break; } } spiders.removeAll(toRemove); }