Антиплагиат (1231606), страница 7
Текст из файла (страница 7)
Помимо э того, так ж е реализован и формат CATS+.Формат CATS+Формат CATS+ является расширенным по отношению к формату CATS. Формат CATS используется ДальневосточнымФедеральным Университетом в местных соревнованиях по программированию.Основным отличием формата CATS+ от CATS является наличие двух дополнительных блоков: с информац ией по участникамсоревнования и с информац ией по задачам.http://dvgups.antiplagiat.ru/ReportPage.aspx?docId=427.24091261&repNumb=117/2420.06.2016АнтиплагиатИстории посылок формата CATS+ представляют собой древообразную модель из тэ гов (листинги 3.7-3.9), внутри которыхзаключена информац ия о соревновании.Листинг 3.7 – Блок teams<teams><team><id> Идентификатор команды </id><name> Название команды </паме></team>...</teams>Информац ия о каж дой команде помещ ается в блок team. В качестве идентификатора команды долж но выступать число.Название команды мож ет быть любой строкой символов.Листинг 3.8 – Блок problems<problems><problem><code> Сокращ енное обозначение задачи </code></problem></problems>Информац ия о каж дой задаче помещ ается в блок problem.
В качестве сокращ енного обозначения задачи мож ет выступатькак число, так и буква, или даж е строка символов. Разумеется, лучше всего, если обозначение будет состоять из одногосимвола, чтобы в таблиц е с результатами оно не занимало много места, и не привело к увеличению ширины столбц ов.Листинг 3.9 – Блок reqs<reqs><req><time_since_start> Время посылки </time_since_start><team_id> Идентификатор команды </team_id><code> Сокращ енное обозначение задачи </code><state> Статус посылки </state></req>...</reqs>Информац ия о каж дой посылке помещ ается в блок req. Время посылки – время от начала соревнования в сутках.Идентификатор команды долж ен быть таким ж е, как в блоке teams. Сокращ енное обозначение задачи долж но быть такимж е, как в блоке problems. Статус посылки мож ет иметь различные значения, но за удачную посылку будет приниматься лишьстатус «accepted».Посылки из блока reqs с командами или задачами, которые отсутствуют в блоках teams и problems соответственно,игнорируются.Стоит отметить, что в формате CATS+ в блоке reqs могут присутствовать и иные параметры, которые в текущ ей реализац иимодуля подведения итогов не используются.Формат PCMS2Формат PCMS2 используется в некоторых соревнования по программированию, проводимых на территории Российскойфедерац ии.
Примером такого соревнования является NEERC ACM ICPC.Формат PCMS2, так ж е как и формат CATS+, имеет древообразную модель из тэ гов, но информац ия записывается не внутритэ гов, а в качестве параметров тэ га.Основным блоком является блок standings, внутри которого располож ен блок contest (листинг 3.10).Листинг 3.10 – Блоки standings и contest<standings><contest name = "Название соревнования">...</contest></standings>Внутри блока contest располагается один блок challenge (листинг 3.11) и несколько блоков session (листинг 3.12).Листинг 3.11 – Блок challenge<challenge><problem alias = "Сокращ ённое обозначение задачи" />...</challenge>Блок challenge содерж ит в себе информац ию о задачах соревнования. Информац ия о каж дой задаче помещ ается в блокproblem. Сокращ енное обозначение задачи будет отображ аться в таблиц е с результатами.Листинг 3.12 – Блок session<session party = "Название команды"><problem>...</problem>...</session>Блок session содерж ит в себе информац ию только о посылках конкретного участника, причем все посылки распределены позадачам и заключены в блоки problem (листинг 3.13).http://dvgups.antiplagiat.ru/ReportPage.aspx?docId=427.24091261&repNumb=118/2420.06.2016АнтиплагиатЛистинг 3.13 – Блок problem<problem alias = "Сокращ енное обозначение задачи"><run accepted = "Статус посылки" time = "Время" />...</problem>Блок problem содерж ит в себе информац ию о посылках по конкретной задаче.
Сокращ енное обозначение задачи долж нобыть таким ж е, как и в блоке challenge.Информац ия о посылке заключена в блок run и имеет два параметра: статус посылки и время. Статус посылки мож ет иметьдва значения: «yes» или «по», первый из которых обозначает, что задача решена. Время – время в миллисекундах от началасоревнования до момента прихода посылки.Стоит отметить, что в формате PCMS2 могут присутствовать и иные параметры, которые в текущ ей реализац ии модуляподведения итогов не используются.3.2.5 Обработка историй посылокКак описано ранее, истории посылок хранятся в файлах формата XML. Сущ ествует множ ество автоматизированных способовобработки файлов данного формата. Но для модуля подведения итогов написан свой собственный обработчик.Для обработки файлов формата XML написан класс StringWithIndex (прилож ение А, листинг А.4), который имеет два поля –text и index.
В поле text помещ ается содерж имое файла XML, а в поле index – текущ ее полож ение курсора. Рассмотримосновные методы данного класса:– методы getNextTagValue() и getTagValue() принимают в качестве аргумента наименование тэ га, выполняют поиск э тоготэ га в поле text правее полож ения курсора index и возвращ ают содерж имое э того тэ га. Разниц а меж ду методамизаключается в том, что первый перемещ ает полож ение курсора index в конец найденного тэ га;– методы getNextTagText() и getTagText() принимают в качестве аргумента наименование тэ га, а после вызывают методыgetNextTagValue() и getTagValue() соответственно. Разниц а от работы последних заключается в том, что методыgetNextTagText() и getTagText() возвращ ают не сам текст, а объект класса StringWithIndex;– метод nextTagText() возвращ ает содерж имое ближ айшего к курсору тэ га в виде объекта класса StringWithIndex, курсорпри э том перемещ ается в конец найденного тэ га;– метод getTagName() возвращ ает наименование тэ га, но поиск выполняется с начала поля text, курсор при э том неперемещ ается;– метод getParamsValue() принимает в качестве аргумента наименование параметра, поиск к��торого выполняется внутриполя text.
Если поиск успешен, то метод возвращ ает значение э того параметра.Так как модуль подведения итогов поддерж ивает обработку историй посылок двух разных форматов CATS+ и PCMS2,реализовано два набора функц ий для работы с каж дым из форматов (прилож ение А, листинги А.5-А.6).Функц ии для обработки имеют одинаковые названия – loadLogFromFile(), которые в качестве аргументов принимают на входсодерж имое файла XML, а такж е три массива teams, problems и submits.Переключение меж ду функц иями для обработки для разных форматов осущ ествляется через меню с настройками (рисунок3.1). Если произведено изменение формата с сервера загруж ается файл .js с необходимыми для обработки функц иями(листинг 3.14).Листинг 3.14 – Загрузка файла .js с функц иями для обработкиfunction setScriptLoad( scriptName ) {var div = document.getElementyId( "scriptLoad" );div.removeChild( div.firstChild );var script = document.createElement( "script" );script.setAttribute( "type", "text/javascript" );script.setAttribute( "src", scriptName );div.appendChild( script );}Функц ия loadLogFromFile() вызывает три другие функц ии – getTeamsFromFile(), getProblemsFromFile(), getSubmitsFromFile(),которые, в свою очередь, осущ ествляют обработку истории посылок и помещ ают необходимую информац ию о командах,задачах и посылках в массивы teams, problems и submits соответственно.
Структура данных массивов будет рассмотрена вследующ ем подразделе.3.2.6 Хранение информац ии о командах, задачах и посылкахКак описано ранее, для хранения информац ии о командах, задачах и посылках в модуле подведения итогов используется тримассива teams, problems и submits. Для каж дого из массивов написан свой класс с необходимыми полями и методами.
Стоитзаранее отметить, что примеры использования методов связанных с информац ией, отображ аемой в таблиц е с результатами,будут приведены в следующ их подразделах.Класс ТеамКласс Теам (прилож ение А, листинг А.7) используется для хранения информац ии о командах и имеет следующ ие поля:– поле id – идентификатор команды;– поле паме – название команды;– массивы problemAllSubmit и problemSubmit – общ ее количество посылок и количество обработанных посылок по каж дой иззадач соответственно;– массивы problemSolved и problemTime – для хранения информац ии о том, решена ли конкретная задача и, если решена, тоза какое время;– двумерный массив problemSubmits – для хранения списка идентификаторов посылок, совершенных командой, по каж дой иззадач;– поле solved – количество решенных задач;– поле time – суммарное время, истраченное на решение задач;– массив submit – для хранения списка идентификаторов всех посылок, совершенных командой;http://dvgups.antiplagiat.ru/ReportPage.aspx?docId=427.24091261&repNumb=119/2420.06.2016Антиплагиат– поле nextSubmit – номер следующ ей посылки, которую необходимо обработать.Данный класс содерж ит следующ ие методы:– методы getSolved() и getTime() возвращ аютсоответственно;в видетекстаколичестворешенных задачи затраченноевремя– метод getVerdict() собирает информац ию о конкретной задаче для отображ ения в ячейке таблиц ы с результатами;– метод getClassVerdict() определяет класс CSS для ячейки таблиц ы с результатами по конкретной задаче;– метод getTimeProblem() переводит время из общ его формата (количество минут) к привычному (чч:мм) для конкретнойзадачи;– методы addSubmit(), addOneSubmit() и addAllSubmit() используются для обработки посылок: первыеобрабатывают конкретную посылку, а третий метод обрабатывает все посылки по конкретной задаче;дваметода– метод addProblemSubmit() добавляет информац ию о конкретной посылке по какой-нибудь задаче в двумерный массивproblemsSubmits;– метод solvedProblem() отмечает конкретную задачу решенной и вычисляет общ ее штрафное время;– метод clearProblemSubmits() отчищ ает двумерный массив problemSubmits от данных;– метод createProblems() иниц иализирует все поля объекта связанные с задачами, то есть, например, problemAllSubmit,problemSubmit, solved и т.д.;– метод getIdSubmit() возвращ ает идентификатор следующ ей посылки, которую необходимо обработать;– методы getIdPlace(), getIdName(), getIdSolved(), getIdTime() и getIdProblem() используются для генерац ии идентификатораячейки таблиц ы с результатами.Класс ProblemКласс Problem (прилож ение А, листинг А.8) используется для хранения информац ии о задачах и имеет следующ ие поля:– поле code – идентификатор задачи;– поле solved – количество команд, решивших данную задачу;– поле submit – количество попыток решить данную задачу.Данный класс содерж ит следующ ие методы:– метод getSolved() собирает информац ию по задаче для отображ ения в ячейке таблиц ы с результатами;– метод getClassSolved() определяет класс CSS для ячейки таблиц ы с результатами по задаче;– метод addSubmit() обрабатывает конкретную посылку, обновляя данные о количестве посылок по задаче;– метод getIdStatistic() используется для генерац ии идентификатора ячейки таблиц ы с результатами.Класс SubmitКласс Submit (прилож ение А, листинг А.9) используется для хранения информац ии о посылках и имеет следующ ие поля:– поле time – время прихода посылки;– поле teamId – идентификатор команды, которая отправила посылку;– поле problemCode – идентификатор задачи, по которой совершена посылка;– поле state – статус посылки, значение «accepted» означает, что задача решена;– поле test – номер теста, на котором решение выдало неверный ответ;– поле checked – флаг, отмечающ ий обработана посылка или нет.Данный класс содерж ит только один метод getTime(), который используется для вычисления округлённого времени приходаконкретной посылки в минутах.3.2.7 Структура таблиц ы с результатамиТаблиц а с результатами состоит из следующ их э лементов:– заголовок таблиц ы;– основная часть таблиц ы с результатами участников.Заголовок таблиц ы содерж ит три строки:– строка с названиями столбц ов;– строка со статистикой соревнования;– разделитель меж ду заголовком и остальной таблиц ей.Столбц ы таблиц ы:– место участника.