@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();
  }