src/open_r1/utils/competitive_programming/ioi_utils.py (22 lines of code) (raw):
from collections import defaultdict
from functools import lru_cache
from datasets import load_dataset
def add_includes(code: str, problem_id: str) -> str:
"""
Fix common compilation errors for IOI problems.
"""
if not code:
return code
# has most of the useful functions
code_header = "#include <bits/stdc++.h>\n"
# include the problem header
problem_header_include = f'#include "{problem_id}.h"'
if problem_header_include not in code:
code_header += problem_header_include + "\n"
# use namespace std since models forget std:: often
if "using namespace std;" not in code and "std::" not in code:
code_header += "\nusing namespace std;\n\n"
return code_header + code
@lru_cache
def load_ioi_tests_for_year(year: int) -> dict[str, dict[str, tuple[str, str]]]:
"""
Load IOI tests for a given year.
"""
tests_dataset = load_dataset("open-r1/ioi-test-cases", name=f"{year}", split="train")
test_cases = defaultdict(dict)
for test_case in tests_dataset:
test_cases[test_case["problem_id"]][test_case["test_name"]] = test_case["test_input"], test_case["test_output"]
return test_cases
def load_ioi_tests(year: int, problem_id: str) -> dict[str, tuple[str, str]]:
"""
Load IOI tests for a given year and problem id.
"""
return load_ioi_tests_for_year(year)[problem_id]