Java · 28 строк
Перед публикацией объявление проходит автоматические правила. Цена может быть не указана — getPrice() возвращает Long, null значит «договорная». Модератор вызывается из одного потока-консьюмера очереди.
После трёх отказов за стоп-слова пользователя блокируют. Отметьте строки с ошибками.
В работе: Первая линия модерации: правила отсекают очевидное до проверки человеком.
Как проверяем
Нажмите на строку с ошибкой и коротко напишите, что не так. Баг засчитан, если отмечена хотя бы одна его строка. Зачёт — найдено не меньше 60 % багов с учётом серьёзности (критичный весит 3, обычный 2, мелкий 1), а лишних отметок не больше, чем багов в коде. Пустые строки, скобки и комментарии лишними не считаем. Ответ один на подход: после него показываем разбор.
Источник: на задачах Авито: модерация объявлений. Условие пересказано своими словами.
Давали на собеседовании?
Ответов пока мало — ваш поможет.
public class AdModerator {private static final List<String> STOP_WORDS = List.of("закладка", "оружие", "диплом без экзаменов");private final Map<Long, Integer> rejectCount = new HashMap<>();public Verdict check(Ad ad) {if (ad.getCategory() == "Работа" && ad.getSalary() == null) {return Verdict.reject("Укажите зарплату");}String text = ad.getTitle() + " " + ad.getDescription();for (String word : STOP_WORDS) {if (text.contains(word)) {rejectCount.put(ad.getUserId(), rejectCount.get(ad.getUserId()) + 1);return Verdict.reject("Запрещённый товар");}}if (ad.getPrice() < 0 || ad.getPrice() > 100_000_000) {return Verdict.reject("Проверьте цену");}if (ad.getPhotos().size() > 10) {return Verdict.reject("Не больше 10 фото");}return Verdict.approve();}public boolean shouldBan(long userId) {return rejectCount.get(userId) >= 3;}}