Формат и расчёты
Напишите CLI-программу, которая принимает путь к SRT-файлу и строит статистику субтитров. Поддерживайте UTF-8-файлы размером не более 50 MiB и максимальной длиной строки 1 MiB. Формат cue: целый положительный номер, следующая строка со временем HH:MM:SS,mmm --> HH:MM:SS,mmm, затем одна или несколько строк текста и пустая строка либо конец файла. Часы могут превышать 23. Сохраняйте текст cue без HTML-разметки как исходное сообщение, но при подсчёте слов рассматривайте Unicode-буквы и цифры как части слова. Апостроф и дефис внутри слова допустимы только между буквами или цифрами; знаки препинания вокруг слова разделителями не считаются словами.
Проверьте строго возрастающую последовательность положительных номеров cue; пропуски номеров разрешены. Проверьте формат и порядок времён, наличие хотя бы одной непустой строки текста и корректность UTF-8. Строка только из знаков препинания допустима и даёт ноль слов. Для каждого cue длительность равна концу минус началу; конец обязан быть позже начала. Общая длительность показа определяется как сумма длительностей всех cue, а не длительность объединения временных интервалов: перекрывающиеся субтитры считаются отдельно. В отчёте выведите число cue, число Unicode-слов, суммарную длительность в миллисекундах и длительность в формате часов, минут, секунд и миллисекунд. Покажите cue с максимальным числом слов; при равенстве выбирайте первый cue по файлу. Для текста без букв и цифр результат по словам — ноль.
Любая структурная ошибка делает весь файл некорректным: выведите строку или номер cue, не формируйте частичную статистику и верните ненулевой код. Неизвестный флаг, отсутствие пути, нечитаемый файл и неверная кодировка также являются ошибками. Превышение лимита строки или файла является фатальной ошибкой с указанием причины. Не переписывайте SRT и не подключайте внешние библиотеки или сервисы.
Структура программы
Пусть main.go отвечает за аргументы, открытие SRT, вызов анализа и ошибки процесса. В отдельных функциях package main реализуйте разбор cue, подсчёт Unicode-слов и суммирование длительностей; форматирование статистики вынесите отдельно. Передавайте текст функциям анализа, чтобы проверять cue и временные правила без main и файлов.