Skip to content

[PL] 2. Plik konfiguracyjny

Alicja Kluczek edited this page May 30, 2022 · 1 revision

Plik konfiguracyjny

Autor zadania może nadać specjalne reguły dla wgrywanego zadania, umieszczając je je w pliku config.yml w korzeniu katalogu paczki.

W tym momencie wspierany przez nas tym paczki -- sinolpack -- pozwala na nadpisanie reguł wymienionych w tabelce poniżej.

Reguła Krótki opis
title Pełna nazwa zadania
title_lang Przetłumaczona pełna nazwa zadania
time_limit/s Limity czasowe dla przypadków testowych
memory_limit/s Limity pamięciowe dla przypadków testowych
override_limits Specjalne limity dla ustalonego języka
points Jak punktowane są poszczególne przypadki testowe
extra_compilation_files Dodatkowe pliki kompilacji

Szczegółowe opisy każdej reguły znajdują się poniżej.


Title

Opis

Pełna nazwa zadania jest opisana kluczem title.

Jeśli niewpisana

Jeśli nie wyspecyfikowane, nastąpi próba odczytania pełnej nazwy z pliku z treścią zadania. W przypadku nieznalezienia tam pełnej nazwy, zostanie nią skrót zadania (kilkuliterowy identyfikator).

Przykład

W naszej przykładowej paczce pełna nazwa zadania byłaby ustalona następująco:

title: Tree

Title_lang

Opis reguły

Tłumaczenie pełnej nazwy problemu jest opisane kluczem title_<id_języka>. Wartość tego pola staje się pełną nazwą zadania, gdy użytkownik wybiera <id_języka> wersję strony. Aktualnie wspierane języki (i ich identyfikatory) są zapisane w pliku settings.py. Uwaga! Identyfikatorem języka jest jego skrót (pl, en), a nie pełna nazwa. Dostępne języki mogą się różnić między instancjami SIO, jednak zazwyczaj wspierane są co najmniej polski i angielski.

Jeśli niewpisana

Tytuł zadania nie jest tłumaczony, gdy język strony jest zmieniany.

Przykład

Dla naszej paczki, polska wersja pełnej nazwy brzmiałaby ,,Drzewo'' i zostałaby ustawiona następująco:

title_pl: Drzewo

Limity dla przypadków testowych

Każde zgłoszenie jest testowane na wielu przypadkach testowych. Prócz poprawności danych wyjściowych, sprawdzana jest również złożoność czasowa i pamięciowa. Zgłoszenie, które nie zmieści się w limicie czasu otrzymuje status PRZEKROCZONO LIMIT CZASU. Zgłoszenie, które alokuje więcej pamięci niż jest wyspecyfikowane w limicie pamięci otrzymuje status PRZEKROCZONO LIMIT PAMIĘCI.


Time limit

Opis reguły

Limit czasowy jest opisany kluczem time_limit. Wartość musi być podana w milisekundach.

Jeśli niewpisana

Domyślny limit czasowy to 10 sekund.

Przykład

Żeby ustalić limit czasowy na sekundę, reguła wyglądałaby następująco:

time_limit: 1000

Memory limit

Opis reguły

Limit pamięciowy jest opisany kluczem memory_limit. Wartość musi być podana w kilobajtach.

Jeśli niewpisana

Domyślny limit pamięciowy to 66000kB.

Przykład

Żeby ustalić limit pamięciowy na 256MB, reguła wyglądałaby następująco:

memory_limit: 262144

Dodatkowe reguły dla limitów

Chcąc ustalić limity na bardziej szczegółowe (np. oddzielny limit dla grupy lub konkretnego testu), należy skorzystać z kluczy time_limits i memory_limits. Na przykład, żeby ustalić limit dla grupy drugiej na wyższy niż w innych przypadkach testowych, z wyłączeniem przypadku 2a, reguła wyglądałaby następująco:

time_limit: 1000

time_limits:
    2: 5000
    2a: 1000

Możliwe jest ustalenie reguły dla konkretnego języka -- zazwyczaj rozwiązania przesyłane w Pythonie są istotnie wolniejsze i zużywają więcej pamięci. W takiej sytuacji rozsądne jest poluzowanie limitów dla tego języka. Sekcja przeładowania limitów jest opisana kluczem override_limits. W tej sekcji, przeładowanie dla języka wymaga odpowiadającego językowi klucza (jak py lub cpp). Możliwe jest przeładowanie globalnego limitu oraz dla grupy testów.

Na przykład, dodanie następującej reguły do pliku konfiguracyjnego:

override_tests:
    py:
        time_limit: 2000
        memory_limits:
            1: 20000
            3: 10000

zmieni limit czasowy dla zgłoszeń w Pythonie na 2 sekundy, a grupy testowe 1 i 3 będą miały odpowiednio limit pamięciowy 20000 i 10000 kiB. Pozostałe, nieprzeładowane grupy, będą miały domyślny limit z reguły dla całego zadania.


Points

Opis reguły

Chcąc ustalić punktację poszczególnych grup należy użyć klucza scores. W tym słowniku kluczami powinny być numery kolejnych grup, a wartościami liczby całkowite oznaczające punkty przyznane za te grupy. Dopuszczalne jest, aby punkty nie sumowały się do 100. Nie należy określać punktacji dla grupy zero. Jeśli w pliku konfiguracyjnym pojawi się klucz scores, należy określić w nim wartości dla każdej grupy.

Jeśli niewpisana

Jeżeli w pliku nie wystąpi klucz scores, punkty zostaną automatycznie rozdzielone między grupy. Każda grupa otrzyma mniej więcej podobną liczbę punktów, z czego nadmiar (wynikający z niepodzielności liczby 100 na liczbę grup) zostanie przydzielony w ostatnich grupach.

Przykład

Żeby przydzielić 30 punktów za pierwszą grupę testową i 70 punktów za drugą grupę, reguła wyglądałaby następująco:

scores:
    1: 30
    2: 70

Extra compilation files

Opis reguły

Dodatkowe pliki kompilacji są opisane kluczem extra_compilation_files. Szczegółowy opis zastosowania znajduje się tutaj: Paczka z biblioteczką.

Jeśli niewpisana

Nie zostaną dodane dodatkowe pliki.


Przykład pełnego pliku konfiguracyjnego

Pełen plik konfiguracyjny znajduje się tutaj: tre/config.yml.