Домашняя работа по курсу
Ссылка для регистрации на факультетском Ejudge
Номер контеста 278
ВНИМАНИЕ! Зарегистрированные пользователи заходят тут
- Домашняя работа нужна в первую очередь для того, чтобы доказать себе и экзаменатору, что ты освоил тему.
- Задача считается сданной в срок, если в ejudge (см. ниже) зафиксирована посылка решения, успешно принятого системой (результат OK) до наступления срока сдачи.
- Количество (точнее, процент от общего числа) домашних задач, сданных в срок, формируют оценку автоматом, которую можно исправить на экзамене (в обе стороны ☺).
Решения, скопированные друг у друга, считаются отсутствующими.
Если решение не проходит проверку, придумайте побольше своих тестов. Напишите генератор входных данных (модуль random вам в помощь).
Домашняя работа — не олимпиада. Если что-то не получается, всегда можно спросить (FrBrGeorge, знакомого питониста).
Как сдавать домашнюю работу
- Зарегистрироваться
Заполнить графу «Имя» (там должны быть имя и группа, кому оценку ставить)
- Выбрать соответствующий турнир («контест»)
- Возможно, придётся пойти по ссылке «Confirm registration» («Подтвердить регистрацию»)
- Возможно, придётся пойти по ссылке «Participate» («Участвовать»)
- Выбрать соответствующую задачку
- Загрузить решение
- Прежде, чем загружать решение, убедитесь, что оно правильное. Не надо вместо этого делать много различных вариантов решения в надежде, что какой-то один всё-таки пройдёт тесты.
- Если возникают вопросы — спрашивайте, для этого есть и интерфейс eJudge, и группа в Telegram
- Дождаться конца проверки (как правило, несколько секунд) и обновить страницу браузера
О дедлайнах
Домашние задания посвящены теме лекции. Более того, на следующей лекции предполагается, что Д/З уже выполнено, и слушатели достаточно хорошо себе представляют материал прошлой недели: потыкали в него руками, порешали задачи, спросили и узнали всё, что было непонятно и т. п.
Поэтому дедлайн по Д/З — шесть дней со дня лекции. Д/З, сданное в день следующей лекции, считается просроченным на неделю. Тем не менее задание выгоднее сдать невовремя, чем вообще не делать.
В течение следующей недели (до очередной лекции) просроченное задание оценивается в 50%
После этого — в 25%
Стоит помнить, что «решить все задания в последний день» нельзя как чисто физиологически, так и формально — потому что баллов для участия в экзамене вам не хватит.
О формулировках задач
- Формулировку Д/З не стоит смотреть непосредственно на EJudge: во-первых, её там может не быть, во-вторых, возможности форматирования та ограничены, в третьих, условия всё равно копируются туда из лекций
Мало того, формулировки иногда уточняются и исправляются — только здесь!
- Из краткой формулировки задачи непосредственно в лекции по второй ссылке вида
EJudge
: ИмяЗадачи «'Название задачи'»
- На странице с формулировкой часто встречаются пояснения и подсказки
На странице с формулировкой могут быть т. н. «спойлеры» — обычно явное описание алгоритма решения или ссылка на соответствующую статью. Спойлеры изначально скрыты, они появятся, если нажать ссылку «Комментарии» в шапке страницы.
- Если вопросы всё ещё остались, задавайте их в чате UNИX.
Как оформлять решение
В Д/З могут встречаться несколько типов заданий.
Задача типа «написать программу»
По умолчанию, т. е. если иное не указано отдельно:
- программа читает со стандартного ввода и выводит на стандартный вывод
- вводимые данные корректны
- Тесты представляют собой наборы входных данных и соответствующие им наборы выходных.
- Если ваше решение
- останавливается с ошибкой
- работает слишком долго
или выдаёт не такие выходные данные, как в тесте
тест считается не пройденным.
⇒ Для ввода можно пользоваться input() (чаще даже eval(input())) без строки-подсказки, а для вывода — print(). Ещё раз: никаких переговоров с роботом — только ввод входных данных и вывод выходных, иначе программа не пройдёт тест!
Задача типа «написать функцию»
Решение — фрагмент программы, реализующий часть её функциональности (как правило — определение классов или функций), который ничего не вводит и не выводит сам.
Во время проверки к решению в конец приписывается тестирующий код
Тест — это также фрагмент программы, который использует определённые в решении объекты
Полученная программа вводит и исполняет тест (в котором обычно формируется вывод)
Таким образом, в решении задач этого типа можно не только определять функции и классы, но и выполнять другие операторы, например, import
- Вывод теста сравнивается с соответствующим эталоном
Алгоритм сдачи такого задания:
- Пишете программу, содержащую и требуемую функцию или класс + тест
- Отлаживаете её (возможно, меняя тест на другие)
- Удаляете тест, оставляя только функцию или класс
- Загружаете в EJudge
Пример решения задачи «написать функцию»
Написать функцию gt12(), которая принимает два заведомо сравнимых параметра и возвращает 1, если первый параметр больше второго, и 2 в противном случае:
- Решение:
- Ввод (он же тест):
- Вывод (он же эталон):
2 2 1
Пример решения задачи «написать класс»
Написать класс C, который ничего не делает:
- Решение:
- Тест (он же ввод):
- Эталон (он же вывод):
Тест может включать в себя проверку на то, что в классе нет полей, кроме тех, что указаны в условии, и вообще как-то исследовать ваш класс.
Задача типа «написать модуль»
- Решение — программа-модуль, которую предполагается импортировать и использовать определённые в ней объекты (функции, классы и т. п.)
Решение может содержать раздел
- для самостоятельного запуска (при тестировании не используется)
Тесты представляют собой программы, которые импортируют модуль-решение под именем mod и задействуют определённые в нём объекты. Для каждой такой программы есть соответствующий файл с выходными данными, с которыми сравнивается результат её работы.
Тест может включать в себя проверку на то, что в модуле нет имён, кроме тех, что указаны в условии и разные другие проверки
Пример задачи: Написать модуль, в котором будет присутствовать целочисленный объект Count, изначально равный 0, и функция incr(level), увеличивающая Count на число level
Модуль-решение:
Тест:
Вывод:
0 100 Count incr