Erstellung eines benutzerdefinierten Prüfers

Last updated: July 9, 2026

Der benutzerdefinierte Prüfer-Code besteht aus 3 Teilen. Zwei nicht bearbeitbare Teile werden als Kopf- und Fußabschnitt bezeichnet. Der bearbeitbare Teil des benutzerdefinierten Prüfers wird als Körperabschnitt bezeichnet. Der Körperabschnitt hat eine Methode namens run_custom_checker(). Diese Methode nimmt zwei Argumente: ein TestStructure-Objekt und ein ResultStructure-Objekt. Diese Methode wird ausgeführt, nachdem die Einreichung eines Kandidaten ausgeführt wurde. Jeder Testfall bewertet die Ergebnisse der Einreichung des Kandidaten.

image.png

Teststruktur

testcase_id

[int] ID des Testfalls

testcase_input_path

[str] Dateipfad zum Testfall-Eingang

testcase_output_path

[str] Dateipfad zur vom Problemlöser generierten Testfall-Ausgabe

testcase_expected_output_path

[str] Dateipfad zur erwarteten Testfall-Ausgabe, die übereinstimmen soll

metadata_file_paths

[list<str>] Dateipfade zu Frage-Metadaten (zusätzliche Dateien, die normalerweise zum Definieren von Trainingssets verwendet werden)

submission_code_path

[str] Dateipfad zum Einreichungscode

testcase_result

[bool] Auf True setzen, wenn die Testfall-Ausgabe mit der erwarteten Testfall-Ausgabe übereinstimmt. Das Übereinstimmen erfolgt Zeile für Zeile

testcase_signal

[int] Exit-Code des Testfallprozesses

testcase_time

[float] Die vom Testfallprozess benötigte Zeit in Sekunden

testcase_memory

[int] Spitzenverbrauch an Speicher des Testfallprozesses in Bytes

data

[str] <Zukünftige Verwendung>

Ergebnisstruktur

result

[bool]  Weist das Ergebnis des Testfalls zu. True bedeutet Erfolg. False bedeutet einen Fehler

score

[float] Weist die Punktzahl des Testfalls zu. Normalisiert zwischen 0 und 1

message

[str] Weist die Nachricht des Testfalls zu. Diese Nachricht ist für den Problemlöser sichtbar.

 Das Testergebnis wird durch das Setzen der Werte für das ResultStructure-Objekt bestimmt.

  1. Ergebnis: Stellen Sie dies auf True, wenn ein minimaler Grenzwert erreicht wurde, andernfalls auf False. Dies entscheidet, ob Sie diesen Testfall bestanden haben oder nicht.

  2. Punktzahl: Dies ist eine normalisierte Punktzahl, bei der man die Gesamtsumme erhält, und 0,5 würde die Hälfte der Punktzahl darstellen.

  3. Nachricht: Dies ist eine anpassbare Nachricht, die verwendet werden kann, um eine Nachricht bezüglich eines Testergebnisses zu übermitteln, z.B. „Fehlgeschlagen, weil der Grenzwert nicht erreicht wurde."

Hinweis: Bitte drucken Sie in der run_custom_checker-Funktion nichts auf STDOUT.

Benutzerdefinierter Prüfer für eine Liste von 5 Primzahlen unter 100

import re
# Funktion zur Bestimmung, ob die gegebene ganze Zahl eine Primzahl istdef 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 = 'Fehler beim Lesen der Ergebnisdatei'
return

# Inhalte der Ergebnisdatei lesen
values = re.split(' |\n', result_data)

# Sicherstellen, dass alle Werte einzigartig sind
uniq_values = set(values)

# Anzahl der Primzahlen zählen
correct_values = 0
for value in uniq_values:
if value and is_prime_number(int(value)):
correct_values = correct_values + 1

# Grenzwertpunktzahl zur Bestimmung des Erfolgs
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) + ' von 5 Werten sind korrekt'

Ergebnis

Hier ist ein ähnlicher benutzerdefinierter Prüfer in Java -https://gist.github.com/patilarpith/7b17b5afb9218f770ebc528747017d25

Bewertung einer ungefähren Lösungsfrage

Ungefähr Lösung Fragen werden automatisch anhand eines benutzerdefinierten Prüfers bewertet. Sie werden wie Programmierfragen ohne benutzerdefinierten Prüfer bewertet, wobei Testfälle zur Bestimmung der Endpunktzahl verwendet werden. Der Fragemacher definiert einzelne Testfälle mit Eingabe-Ausgabe-Paaren für Programmierfragen. Jeder Testfall hat eine zugewiesene Punktzahl, und die insgesamt mögliche Punktzahl ist die Summe aller Testfallpunkte. Wenn ein benutzerdefinierter Prüfer verwendet wird, läuft er einmal für jeden Testfall. Während des Tests wird der Code der Kandidaten mit jedem Testfalleintrag getestet. Der benutzerdefinierte Prüfer bewertet und bewertet jeden Testfall; die endgültige Punktzahl des Kandidaten ist die Summe dieser Punkte.

Verwandter Artikel: