# Задание
- нужно написать программу с консольным интерфейсом для анализа файлов отчета о затраченной работе программиста.
- работники компании каждый день заполняют специальный файл в формате markdown.
- Для расчета их зарплаты и оценки эффективности необходимо написать программу для анализа этих отчетов
- пример отчета в файле "data sample.md"
- Анализировать нужно секцию # Timing
- В секции # Timing всегда есть таблица c такой шапкой
| № | time | tasks | desc |
|:----|:------|:-----------|:----------|
- Столбец № отвечает за порядковый номер строки, начинается с 1
- Столбец time хранит время начала очередных работ над задачей в формате Час:Минута. 10:05 означает, что сотрудник начал работу над задачей в 10:05
- значения столбца time имеют следующий диапазон [00:00, 23:59]
- столбец tasks хранит название задачи. Пробелы не являются частью названия задачи
- столбец desc это столбец краткого описания проведенных работ. Часто бывает пустым
- последняя строка таблицы всегда завершается строкой в столбце tasks которой, записано слова "end". Пример
| № | time | tasks | desc |
|:----|:------|:-----------|:-------------|
| 1 | 10:05 | inbox | |
| 2 | 10:48 | break | |
| 3 | 11:00 | persreview | |
| 4 | 20:01 | end | |
- работник начал в 10:05 задачу inbox
- в 10:48 отошел на перерыв
- в 11:00 закончил перерыв и отправился на персональное ревью(persreview)
- в 20:01 закончилось ревью и работник закончил работу
- необходимо проанализировать таблицы по следующие логике:
- подсчитать суммарное время работы над каждой задачей за день
- подсчитать время затраченное на перерывы, которое всегда обозначается как задача break
- подсчитать время затраченное на работу за день
- подсчитать время затраченное на работу за день без перерывов
- пример работы программы
- дан файл 2022.01.01.md с содержинием:
# Day
* 2022.01.01
# Timing
| № | time | tasks | desc |
|:----|:------|:-------------------|:--------------------|
| 1 | 10:05 | inbox | много почты |
| 2 | 11:48 | break | кофе |
| 3 | 12:00 | утреннее совещание | |
| 4 | 12:30 | break | Обед |
| 5 | 13:30 | ID-1788 | Не работает |
| 6 | 15:00 | break | |
| 7 | 15:15 | ID-1788 | Все еще не работает |
| 8 | 16:00 | break | |
| 9 | 16:20 | ID-1788 | Завелось |
| 10 | 20:00 | end | |
# ID-1788
* Задал вопрос Админам
# Быстрое
* Задать вопрос Владимиру в телеге на счет системника
- программа должна выдать такой отчет
break -> PT1H47M
утреннее совещание -> PT30M
ID-1788 -> PT5H55M
inbox -> PT1H43M
всего -> PT9H55M
без перерывов -> PT8H8M
- Где
- правая сторона (break, inbox, ...) это названия задач
- левая сторона это затраченное время. PT это формат java.time.Duration
- отчет это группировка по столбцу tasks с суммированием продолжительности времени работы над задачей
-
нужно предоставить программу в виде консольной утилиты(толстый jar file) под названием showStatistic.jar
-
программа showStatistic.jar должна иметь следующий интерфейс
- запуск без параметров
C:\some\path> java -jar showStatictic.jar Hello. You run me without arguments. I don't know what to do. Please run me with -h argument. Buy!
Программа завершается 2) запуск программы c аргументом -h
C:\some\path> java showStatictic.jar Hello. I am programm to calculate report statictic. This is my help menu: 1) run me as: C:\path> java showStatictic.jar -path "C:\user\documents\path\report\01.05.2022.md" to process report and see statictic Buy!
Программа завершается 3) запуск программы с аргументов -path. Если по пути есть документ 01.05.2022.md
C:\path> java showStatictic.jar -path "C:\user\documents\path\report\01.05.2022.md" Hello. I perform calculation of report for path: "C:\user\documents\path\report\01.05.2022.md" Report: ================== break -> PT1H47M утреннее совещание -> PT30M ID-1788 -> PT5H55M inbox -> PT1H43M всего -> PT9H55M без перерывов -> PT8H8M ================== Buy!
Программа завершается 4) запуск программы с аргументов -path. Если по пути нет файла 01.05.2022.md
C:\path> java showStatictic.jar -path "C:\user\documents\path\report\01.05.2022.md" Hello. There is no such file: "C:\user\documents\path\report\01.05.2022.md" Buy!