Java · 30 строк
Клиент оплатил ужин и делит счёт поровну между собой и друзьями: каждому уходит запрос денег и push. Остаток копеек от деления ложится на плательщика. Заблокированным клиентам запрос не отправляем, их долю тоже оплачивает плательщик.
Список participantIds приходит из приложения, суммы — в копейках. Сейчас ограничений нет, продакт просит до 20 человек и до 300 000 ₽. Отметьте строки с ошибками.
В работе: Кнопка «Разделить счёт» в истории операций после оплаты картой.
Как проверяем
Нажмите на строку с ошибкой и коротко напишите, что не так. Баг засчитан, если отмечена хотя бы одна его строка. Зачёт — найдено не меньше 60 % багов с учётом серьёзности (критичный весит 3, обычный 2, мелкий 1), а лишних отметок не больше, чем багов в коде. Пустые строки, скобки и комментарии лишними не считаем. Ответ один на подход: после него показываем разбор.
Источник: наша задача на данных Т‑Банка: запросы денег между клиентами. Условие пересказано своими словами.
Давали на собеседовании?
@Servicepublic class SplitBillService {private final RequestRepository requests;private final UserRepository users;private final PushClient push;public SplitBillService(RequestRepository requests, UserRepository users, PushClient push) {this.requests = requests;this.users = users;this.push = push;}public List<PaymentRequest> split(long payerId, long totalKop, List<Long> participantIds, String comment) {int n = participantIds.size() + 1;long share = totalKop / n;List<PaymentRequest> created = new ArrayList<>();for (Long id : participantIds) {User user = users.findById(id).get();if (user.isBlocked()) {participantIds.remove(id);continue;}PaymentRequest r = new PaymentRequest(payerId, id, share, comment);requests.save(r);created.add(r);push.send(user.getDeviceToken(), "Вас попросили вернуть " + share / 100 + " ₽: " + comment);}return created;}}