Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DOMjudge 形式のリアクティブジャッジのサポート #95

Merged
merged 8 commits into from
Aug 30, 2024

Conversation

tossy310
Copy link
Member

DOMjudge 形式のリアクティブジャッジのサポートを追加します。

実際の使用例として、 https://github.com/tossy310/domjudge-rime-example/ ここのレポジトリにサンプル問題 boolfind をアップロードしてあります。


この PR では DOMJudgeReactiveRunnerDOMJudgeReactiveTask を追加します。前者は作問時に実際に TESTS から指定することになるジャッジ、後者はランナーが内部的に使用し、 rime の task graph の task となり実際にプロセスを実行する責務を負うクラスです。

DOMjudge では、ジャッジプロセスと提出コード実行プロセスの2つを、それぞれの標準入出力をパイプでつなぐことによりリアクティブが実行されます。ジャッジプロセスには実行時の引数として、入力データファイル等が渡されます。

実際のDOMjudgeでは2つのプロセスの間にさらに橋渡しをするプログラムが存在していますが、今回は簡単のために直接両者をパイプでつなぎました。

また、今までのrimeではテストケースごとに (1) リアクティブの実行により何かしらのテキストがジャッジから出力され、(2) その出力を想定の出力との比較を実行すること、で最終的なテストケースの実行結果を判定していました。すなわち2ステップのプログラム実行によりテストケースの判定結果を決めていました。 DOMjudge ではジャッジプロセスの終了コードにより、テストケースの実行結果を判定するため、(1) の実行のみで判定が完了する必要があります。そのため、DOMJudgeReactiveRunner はテストケースの判定結果 TestCaseResult を直接呼び出し元に返すようにし、その対応のために flexible_judge.py にロジックの変更が入っています。

Copy link
Member

@not522 not522 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@not522 not522 merged commit 5f5d832 into icpc-jag:master Aug 30, 2024
@tossy310 tossy310 deleted the DOMJudgeReactive branch August 31, 2024 06:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants