Как сделать контест

Добавил пользователь Дмитрий К.
Обновлено: 05.10.2024

gojira → A look at Competitive Programming post-hibernation

Rosei → Optimising a mongo search query

snarknews → Three Regionals Cup-2021

300iq → Invitation to Good Bye 2021: 2022 is NEAR

rsj → HELP (maximum independent set problem)

notsoawesome → Doubt in problem C-MP3

TooNewbie → [Tutorial] Recurrent Sequences — Application of combinatorics in DP (basics)

Ahmadsm2005 → From Newbie to Expert in 6 months

Niladri_19 → Print Subsequence

MoonKnight9031 → Difficulty in converting recursive solution to memoization / top-down DP

BERNARB.01 → Range Queries Problems

Monogon → Global Round 18 Editorial

kzhhooo → Is there anywhere we can find the test data of IZhO?

Anthony_Smith → What are the transitions in this Bitmask DP problem?

daCodda → Does anyone else experience this?

Блог пользователя elena

Добавление тренировки из Polygon'а

Автор elena, 8 лет назад ,

Вероятно, большая часть контестов, присутствующих на настоящий момент в “Тренировках”, подготовлена не с помощью Polygon’а. Тем не менее, возможно, несколько более подробная, нежели п.3 в краткой справке раздела “Тренировки”, инструкция “как создать тренировку из задач, подготовленных в Polygon” окажется для кого-то полезной. Использовать при этом Wizard нет особой необходимости.

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

Сначала проведем предварительную подготовку на Polygon.

Следует дать write-права на контест и на все задачи пользователю codeforces.
Быстрее всего действовать именно в таком порядке: добавить пользователя codeforces в список Contest developers, после чего выставить права в окне Manage access, не обращаясь к каждой задаче по отдельности.

Для всех задач должны быть собраны пакеты, содержащие последнюю редакцию задачи.
Нужно проверить, что все задачи имеют название (и другие составляющие, за исключением разве что Note): пакет может собраться, но Codeforces его не “примет”.

Перейдем на Codeforces.

В “Тренировках” должен быть включен тренерский режим.

Выбрать "Создать тренировку" и заполнить необходимые поля (название, длительность, сезон и т.п.). Если потребуется, всю эту информацию можно будет отредактировать — тренировка появится в списке, и её свойства будут доступны для изменений.
Приватный режим доступа (по умолчанию) стоит оставить, пока создание тренировки не будет завершено.

Положить в каталог sandbox тренировки файл contest.xml, заменив им находящийся там “стандартный” contest.xml. Это можно сделать по ftp (login и password для доступа совпадают с таковыми на Codeforces).
Мне в качестве клиента удобнее всего использовать Far manager. Режим passive mode, скорее всего, включать не потребуется. Но если что-то все же пойдет не так, можно попробовать включить.

Если тренировка проводится на задачах уже состоявшегося соревнования и имеется (преобразованный в нужный (testsys) формат) файл монитора соревнований contest.dat, то “стандартный” contest.dat из sandbox также нужно заменить этим файлом (также по ftp).

"Обновить соревнование" (перевести его из sandbox в release). Это займет некоторое время, после чего в соревновании появятся задачи. Если был добавлен файл монитора, то возле задач будет указано количество решивших их, а также будет доступен монитор с “участниками-призраками”.
Не забудьте нажать F5 или обновить страницу другим образом.

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

Если были внесены какие-либо изменения в задачи или контест на Polygon (например, выставлены другие ограничения по времени) или же менялся файл монитора contest.dat, необходимо будет вновь “Обновить соревнование”.

Если у тренировки установлено время начала, за 6 часов до этого момента автоматически будет открыта регистрация. Регистрироваться на тренировку участники могут вплоть до ее окончания.

PS. Что несколько огорчает — совершенно не используется Problem tutorial, поле, имеющееся у каждой задачи на Polygon. Кажется, было бы удобно собирать не только файл контеста (или задачи) в pdf, но и его (ее) разбор. Который можно было бы тоже “автоматически” включать в тренировку.

Теги

тренировки, howto, polygon

Ты придумал облачные вычисления.
Работает это так: сервер принимает запрос с текстом программы, запускает процесс компилятора и передает ему текст.

Загружаешь файл, компилируешь со своими параметрами (очень желательно обрезать возможность всего хоть немного потенциально опасного - файлы, системные функции, даже графика) и выполняешь под пользователем с минимальными правами. Вывод программы сравниваешь с ожидаемым, если есть расхождение - Wrong, если нет - Accepted. Что имено смущает?

