Skip to content

Latest commit

 

History

History
 
 

task02-git

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 

Git (task02-git)

Содержание

  1. Содержание
  2. Задание
    1. Часть 1: упражнения
    2. Часть 2: чистая история
  3. Требования к корректности решения
    1. Часть 1: упражнения
    2. Часть 2: чистая история
    3. Разумная попытка
    4. Блокирующее
  4. Сдача задания
    1. Процесс сдачи упражнений
    2. Процесс сдачи чистой истории
    3. Сроки
    4. Система оценки

Задание

Это задание состоит из двух независимых блокирующих частей.

Часть 1: упражнения

Выполните 23 упражнения по Git с сервера pb-fall2019.yeputons.net (исходно упражнения взяты отсюда) и получите вердикт SUCCESS от команды git verify в каждом упражнении.

Часть 2: чистая история

Вам требуется открыть Pull Request в ветку master этого репозитория (*-tasks) из своего форка, из ветки с названием task02-git-solution. В этом pull request файл largest_heads_run.py должен быть отрефакторен так, чтобы совпадать с largest_heads_run_solution.py. При этом история коммитов в PR должна быть "чистой": отдельные атомарные коммиты с понятными названиями.

Требования к корректности решения

Часть 1: упражнения

  • В качестве имени автора коммита должны быть указаны ваши официальные полные имя и фамилия (в таком порядке) кириллицей. Например: Егор Суворов
    • Email значения не имеет.
    • Транслит не разрешается.
    • Отчество (при наличии) указывать не надо.
    • Дополнительные символы и ники не разрешаются.
  • Если вы уже начали делать не с тем именем, по возможности переделайте упражнения с правильным именем.
  • Во всех коммитах имя должно быть указано ровно одним способом.

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

Часть 2: чистая история

Вам выдан код в файле largest_heads_run.py, который изучает подкидывание честной монетки FLIPS = 100 раз. Он подкидывает монетку, находит самую длинную подряд идущую цепочку из орлов, и выводит на экран среднюю длину максимальной цепочки. Всего выполняется ITERS = 1000 попыток подкинуть монетку FLIPS = 100 раз.

Вам требуется внести в код несколько пересекающихся изменений:

  1. Не обновлять s в самом внутреннем цикле, а сделать это один раз в конце внешнего цикла.
  2. Вместо генерации броска монетки внутри цикла, сгенерировать все броски монетки сначала в список flips (при помощи list comprehension), а дальше сделать цикл for flip in flips:.
  3. После этих изменений можно вынести внутренний цикл в отдельную независимую функцию. После этого отдельным коммитом можно было бы добавить к ней тесты, но этого не требуется.
  4. Внутри функции упростить пересчёт max_run при помощи функции max.
  5. Поменять местами внутри внешнего цикла for порядок изменений total и s, чтобы он полностью совпал с largest_heads_run_solution.py.
  • Все эти изменения логически различны и должны идти в отдельных коммитах. Официальное решение занимает как раз пять коммитов.
  • Каждое описание коммита должно коротко описывать, что происходит в коммите.
  • Язык описания коммита - лучше английский, но можно и русский.
  • Пользуйтесь рекомендациями для составления хорошего сообщения о коммите.

Разумная попытка

Преподаватели в некоторых группах могут требовать сделать "разумную попытку" к определённому сроку. Под этим понимается:

  1. Первые пять упражнений полностью выполнены (master, commit-one-file, commit-one-file-staged, ignore-them, chase-branch).

А также в открытом pull request:

  1. Название имеет строго следующий вид: Task02-git, GroupXX, Фамилия Имя, например: Task02-git, Group01, Суворов Егор.
    • В частности, не допускаются сокращения, перестановка слов, отсутствие запятой, пробелов, лишние пробелы, неверный регистр, написание имени транслитом.
  2. В сумме Pull Request изменяет только файл largest_heads_run.py.
  3. Файл largest_heads_run.py побайтово совпадает с largest_heads_run_solution.py.
  4. Вывод скрипта побайтово совпадает с выводом исходной версии.

