@Override public Collection<Action<?>> decide( Car self, World world, Game game, Move move, Navigator navigator) { if (happened) { return Collections.emptySet(); } if (initializing) { double speed = StrictMath.hypot(self.getSpeedX(), self.getSpeedY()); if (speed > 1.0D) { log.print("Init\n"); initializing = false; } else { return Collections.emptySet(); } } Collection<Car> cars = cars(self, world, game).collect(Collectors.toList()); log.printf( "Sides #%d: %s%n", tick, cars.stream().map(e -> new Point(e.getX(), e.getY())).collect(Collectors.toList())); if (cars.size() >= 2 && tick == 0) { tick = world.getTick(); } else if (cars.size() >= 2 && world.getTick() - tick > THRESHOLD) { log.printf( "Let idiots pass: %s%n", cars.stream().map(e -> new Point(e.getX(), e.getY())).collect(Collectors.toList())); happened = true; return Collections.singleton(new SpeedAction(Priority.HIGH, 0.1D)); } else if (cars.size() < 2) { tick = world.getTick(); } return Collections.emptySet(); }