void LinkSoketPort(); // функция соединения сокета с портом
void LinkKlient(); // функция ожидания соединения клиента
void SendData(char* buff); // посылка данных клиенту
int Chtenie(); // принятие данных
void main()
setlocale(LC_ALL, "Russian_Russia.1251");
StartWinSock();
SocketGetHostName();
CreateSocket();
LinkSoketPort();
WaitSocket();
LinkKlient();
char* buff="HTTP/1.0 401\r\nServer:Realtron WebServer 1.1\r\nWWW-Authenticate\r\n";
Chtenie();
SendData(buff);
CloseScoket();
StopWinSock();
>
void StartWinSock()
void StopWinSock()
void SocketGetHostName()
void CreateSocket()
void LinkSoketPort()
void CloseScoket()
void WaitSocket()

LinkKlient();
char* buff="HTTP/1.0 401\r\nServer:Realtron WebServer 1.1\r\nWWW-Authenticate\r\n";
Chtenie();
SendData(buff);
CloseScoket();
StopWinSock();
>
void StartWinSock()
void StopWinSock()
void SocketGetHostName()
void CreateSocket()
void LinkSoketPort()
void CloseScoket()
void WaitSocket()
void LinkKlient()
void SendData(char* buff)
int Errors;
Errors = send(s1,buff,lstrlenA(buff),0);
if (Errors == SOCKET_ERROR) printf(" Ошибка отправки данных . \n");
else printf(buff);
>
int Chtenie()
char*buf= "";
int len=50;
int n=recv(s1, buf, len,1);
if (n!=0)printf(buf);
return n;
>

Авторизованный учитель имеет возможность просматривать все посылки участников (исходные коды, протоколы и тесты). Им могут стать учителя и руководители кружков после аккредитации (инструкция чуть ниже). К сожалению, если вы ведете частную преподавательскую практику (например, как репетитор или готовите друзей и близких по какой-то теме), статус авторизованного учителя не будет выдан.

  1. Вашу ФИО, город, образовательную организацию
  2. Логин и привязанную к нему почту на информатиксе в рамках учетной записи (проверьте в личном кабинете, что эта почта действительно привязана)
  3. Ссылку на страницу образовательной организации, в которой вы работаете
  4. Ссылку на свой курс на информатикс (или тот, который проходите с учениками)
  5. Ссылку на группу школьников, проходящих ваш курс (url должен содержать подстроку group_id), в случае если у вас не ваш курс

В рамках этой роли мы просим не публиковать и не распространять тесты к задачам, не изменять статусы посылок не ваших учеников.

Просмотр списка посылок

В каких разрезах можно смотреть списки посылок:

  • по данной задаче (список посылок всех пользователей, можно попасть с страницы с условием задачи, кнопка в правом верхнем углу "Посылки по задаче")
  • по задачам данного контеста (список посылок всех пользователей по выбранному контесту, можно попасть с страницы с условия любой задачи из контеста, кнопка в правом верхнем углу "Все посылки")
  • по задачам данного контеста с фильтром по вашей группе (список посылок всех пользователей, можно попасть с страницы с условием задачи, кнопка в правом верхнем углу "Все посылки" и далее в списке ниже выбрать фильтр по вашей группе, или, если используете механизм "Запись на курс" сделать фильтр по нему)
  • все собственные посылки по всем задачам ("Мои посылки" на главной странице)

Редактирование задач

Создание групп

Для фильтрации результатов ваших учеников от остальных пользователей сайте есть 2 механизма:

  1. Вы создаете собственный курс и настраиваете запись/записываете учеников на курс (раздел "Участники", шестеренка в правом верхнем углу, "Настроить запись"). После этого в таблице результатов и всех посылках у вас есть фильтр "Все записавшиеся на курс". По его нажатию и произойдет отображение результатов только ваших учеников.
  2. Вы не создаете собственный курс, а проходите с учениками уже существующий. Вы можете объединить школьников в группы. У вас, как у создателя группы, и у всех включенных вами в группу участников на странице каждого контеста появятся новые ccылки в разделе "Список групп"

Группу может создать учитель/авторизованный учитель. В группу можно включать как школьников, так и других учителей (при этом изменять состав группы может только ее создатель или администраторы сайта).

Для того, чтобы создать группу:

  1. На главной странице в правом столбце выберите "Управление группами".
  2. На открывшейся странице выберите "Создать группу"
  3. Введите название группы (например, "Школа 125, 9А, 2020") и нажмите на кнопку создать.
  4. В правом окне размещен список всех пользователей сайта. Выберите нужных вам участников и перетащите их в левую часть. Для поиска нужных людей вы можете воcпользоваться сортировкой по любому столбцу (для этого нажмите на его заголовок) а также поиском в столбце (для этого наведите курсор на правый конец заголовка столбца, выберите появившуюся стрелочку, выберите в меню "Фильтр" и введите текст для поиска (например, фамилию ученика, номер школы или город).
  5. Найти нужного школьника и перетащите его в левую таблицу. Он сразу же будет добавлен в группу.
  6. Чтобы исключить школьника из группы, нужно перетащить его из левой таблички в правую.

Создание курса

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

Для создания нового курса заполните приведенную форму. Слева от каждого блока есть знак вопроса - при наведении на него курсора откроется текстовая подсказка с пояснением, что происходит :) В дальнейшем вы всегда сможете изменить любой из указанных параметров курса.

