-
Notifications
You must be signed in to change notification settings - Fork 79
[PL] 2. 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.
Pełna nazwa zadania jest opisana kluczem title.
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).
W naszej przykładowej paczce pełna nazwa zadania byłaby ustalona następująco:
title: Tree
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.
Tytuł zadania nie jest tłumaczony, gdy język strony jest zmieniany.
Dla naszej paczki, polska wersja pełnej nazwy brzmiałaby ,,Drzewo'' i zostałaby ustawiona następująco:
title_pl: Drzewo
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.
Limit czasowy jest opisany kluczem time_limit. Wartość musi być podana w milisekundach.
Domyślny limit czasowy to 10 sekund.
Żeby ustalić limit czasowy na sekundę, reguła wyglądałaby następująco:
time_limit: 1000
Limit pamięciowy jest opisany kluczem memory_limit. Wartość musi być podana w kilobajtach.
Domyślny limit pamięciowy to 66000kB.
Żeby ustalić limit pamięciowy na 256MB, reguła wyglądałaby następująco:
memory_limit: 262144
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.
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ż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.
Ż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
Dodatkowe pliki kompilacji są opisane kluczem extra_compilation_files. Szczegółowy opis zastosowania znajduje się tutaj: Paczka z biblioteczką.
Nie zostaną dodane dodatkowe pliki.
Pełen plik konfiguracyjny znajduje się tutaj: tre/config.yml.