-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgrader.py
More file actions
44 lines (35 loc) · 1.21 KB
/
Copy pathgrader.py
File metadata and controls
44 lines (35 loc) · 1.21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
from runner import run_case
def compare_output(output, expected):
return output == expected
def evaluate_task(task, solve_fn):
cases = task["public_tests"] + task["hidden_tests"]
score_per_case = 10
max_score = len(cases) * score_per_case
passed = 0
failures = []
total_runtime = 0.0
for idx, case in enumerate(cases, start=1):
result = run_case(solve_fn, task["name"], case["input"])
total_runtime += result["runtime_ms"]
if result["ok"] and compare_output(result["output"], case["expected"]):
passed += 1
else:
failures.append(
{
"case_id": idx,
"input": case["input"],
"expected": case["expected"],
"output": result["output"],
"error": result["error"] if not result["ok"] else "WrongAnswer",
}
)
score = passed * score_per_case
return {
"task_name": task["name"],
"score": score,
"max_score": max_score,
"passed": passed,
"total": len(cases),
"failures": failures,
"avg_runtime_ms": total_runtime / len(cases) if cases else 0.0,
}