Добавление пользователей в курс

Для того, чтобы добавить пользователей в курс, перейдите на главную страницу курса, нажмите на шестерёнку и выберите "Больше". Во вкладке "Пользователи" перейдите в "Записанные на курс пользователи". Нажмите на кнопку "Записать пользователей на курс", найдите пользователя которого хотите добавить, выберите роль и нажмите "Запись пользователей на курс"

Добавление учебных материалов

Для начала редактирования курса нажмите кнопку Редактировать в правом верхнем углу на страничке курса.

Курс состоит из вводного раздела (без номера), в котором собрана информация и материалы, относящиеся ко всему курсу целиком, а также пронумерованных разделов (1, 2, 3, . ) каждый из которых может соответствовать по вашему желанию одному занятию, одному классу, одному мероприятию и т.п.

Для указания названия (или вступления) к разделу, нажмите на в левом верхнем углу соответствующего раздела. В этом поле вы можете написать любой текст в формате html, например:

или просто указать название раздела, например:

Условный оператор

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

  • Условия задач: контест, составленный из задач, имеющихся в тестирующей системе сайта. Школьникам будут доступны условия задач и возможность сдачи решений в тестирующую систему. Отметим, что эти материалы являются основным содержанием сайта, и мы надеемся, что вы будете создавать курсы с использованием задач с автоматическим тестированием.
  • Таблица результатов: сводная таблица по нескольким контестам для данной группы.
  • Пояснение: небольшой фрагмент текста на странице курса (в формате html)
  • Текстовая страница: отдельный текстовый документ, который вы планируете написать, со ссылкой на него со страницы курса.
  • Веб-страница: то же, но в формате html
  • Ссылка на файл или веб-страницу: ссылка на существующую страницу в сети интернет или на страницу или файл на данном сайте. Вы также можете предварительно закачать файлы в свой курс и поставить ссылку на них.

Также вы можете создавать тесты, задания. опросы и т.п.

После создания любого материала справа от него появятся значки: перенести вправо (сделать отступ), перенести (в другое место курса), редактировать (сам материал и/или его настройки), удалить, спрятать (от школьников).

Контест - это набор задач на одну тему, либо предлназначенный для решения на одной олимпиаде, тренировке итп.

Для каждого контеста доступна своя таблица результатов, а также список посылок, сделанных школьниками по задачам данного контеста. Одна задача может входить в разные контесты, при ее решении результаты (в таблице результатов и списке посылок) появляются сразу во всех контестах, содержащих данную задачу.

Для создания контеста выберите в выпадающем меню Добавить ресурс в соответствующем разделе вашего курса пункт Условия задач. В поле название укажите заголовок контеста (например: Условный оператор или Тренировка №5). Если вы планируете провести олимпиаду и контрольную работу, вы можете отметить флажок Не показывать разборы, темы и т.д. - в этом случае школьникам не будут показываться различные подсказки.

Если вы пока не хотите открывать данный контест для школьников, выберите в пункте Доступные вариант Спрятать.

После этого вы сможете выбрать задачи для данного контеста. Для этого есть два основных способа:

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

Добавить задачи по id (идентификационному номеру). Вы можете предварительно выбрать интересующие вас задачи в других разделах сайта и выписать себе их номера, а затем ввести их, перейдя по данной ссылке.

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

После выбора задач вы можете менять их порядок и удалять или скрывать те или иные задачи.

Задача - это основной объект на данном сайте. Данный сайт в первую создавался в первую очередь как база задач по программированию для школьников с автоматической проверкой. Чтобы успешно использовать его в своей деятельности, необходимо прежде всего понять, что такое задача и как она устроена.

Каждая задача включает в себя:

Список всех ваших посылок доступен в меню на главной странице сайта (ссылка Мои посылки).

Задачи на сайт добавляются при помощи системы Polygon. Более подробно о добавлении задач на сайт можно прочитать в этой инструкции.

Отдельным пользователям дополнительно предоставляются права Редактор сайта. Эти пользователи могут редактировать условия и разборы всех задач, а также указывать новые и редактировать старые темы, отнесенные к задаче.

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

Иногда бывает удобно объединить в одну таблицу результатов несколько контеcтов (например, все уроки данного класса или два тура одной олимпиады).

Создание таких таблиц результатов делается в два шага.

