ЛР5. Обработка текстовых файлов

Задание

+++++ python3 ./platz-StackFill-stat.py +++++
01: 77 144 221 19301
02: 66 31 97 19483
03: 80 130 211 19728
04: 164 97 261 19348
05: 112 10 122 19136
06: 76 79 155 19204
07: 252 424 677 19844
08: 1831 1933 3765 22784
09: 9837 15326 25163 45366
10: 6456 16962 23419 43904
11: 8698 26959 35657 56234
12: 9320 33907 43227 64686
13: 18099 35334 53433 74742
14: 18550 50868 69418 90220
15: 59514 102968 162482 185500
16: 52206 134257 186463 209630
17: 57902 171484 229387 252081
18: 256791 428839 685630 716782
19:-
20:-

Всего тестов: 20
Успешно: 19
Ошибок: 1
Процент успеха: 95.00%

Дан текстовый файл, содержащий журнал результатов тестирования решений олимпиадных задач. Пример описания единичного блока решения в текстовом файле демонстрируется справа.

Первая строка блока идентифицирует решение, всегда предваряется и завершается 5 знаками "+". Следующие 20 строк хранят информацию о времени, затраченном на обработку каждого теста. Первое значение в каждой из 20 строк идентифицирует номер теста, с последующим двоеточием. Если после двоеточия следует знак "-", это означает ошибку прохождения данного теста (неверный результат, выход решения за ограничения по времени или памяти). В противном случае решение содержит время в микросекундах, затраченное программой на 1) загрузку данных задачи, 2) обработку данных задачи, 3) полное выполнение кода программы, 4) запуск, выполнение и завершение работы программы. Указанные 4 значения перчисляются последовательно, через пробел. Последующие строки представляют собой текстовые комментарии о решении и должны игнорироваться при обработке. Блок заканчивается концом файла или началом следующего блока.

Файл может содержать произвольное количество блоков решений. Если существуют несколько блоков с одним и тем-же идентификатором, это означает, что соответствующее решение было протестировано неоднократно.

Задача заключается в разработке программы для сбора информации о каждом блоке решений, получении усредненной информации о тестировании набора блоков решений с уникальным идентификатором и сохраненния полученных результатов в текстовом файле. Программа должна запускаться с двумя параметрами - именем исходного и целевого файлов. Корректность работы своей программы можно проверить на реальном наборе тестов и результате их обработки.

Пример исходного файлаПример целевого файла
+++++ python3 ./platz-StackFill-stat.py +++++
01: 77 144 221 19301
02: 66 31 97 19483
03: 80 130 211 19728
04: 164 97 261 19348
05: 112 10 122 19136
06: 76 79 155 19204
07: 252 424 677 19844
08: 1831 1933 3765 22784
09: 9837 15326 25163 45366
10: 6456 16962 23419 43904
11: 8698 26959 35657 56234
12: 9320 33907 43227 64686
13: 18099 35334 53433 74742
14: 18550 50868 69418 90220
15: 59514 102968 162482 185500
16: 52206 134257 186463 209630
17: 57902 171484 229387 252081
18: 256791 428839 685630 716782
19:-
20:-

Всего тестов: 20
Успешно: 18
Ошибок: 2
Процент успеха: 90.00%

+++++ ./platz-StackFill-stat +++++
01: 7 8 16 3008
02: 5 3 9 3463
03: 6 4 11 2940
04: 9 5 15 2742
05: 4 1 6 2784
06: 8 4 13 2970
07: 26 39 66 3145
08: 123 65 189 3330
09: 607 619 1227 4313
10: 394 801 1197 4406
11: 653 1558 2212 6579
12: 1377 1783 3161 7635
13: 1491 2355 3847 8228
14: 1310 2780 4090 8283
15: 4091 4875 8966 13336
16: 2668 6541 9210 12728
17: 2523 4638 7162 10268
18: 10231 11688 21919 25768
19: 9926 20199 30126 33630
20: 10262 37284 47547 51203

Всего тестов: 20
Успешно: 20
Ошибок: 0
Процент успеха: 100.00%

+++++ python3 ./platz-StackFill-stat.py +++++
01: 77 67 144 19242
02: 78 33 111 19286
03: 81 69 151 19805
04: 124 117 242 20489
05: 62 11 73 19623
06: 76 83 160 19427
07: 309 443 753 20076
08: 1825 1908 3734 23340
09: 10404 16849 27254 47776
10: 6533 19302 25836 46328
11: 8189 25892 34082 55620
12: 9185 33560 42745 63440
13: 21091 48997 70089 91615
14: 19902 54394 74297 96230
15: 51027 87528 138556 161138
16: 40386 104553 144940 165943
17: 55666 172633 228300 251004
18: 213305 356749 570055 599800
19: 211593 599624 811217 838687
20:-

Всего тестов: 20
Успешно: 19
Ошибок: 1
Процент успеха: 95.00%
+++++ python3 ./platz-StackFill-stat.py +++++
Обнаружено решений: 2
 1:	77	105	182	19271		Ошибок:	0
 2:	72	32	104	19384		Ошибок:	0
 3:	80	99	181	19766		Ошибок:	0
 4:	144	107	251	19918		Ошибок:	0
 5:	87	10	97	19379		Ошибок:	0
 6:	76	81	157	19315		Ошибок:	0
 7:	280	433	715	19960		Ошибок:	0
 8:	1828	1920	3749	23062		Ошибок:	0
 9:	10120	16087	26208	46571		Ошибок:	0
10:	6494	18132	24627	45116		Ошибок:	0
11:	8443	26425	34869	55927		Ошибок:	0
12:	9252	33733	42986	64063		Ошибок:	0
13:	19595	42165	61761	83178		Ошибок:	0
14:	19226	52631	71857	93225		Ошибок:	0
15:	55270	95248	150519	173319		Ошибок:	0
16:	46296	119405	165701	187786		Ошибок:	0
17:	56784	172058	228843	251542		Ошибок:	0
18:	235048	392794	627842	658291		Ошибок:	0
19:	211593	599624	811217	838687		Ошибок:	1
20:	-1	-1	-1	-1		Ошибок:	2

+++++ ./platz-StackFill-stat +++++
Обнаружено решений: 1
 1:	7	8	16	3008		Ошибок:	0
 2:	5	3	9	3463		Ошибок:	0
 3:	6	4	11	2940		Ошибок:	0
 4:	9	5	15	2742		Ошибок:	0
 5:	4	1	6	2784		Ошибок:	0
 6:	8	4	13	2970		Ошибок:	0
 7:	26	39	66	3145		Ошибок:	0
 8:	123	65	189	3330		Ошибок:	0
 9:	607	619	1227	4313		Ошибок:	0
10:	394	801	1197	4406		Ошибок:	0
11:	653	1558	2212	6579		Ошибок:	0
12:	1377	1783	3161	7635		Ошибок:	0
13:	1491	2355	3847	8228		Ошибок:	0
14:	1310	2780	4090	8283		Ошибок:	0
15:	4091	4875	8966	13336		Ошибок:	0
16:	2668	6541	9210	12728		Ошибок:	0
17:	2523	4638	7162	10268		Ошибок:	0
18:	10231	11688	21919	25768		Ошибок:	0
19:	9926	20199	30126	33630		Ошибок:	0
20:	10262	37284	47547	51203		Ошибок:	0