Раздел «Образование».JudgeTaskIntro:

Регламент вычитки задач

Задача передается на вычитку после того, как автор проделал следующие действия:

После этого задаче назначается вычитыватель и он проверяет корректность и полноту условия и пишет свое решение, проверяя тесты.

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

Если ваше решение может быть выражено формулой, не ленитесь, распишите тестовые данные без использования формулы, чисто по условиям. И проверьте на полученной таблице ваши тесты.

Название файлов

test1 data
----------
test1 ans
==========

Задачи на "подумать" располагаются по темам в директориях if/if_ovsyannikova, for/for_ovsyannikova и тп.;

задачи на "подумать на все темы сразу" располагаются в ovsyannikova.

Так исторически сложилось.

Условие задачи

<?xml version="1.0" encoding="utf-8" ?>
<problem  package = "ru.ejudge.2012_advanced_11"
id = "1"   type = "standard">
<statement language="ru_RU">
<description>
<p>В строке через пробел дано неизвестное количество чисел с плавающей точкой (float), среди которых есть как положительные, так и отрицательные, а также нули. Требуется отсортировать по возрастанию положительные числа так, чтобы все отрицательные числа и нули остались на своих исходных позициях.</p>
</description>
<input_format>
<p>N чисел в одной строке через пробел. 0 &lt; N &le; 1000.</p>
</input_format>
<output_format>
<p>N чисел в одной строке через пробел. Печатать числа с тремя знаками после точки.</p>
</output_format>
<notes>Автор: ... (редактор, "задача классическая")
</notes>
</statement>
<examples>
<example>
<input>1 -4.54 0 8.1 5 -1 0 3.141 -5</input>
<output>1.000 -4.540 0.000 3.141 5.000 -1.000 0.000 8.100 -5.000</output>
</example>
</examples>
</problem>

Как написать свой checker

checker - это программа, которая проверяет правилен ли output работы посылаемого решения. Лучше всего сформулировать задачу так, чтобы выходные данные были однозначны. Но иногда такая формулировка содержит подсказку алгоритма решения (или не хочется делать входные данные такими, которые будут давать всегда однозначный правильный ответ). В этом случае стоит написать свой чекер.

Предположим, что задача - "Дано натуральное число N, напечатать числа от 0 до N." Порядок при этом не оговаривается.

В чекер будут переданы 3 аргумента командной строки (может больше, см. документацию ниже)

Напишем код на питоне, который сортирует оцениваемые выходные данные и сравнивает с эталоном. Поместим код в файл checker_sorted_int.py :

#!/bin/python3
import sys

input_data_filename = sys.argv[1]   # путь к xxx.dat (входным данным)
result_data_filename = sys.argv[2]  # путь к выводу тестируемого решения
output_data_filename = sys.argv[3]  # путь к xxx.ans (эталонным выходным данным), если настроена переменная  use_corr

res = []
out = []

try:
    with open(result_data_filename, 'r') as fres:
        res = sorted(list(map(int, fres.read().split())))
    with open(output_data_filename, 'r') as fout:
        out = sorted(list(map(int, fout.read().split())))
except:
    sys.exit(4) # Presentation Error - вместо чисел что-то другое
    
print(res)   # можно включить отладочную печать
print(out)    

if res == out:
    sys.exit(0) # OK
else:
    sys.exit(1) # WA - wrong answer

Как привязать чекер к задаче

Если чекеру нужны какие-то дополнительные параметры, то их можно передать в переменной checker_env, например, для стандартного чекера cmp_double устанавливается параметр EPS.

checker_env = "EPS=0.0001"

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

Ссылки на официальную документацию

-- TatyanaDerbysheva - 13 Sep 2015