Блокирующее

Если хотя бы одно из следующих требований не выполняется, вы можете получить не более 30% баллов за задание:

  1. Попытка является "разумной" (смотри выше).

А также в открытом pull request:

  1. Отсутствуют merge conflicts.
  2. Каждый коммит изменяет только largest_heads_run.py.
  3. В каждом коммите вывод скрипта побайтово совпадает с выводом исходной версии.
  4. В каждом коммите выполняются стандартные требования к Python:
    1. Команда flake8 --max-line-length=100 (с установленными pep8-naming и flake8-quotes) не выдаёт ошибок ни в одном из файлов.
    2. Команда pylint --max-line-length=100 --disable=invalid-name,missing-docstring,global-statement,too-many-lines,R --enable=simplifiable-if-statement,redefined-variable-type не выдаёт ошибок ни в одном из файлов. Это требование можно ослабить, если вы предоставите практику пример, где это команда выдаёт неразумную, на ваш взгляд, рекомендацию.
    3. Команда mypy --ignore-missing-imports не выдаёт ошибок ни в одном из файлов.
    4. В качестве shebang в Python используется #!/usr/bin/env python3.
    5. В неисполняемых файлах shebang отсутствует.

Сдача задания

Если вы сдаёте с нарушением процесса (например, неверное название Pull Request или имя автора коммита), то ваша посылка может быть не проверена, пока вы не исправите формат.

Если возникают любые проблемы со сдачей домашек — пишите преподавателю! Мы не хотим, чтобы вы тратили на процесс много времени.

Процесс сдачи упражнений

  • Проверка упражнений производится полностью автоматически командой git verify (появляется в git после выполнения инструкций с сайта), которая отсылает ваш репозиторий на сайт.
  • Имя автора коммита должно в точности соответствовать заданию.
  • Не требуется отправлять письмо, если вы успешно запушили решение.
  • Количество неуспешных попыток сдачи не учитывается.
  • Время пуша на оригинальный сервер (вместо нашего) не учитывается.

Процесс сдачи чистой истории

Первая попытка:

  1. Создайте fork этого репозитория.
  2. В своём fork создайте ветку task02-git-solution на основе последнего коммита из ветки master.
  3. В ветке task02-git-solution создайте чистую историю, выполняющую задание.
  4. Создайте Pull Request в ветку master этого репозитория с нужным заголовком из ветки task02-git-solution вашего репозитория.
  5. Убедитесь, что @yeputons-bot добавил к вашему PR метки, соответствующие номеру задания, номеру группы, а также needs-grading и назначил review на вашего преподавателя.

Последующие попытки:

  1. Не помечайте комментарии преподавателя как Resolved, если об этом нет явной договорённости.
  2. Перепишите историю коммитов в своей ветке task02-git-solution. Например, при помощи команд git rebase -i и git push --force. В других заданиях переписывать историю не потребуется, потребуется дописывать новые коммиты.
  3. При желании ответьте на замечания преподавателя индивидуально.
  4. Оставьте в PR отдельное сообщение, начинающееся со строчки @yeputons-bot, исправлено.
  5. Убедитесь, что @yeputons-bot добавил к вашему PR метку needs-grading и назначил review на вашего преподавателя.

Сроки

Задание выдано 15.11.2019 (пятница).

Срок сдачи — 22.11.2019 (пятница) 22:59 по Москве.

Временем отправки решения при учёте дедлайна считается время пуша на наш проверяющий сервер по времени сервера. Время коммита не учитывается (в отличие от времени пуша).

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

Система оценки

Задание оценивается в 10 баллов, из них 6 вы получаете за упражнения, 4 за чистую историю.

  • Каждое упражнение оценивается независимо от остальных в 6/23 балла.
  • В чистой истории вы получаете 2 балла за выполнение всех блокирующих условий и ещё от 0 до 2 баллов оценивают качество деления на коммиты и сообщений коммитов.

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