Java · 35 строк
За сутки коммутаторы региона отдают около 10 млн записей CDR: номер, начало звонка, длительность в секундах. process суммирует секунды по дням, битые записи складывает в rejected для разбора.
Отметьте строки с ошибками.
В работе: Суточная сверка минут для биллинга.
Как проверяем
Нажмите на строку с ошибкой и коротко напишите, что не так. Баг засчитан, если отмечена хотя бы одна его строка. Зачёт — найдено не меньше 60 % багов с учётом серьёзности (критичный весит 3, обычный 2, мелкий 1), а лишних отметок не больше, чем багов в коде. Пустые строки, скобки и комментарии лишними не считаем. Плюс 1 вопрос про поведение программы — на зачёт не влияют. Ответ один на подход: после него показываем разбор.
Источник: на задачах МТС: биллинг звонков. Условие пересказано своими словами.
Давали на собеседовании?
Ответов пока мало — ваш поможет.
import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.HashMap;import java.util.List;import java.util.Map;public class CallBilling {private static final SimpleDateFormat FMT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");private final Map<String, Long> secondsByDay = new HashMap<>();private final List<String> rejected = new ArrayList<>();// Строка CDR: "79161234567;2026-10-19 23:58:41;185"public void process(List<String> cdrs) {cdrs.parallelStream().forEach(line -> {String[] p = line.split(";");try {Date start = FMT.parse(p[1]);String day = new SimpleDateFormat("yyyy-MM-dd").format(start);secondsByDay.merge(day, Long.parseLong(p[2]), Long::sum);} catch (Exception e) {rejected.add(line);}});}public Map<String, Long> report() {return secondsByDay;}public List<String> rejected() {return rejected;}}