Требования к программам
Тестирующая система ejudge использует автоматические скрипты проверки стиля кода.
Для C++ используется утилита cpplint с ключами
cpplint.py --filter=-legal,-readability/streams,-build/namespaces,-whitespace/braces,-whitespace/newline,-whitespace/line_length,-runtime/int,-runtime/threadsafe_fn,-readability/casting,-build/include_what_you_use,-runtime/arrays,-runtime/explicit,-build/include,-readability/fn_size,-runtime/printf,-whitespace/comments,-runtime/references,-readability/braces
Для Python используется утилита pep8.py с ключами
pep8.py -r --show-source --ignore=W391,E251,E501,W292,W291,W293
Очень полное и подробное описание требований к коду на C++ содержится в руководстве по оформлению кода на С++ от Стэнфордского университета
Python
Помимо сформулированных ниже правил, программы должны соответствовать документу PEP8: Style Guide for Python Code из официальной документации языка Python. При сдаче задачи в ejudge проводится автоматическая проверка на соответствие программы PEP8.
Символы и отступы
Величина отступа – четыре пробела. Использование символа табуляции (символа, с кодом 9) запрещается.
Последняя строка должна завершаться символом конца строки. Пустых строк в конце файла быть не должно. В конце любой строки не должно быть пробелов.
Функции должны отделяться двумя пустыми строками. Отдельные смысловые блоки в программе должны отделяться пустыми строками.
Структура программы
Программа начинается с подключения библиотек (import). Потом идут определения классов. Потом идут определения функций. Потом идет основная программа.
Запрещается подключать библиотеки и объявлять функции посередине кода.
Имена переменных
Имена переменных, функций, типов должны быть осмысленными и отражать назначение. Слишком длинные имена, однако, не рекомендуются. В именах допускаются сокращения, которые не затрудняют понимание имени и назначения функций и переменных.
Допускается использование односложных имен переменных для счетчиков (i, j, k), а также если это имя фигурирует в условии задачи (N, M, K, L), но не имеет какого либо смыслового значения (например, если в задаче написано «Проверьте число N на простоту», то обозначать переменной буквой n допускается. Если в задаче сказано «Дано число N – количество учащихся в классе», то не допускается).
В именах должны использоваться только английские слова. Транслитерации русских слов не допускаются. Запрещается использование символов, отличных от латинских букв, цифр и символа подчеркивания.
Если имя переменной или функции состоит из нескольких слов, то они должны разделяться символом подчеркивания. Например:
count_max – допустимо
count_of_elements_equal_to_maximal – недопустимо (слишком длинное)
kolichestvo_maksimalnih – недопустимо (используется транслитерация)
cm – недопустимо (непонятная аббревиатура)
Имена констант записываются полностью заглавными буквами, например, EPS, MAX_SIZE.
Названия классов должны записываться с заглавной буквы.
Арифметические операции
В одной строчке записывается одна арифметическая операция. Например:
highlight/java отсутствуетБинарные операции разделяются пробелом. После запятой ставится пробел. Между именем функции и скобками пробел не ставится, с внутренней стороны скобок пробелы не ставятся
highlight/java отсутствуетИспользование констант
Не допускается использование чисел в программе, значение которых неочевидно. Например, запись while i < 179 или c = c + 32 недопустима.
C++
Символы и отступы
Величина отступа – четыре пробела. Использование символа табуляции (символа, с кодом 9) запрещается.
Последняя строка должна завершаться символом конца строки. Пустых строк в конце файла быть не должно. В конце любой строки не должно быть пробелов.
Функции должны отделяться пустыми строками. Отдельные смысловые блоки в программе должны отделяться пустыми строками.
Имена переменных
Имена переменных, функций, типов должны быть осмысленными и отражать назначение. Слишком длинные имена, однако, не рекомендуются. В именах допускаются сокращения, которые не затрудняют понимание имени и назначения функций и переменных.
Допускается использование односложных имен переменных для счетчиков (i, j, k), а также если это имя фигурирует в условии задачи (N, M, K, L).
В именах должны использоваться только английские слова. Транслитерации русских слов не допускаются.
Если имя переменной или функции состоит из нескольких слов, то они должны разделяться символом подчеркивания или заглавными буквами. Например:
CalcSqrt – допустимо
calc_sqrt – допустимо
calculate_square_root – допустимо, но нежелательно (слишком длинное имя)
vychislenie_kornya – недопустимо (используются русские имена)
f – недопустимо (непонятно назначение функции)
Имена констант записываются полностью заглавными буквами. Если имя константы состоит из нескольких слов, для их разделения используются подчеркивания. Например, EPSILON, MAX_SIZE.
Имена массивов и названия типов структур должны записываться с заглавной буквы.
Арифметические операции
В одной строчке записывается одна арифметическая операция. Например:
highlight/java отсутствуетБинарные операции разделяются пробелом. После запятой и после точки с запятой в цикле for ставится пробел. Между именем функции и скобками пробел не ставится, с внутренней стороны скобок пробелы не ставятся
highlight/java отсутствуетСтиль отступов
if
Оператор if без else записывается так:
highlight/java отсутствуетОператор if c else записывается так:
highlight/java отсутствуетПоследовательность if ... else if ... else if ... else записывается так:
highlight/java отсутствуетwhile
highlight/java отсутствуетdo while
highlight/java отсутствуетfor
highlight/java отсутствуетОписание структуры
highlight/java отсутствуетРеализация функции
highlight/java отсутствуетБлоки инструкций ветвления и цикла всегда заключаются в фигурные скобочки, даже если они состоят из одной инструкции.
Использование констант
Не допускается использование чисел в программе, значение которых неочевидно. Например, запись while (i < 179) недопустима.
Ввод-вывод
Все сообщения об ошибках, предупреждения, отладочные сообщения и прочая диагностическая информация, не являющаяся результатом работы программы в предположении корректных входных данных, должна выводиться на стандартный поток ошибок stderr, то есть примерно так:
highlight/java отсутствуетПри выводе результата работы на стандартный поток вывода или в текстовый файл вывод должен заканчиваться символом перехода на новую строку. Исключением являются программы, выполняющие посимвольную обработку потока данных.