Создание набора контестов (монитора). На главной странице в разделе Рабочий стол учителя пройдите по ссылке Управление мониторами, далее: создать монитор и укажите название создаваемого монитора. Выберите контесты, которые необходимо в него включить и перетащите их мышью из правой таблицы в левую.

Создание таблицы результатов. Находясь в своем курсе, нажмите кнопку редактировать, в нужном разделе в выпадающем меню Добавить реcурс. выберите пункт Таблица результатов. Укажите ее название, выберите в пункте Таблица результатов созданный вами в п.1 монитор, а в пункте Группа - интересующую вас группу школьников либо пункт Все участники. Нажмите Сохранить.

В мониторе указываются только те участники, которые сделали в указанных контестах хотя бы одну посылку, и только те контестых, в которых указанные участники сделали хотя бы одну посылку.

Чтобы сделать монитор по секретной ссылке, можно сделать следующее:

Параметры: contest_id=1&contest_id=2&contest_id=3 . -- нужные id контестов aka модулей курсов group_id=4 -- группа, по которой делается монитор, если не указывать, будет по всем пользователям time_before=1521742439 -- время в timestamp, до которого собирать посылки time_after=1521742439 -- время в timestamp, после которого собирать посылки

Можно сделать это например с помощью js в консоли браузера на сайте информатикса:

Из запроса вернётся JSON с токеном для доступа к монитору

Чтобы сгенерировать ссылку, нужно быть авторизованным учителем; чтобы увидеть монитор, нужно быть залогиненым

После автоматического тестирования каждое решение получает статус проверки: OK, неполное решение, превышен лимит времени, превышен лимит памяти, и т.д.

Авторизованные учителя могут вручную изменять статус проверки. Обычно вручную устанавливаются следующие статусы:

  • Open with Desktop
  • View raw
  • Copy raw contents Copy raw contents

Copy raw contents

Copy raw contents

Мне нравятся интересные задачи и я люблю участвовать в конкурсах, поэтому в данном репозитории собрана моя коллекция задач которые я решила и которые решу в будущем. Направление: frontend (javascript) Постаралась сохранить исходное форматирование, чтобы ничего не упустить и разделила по разным статусам:

    – задача решена, все тесты Яндекс.Контеста пройдены – пройдена только часть тестов Яндекс.Контеста – задача решена и успешно работает с примерами из условия задачи, но тесты Яндекс.Контеста недоступны для прогона – задача не решена совсем

Статус можно увидеть рядом с названием задачи. Каждой решенной задаче соответствует файл, который указан после статуса в содержании или под заголовком "Решение" после условия задачи.

Содержание

Дан список, в которой хранятся исследователи и топонимы (имена мест) где они бывали. Список имеет следующий формат:

Надо развернуть этот список, таким образом, чтобы на первом месте оказался топоним, а на остальных исследователи.

Решение необходимо предоставить в виде CommonJS-модуль:

Вердикт RE также означает, что отправленное решение неверно.

Файл: A_reserachers.js

Комментарии:

Уверена, что эта задача должна решаться с помощью хэш списков, но, пока я не изучила алгоритмы и структуры данных, будет решение через массивы:

Вы попросили коллег раскрасить страны на нескольких географических картах. Но оказалось, что ваши коллеги иногда ошибаются и забывают покрасить какую-нибудь страну. Необходимо написать функцию, которая найдет все неокрашенные страны. Функция принимает на вход: - название начальной страны и ее цвет (например, code: ’RU’, color: ’red’); - функцию получения соседей (принимает на вход название страны и возвращает массив соседей с их цветами).

Функция должна вернуть промис, который разрешится массивом неокрашенных стран (typeof country.color === ’undefined’).

Нельзя вызывать функцию получения соседей параллельно. Нельзя использовать async/await и генераторы.

Интерфейс функции поиска соседей:

Решение необходимо предоставить в виде CommonJS-модуль:

Вердикт RE также означает, что отправленное решение неверно.


Начальная точка A (code: ’A’, color: ’red’).

getNeighbors(’A’) вернет:

getNeighbors(’E’) вернет:

и т.д. Решение должно вернуть массив с непокрашенными странами (порядок элементов в массиве не важен) [’D’]

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

В модуле task.js описан метод, который принимает на вход три аргумента - data1, data2 и maxLength. В переменной data1 и data2 передаются массивы объектов вида:

Решение необходимо предоставить в виде исправленого модуля task.js. Вердикт RE также означает, что отправленное решение неверно.

Дизайнер обновил логотип Конструктора карт (масштаб x5):

Его потребуется использовать в самых разных условиях. Чтобы это было максимально удобно, сверстайте его с помощью одного HTML-элемента на чистом CSS. Использовать картинки (даже через data:uri) нельзя.

Читайте также: