Skip to content

Conversation

@ShashkovS
Copy link

@ShashkovS ShashkovS commented Oct 12, 2025

Как протестировать

# Под своим личным пользоватем, который умеет в sudo
cd ~/ejudge # Или нужная директория
git checkout ShashkovS:feat_problem_dir_for_variants
# Осторожнее с параметрами
./configure --prefix=/opt/ejudge        --enable-charset=utf-8 --with-httpd-cgi-bin-dir=/var/www/cgi-bin    --with-httpd-htdocs-dir=/var/www/html    --enable-ajax --enable-local-dir=/var/lib/ejudge    --enable-hidden-server-bins --with-primary-user=ejudge --with-exec-user=ejexec --with-compile-user=ejcompile --enable-compile-spool-dir --enable-run-spool-dir --enable-contests-status-dir --enable-contests-home-dir=/home/judges
make
make install
sudo -H -u root    /opt/ejudge/bin/ejudge-suid-setup
# Перезапуск 
sudo -H -u ejudge   /opt/ejudge/bin/ejudge-control stop
sudo -H -u ejudge   /opt/ejudge/bin/ejudge-control start

Изменения

Если указана переменная variant_num и её значение больше 1, то проводится проверка.
Если указан ровно один problem_dir или его нет вообще, то пути для вариантов формируются по старой логике с суффиксами -1, -2 и т.д.
А если указана больше одного, то их число должно быть равно variant_num. И в этом случае для соответствующего варианта будет использоваться соответствующий problem_dir.

Пример конфига:

[problem]
...
problem_dir = "/home/judges/problems"
...

[problem]
id = 7010
super = "Generic"
short_name = "A"
long_name = "Максимум цветов"
variant_num = 3
problem_dir = "python/ege07/07-A1-max-colors-32x32"
problem_dir = "python/ege07/07-A2-max-colors-1024x1024"
problem_dir = "python/ege07/07-A3-max-colors-128x320"

Для задач без вариантов никаких изменений.
Все остальные конфиги (чекер и т.п.) у всех вариантов должны совпадать.

Страница документации:
https://ejudge.ru/wiki/index.php/Serve.cfg:problem:problem_dir

image image image

Новая версия документации:
—-

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

Если данная конфигурационная переменная не установлена, то по умолчанию каталог задачи размещается в подкаталоге problems. Название каталога задачи задается конфигурационными переменными short_name или internal_name.

Если данная конфигурационная переменная конкретной задачи содержит путь, не начинающийся с символа '/' или '.', то он отсчитывается относительно каталога problems. Например,

problem_dir = "./other\_name"

в этом случае задача находится в problems/./other_name в каталоге турнира.

Если значение переменной равно:

problem_dir = "../000010/problems/A"

в этом случае задача находится в каталоге problems/A каталога турнира 10, то есть используются тесты, проверяющие программы и пр. из другого турнира.

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

problem_dir = "/home/judges/git-repo/2016/A"

здесь задача находится в каталоге /home/judges/git-repo/2016/A.

Если конфигурационная переменная конкретной задачи не начинается с символов '/' или '.', а конфигурационная переменная problem_dir абстрактной задачи начинается с символа '/', полный путь к каталогу задачи получается конкатенацией значения конфигурационной переменной абстрактной и конкретной задач.

Например,

[problem]
abstract
short_name = "Generic"
problem_dir = "/home/judges/git-repo/2016"

[problem]
short_name = "A"
super = "Generic"
problem_dir = "A"

В этом случае путь к каталогу задачи A будет равен /home/judges/git-repo/2016/A.

Поддерживается начиная с версии 3.5.2

Если у задачи установлен параметр variant_num — количество вариантов, и число вариантов больше 1, то параметр задачи problem_dir может быть указан variant_num раз: в этом случае для определения пути к директории задачи вместо суффиксов -1, -2 и т.д. будут использоваться пути из параметров problem_dir. Пример конфигурации:

[problem]
...
problem_dir = "/home/judges/problems"
...

[problem]
id = 7010
super = "Generic"
short_name = "A"
long_name = "Максимум цветов"
variant_num = 3
problem_dir = "python/ege07/07-A1-max-colors-32x32"
problem_dir = "python/ege07/07-A2-max-colors-1024x1024"
problem_dir = "python/ege07/07-A3-max-colors-128x320"

Поддерживается начиная с версии [3.13.1]

@ShashkovS ShashkovS force-pushed the feat_problem_dir_for_variants branch from 8bdcde4 to 4d26226 Compare November 18, 2025 07:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant