---
metadata:
  - name: generator
    content: Diplodoc Platform v5.48.2
alternate:
  - https://admin.contest.yandex.ru/docs/en/examples/programming.md
  - https://admin.contest.yandex.ru/docs/ru/examples/programming.md
---
> **Documentation Index:** Fetch the complete configuration index at https://admin.contest.yandex.ru/docs/ru/llms.txt

# Создать задачу по программированию

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

Задача по программированию отличается от более простых задач: 
- Код участника запускается в изолированном виртуальном окружении с определенными характеристиками.
- Код вызывается с определенной версией компилятора или интерпретатора.
- На вход подается заранее заданный поток данных, чаще всего это поток **stdin**.
- На выходе ожидается определенный поток данных, чаще всего это поток **stdout**.

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

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

Рассмотрим пример:

> Реализуйте программу, которая просуммирует несколько целых чисел, поданных в стандартный поток ввода.

<!-- source: ru/_includes/reusables/id-reusables/problem-set.md -->
Вы можете добавлять готовые наборы задач в соревнование. Подробнее см. в разделе [Настройки набора задач](https://admin.contest.yandex.ru/docs/ru/problem-set/settings.md#set-operations).
<!-- endsource: ru/_includes/reusables/id-reusables/problem-set.md -->

## 1. Создайте задачу {#create-task}

1. На вкладке [Задачи](https://admin.contest.yandex.ru/problems/) нажмите кнопку **Создать задачу**.
2. Придумайте название. Оно будет отображаться в интерфейсе участника.
3. Нажмите **Создать**. Откроется страница настроек задачи.
4. Для более быстрого поиска задачи вы можете указать короткое название&nbsp;— оно не отображается для участников.
5. Вы можете добавить перевод полного названия на английском языке.
6. В поле **Тип задачи** выберите `PROBLEM_WITH_CHECKER`.

## 2. Укажите тип ответа {#answer-type}

<!-- source: ru/_includes/reusables/id-reusables/choose-type.md -->
Выберите один из типов: 
- **Текст и файл**&nbsp;— решение нужно написать в многострочное поле ввода текста или отправить файлом.
- **Однострочный ответ**&nbsp;— решение нужно написать одной строкой в поле ввода (подходит не для всех языков программирования).
- **Файл**&nbsp;— решение нужно отправить файлом.
- **Текст**&nbsp;— решение нужно написать в многострочное поле ввода.
<!-- endsource: ru/_includes/reusables/id-reusables/choose-type.md -->

## 3. Добавьте условия задачи {#add-condition}

1. В меню слева выберите **Условия**.
2. Выберите тип условия **Markdown + KaTeX**.
3. Выберите язык:
    
   - **ru** для русского;
   - **en** для английского.
    
4. Справа нажмите кнопку **Добавить условие**.
5. Нажмите строку с добавленным условием, например: `Русский (tex)`.
6. Введите условие в форму и нажмите **Сохранить**.

Подробнее о создании условия задачи см. в разделе [Условия](https://admin.contest.yandex.ru/docs/ru/problem/statements.md).

## 4. Добавьте тесты {#add-test}

**Тесты**&nbsp;— это наборы входных данных и ожидаемых результатов выполнения программы. Например:

```
Задача:

Напишите программу, которая просуммирует несколько целых чисел, поданных в стандартный поток ввода.

Входные данные:
5 7
Ожидаемый результат:
12
```

Тесты&nbsp;— основная часть задачи по программированию. Создать файлы тестов можно несколькими способами:

- создать тесты по одному через административный интерфейс в браузере;
- создать тесты на компьютере, а затем загрузить архив с файлами тестов в задачу.

{% list tabs %}

- Создание файлов тестов через интерфейс

  1\. В меню слева выберите **Тесты и решения** и нажмите кнопку **Создать тест**.

  2\. В поле **Название тестового файла** укажите название для файла с входными данными.

  3\. В поле **Тестовые данные** укажите входные данные.

  4\. В поле **Название файла ответа** укажите название для файла с ожидаемым результатом.

  5\. В поле **Ответ** укажите ожидаемый результат.

  6\. Нажмите **Добавить**.
  
  Результат заполнения формы должен получиться как на скриншоте ниже: ![](../_images/examples/programming/test_create_example_filled.png)
  
  {% note info %}
  
  Вы можете придумать любые названия для файлов тестов и файлов ответов, но мы рекомендуем использовать нумерацию из двух цифр и расширение `.a` для файла ответа, чтобы выполнять меньше действий при создании наборов тестов.
  
  {% endnote %}

- Загрузка файлов тестов архивом

  1\. Создайте все файлы для тестов на компьютере.
      
    Имена файлов с входными данными должны быть схожи между собой и незначительно отличаться от файлов с ожидаемыми результатами. Например, `01 02 03` для файлов с входными данными и `01.a 02.a 03.a` для файлов с ожидаемыми результатами.
      
  2\. Перенесите файлы с тестами в директорию. По умолчанию это **tests**.

  3\. Заархивируйте папку.

    - Допустимы архивы вида: 7-Zip, ZIP, RAR, tar, tar.gz.
    - В корне архива должна быть директория **tests**, в ней файлы с данными.
      
  4\. В меню слева выберите **Загруженные файлы**.

  5\. Выберите корень файлов задачи и нажмите кнопку **Выбрать файл**.
  
  Файлы загрузятся и разархивируются. Если имена файлов и пути совпадают, файлы будут заменены.

{% endlist %}

## 5. Создайте и обновите наборы тестов {#add-test-set}

**Набор тестов**&nbsp;— это способ тестировать задачи участников не всеми тестами, а группами, каждая из которых проверяет определенные крайние случаи в решении участника.

По умолчанию в задаче есть набор тестов **All tests**, но также можно добавить тесты в набор **samples** и неограниченное количество отдельных наборов.

**Samples**&nbsp;— это наборы тестов, которые участник видит в условии как пример входных данных и ожидаемых результатов.

1. В меню слева выберите **Тесты и решения**.
2. Найдите внизу страницы раздел **Наборы тестов** и нажмите строку **All tests**.
3. В поле **Шаблон входного файла** укажите путь до файлов с тестами и в фигурных скобках номера тестов, например `tests/{01-04}`&nbsp;— чтобы добавить только тесты с первого по четвертый, `tests/{05-}`&nbsp;— чтобы добавить тесты с пятого и все остальные.
4. В поле **Шаблон файла правильного ответа** укажите расширение файлов с ответами, например: `*.a`&nbsp;— чтобы добавить все файлы с названиями, совпадающими с названиями тестов из п. 3 и расширением `.a`.
5. Нажмите **Обновить тесты**.

    ![](../_images/examples/programming/add_tests_to_test_set.png)

## 6. Проверьте, правильно ли работает задача (необязательно) {#check-code}

Чтобы проверить, что программа работает правильно, понадобится решение на любом поддерживаемом языке программирования.

Чтобы отправить решение:

1. В меню слева выберите **Тесты и решения** и нажмите кнопку **Добавить решение**.
2. Выберите файл с исходным кодом решения на любом поддерживаемом языке программирования или загрузите его: нажмите кнопку **Выбрать файл** и найдите нужный на компьютере.
3. В меню **Решения** нажмите свое решение и выберите компилятор, подходящий для запуска.
4. Нажмите кнопку **Отправить**.

Посмотреть подробный отчет о тестировании посылки можно по-разному:

- В меню **Посылки** нажмите ID нужной посылки.
- Нажмите кнопку **Пересудить**, чтобы выполнить пересуживание посылки.

![](../_images/examples/programming/submissions.png)

{% note info %}

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

{% endnote %}

<!-- source: ru/_includes/reusables/support-button.md -->
<a href="../../troubleshooting">
  <span class="button">Написать в службу поддержки</span>
</a>



<!-- endsource: ru/_includes/reusables/support-button.md -->
