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.

image.png

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.

  1. 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.

  2. Wynik: To jest znormalizowany wynik, gdzie można pobrać łączną liczbę punktów, a 0,5 oznacza połowę punktów.

  3. 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ł: