Tworzenie niestandardowego sprawdzacza
Last updated: July 9, 2026
Kod niestandardowego sprawdzacza składa się z 3 części. Dwie nieedytowalne części nazywane są sekcją głowy i ogona. Edytowalną częścią niestandardowego sprawdzacza jest sekcja ciała. Sekcja ciała ma metodę nazwaną run_custom_checker(). Metoda ta przyjmuje dwa argumenty: obiekt TestStructure i obiekt ResultStructure. Metoda ta jest wykonywana po uruchomieniu zgłoszenia kandydata. Każdy przypadek testowy ocenia wyniki zgłoszenia kandydata.

Struktura testu
testcase_id
[int] ID testu
testcase_input_path
[str] Ścieżka do pliku wejściowego testu
testcase_output_path
[str] Ścieżka do pliku wyjściowego testu wygenerowanego przez rozwiązanie problemu
testcase_expected_output_path
[str] Ścieżka do pliku oczekiwanego wyjścia testu do porównania
metadata_file_paths
[list<str>] Ścieżki do plików metadanych pytania (dodatkowe pliki zwykle używane do definiowania zestawów treningowych)
submission_code_path
[str] Ścieżka do pliku źródłowego zgłoszenia
testcase_result
[bool] Ustaw na True, jeśli wyjście testu zgadza się z oczekiwanym wyjściem testu. Dopasowanie odbywa się linia po linii
testcase_signal
[int] Kod wyjścia procesu testu
testcase_time
[float] Czas, jaki zajmuje proces testu w sekundach
testcase_memory
[int] Szczytowa pamięć procesu testu określona w bajtach
data
[str] <Przyszłe użycie>
Struktura Wyniku
result
[bool] Przypisz wynik testu. True oznacza sukces. False oznacza porażkę
score
[float] Przypisz wynik testu. Znormalizowany w zakresie od 0 do 1
message
[str] Przypisz wiadomość testu. Ta wiadomość jest widoczna dla rozwiązującego problem.
Wynik testu jest określany przez ustawienie wartości dla obiektu ResultStructure.
Wynik: Ustaw to na True, jeśli osiągnięto minimalny próg punktowy, w przeciwnym razie na False. Decyduje to, czy udało Ci się przejść ten test czy nie.
Wynik: To jest znormalizowany wynik, gdzie można pobrać łączną liczbę punktów, a 0,5 oznacza połowę punktów.
Wiadomość: To jest konfigurowalna wiadomość, którą można użyć do przekazania informacji dotyczącej wyniku testu, np. „Nie powiodło się, ponieważ nie osiągnięto progu”.
Uwaga: Proszę nie drukować niczego do STDOUT w funkcji run_custom_checker.
Custom-Checker dla listy 5 liczb pierwszych poniżej 100
import re
# Funkcja do określenia, czy dana liczba jest liczbą pierwsządef is_prime_number(x):
if x >= 2:
for y in range(2, x):
if not x % y:
return False
else:
return False
return True
def run_custom_checker(t_obj, r_obj):
result_data = ''
try:
result_data = open(t_obj.testcase_output_path, 'r').read()
except IOError:
r_obj.result = False
r_obj.score = 0
r_obj.message = 'Błąd podczas odczytu pliku wyników'
return
# Odczyt zawartości pliku wyników
values = re.split(' |\n', result_data)
# Upewnij się, że wszystkie wartości są unikalne
uniq_values = set(values)
# Liczba liczb pierwszych
correct_values = 0
for value in uniq_values:
if value and is_prime_number(int(value)):
correct_values = correct_values + 1
# Próg punktów do określenia sukcesu
if correct_values > 3:
r_obj.result = True
else:
r_obj.result = False
r_obj.score = correct_values / 5
r_obj.message = str(correct_values) + ' z 5 wartości jest poprawnych'Wynik
Oto podobny custom checker w języku Java -https://gist.github.com/patilarpith/7b17b5afb9218f770ebc528747017d25
Ocena Przybliżonego Rozwiązania Pytania
Przybliżone pytania rozwiązaniowe są automatycznie oceniane na podstawie niestandardowego sprawdzacza. Są oceniane jak pytania kodowania bez niestandardowego sprawdzacza, używając przypadków testowych do określenia końcowej oceny. Twórca pytania definiuje poszczególne przypadki testowe z parami wejście-wyjście dla pytań kodowania. Każdy przypadek testowy ma przypisaną punktację, a łączna możliwa do zdobycia punktacja to suma punktów ze wszystkich przypadków testowych. Gdy używany jest niestandardowy sprawdzacz, uruchamia się on raz dla każdego przypadku testowego. Podczas testu kod kandydatów jest testowany na podstawie każdego wejścia przypadku testowego. Niestandardowy sprawdzacz ocenia i punktuje każdy przypadek testowy; końcowa ocena kandydata to suma tych punktów.
Powiązany artykuł: