Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
DOMjudge 形式のリアクティブジャッジのサポートを追加します。
実際の使用例として、 https://github.com/tossy310/domjudge-rime-example/ ここのレポジトリにサンプル問題
boolfind
をアップロードしてあります。この PR では
DOMJudgeReactiveRunner
とDOMJudgeReactiveTask
を追加します。前者は作問時に実際にTESTS
から指定することになるジャッジ、後者はランナーが内部的に使用し、 rime の task graph の task となり実際にプロセスを実行する責務を負うクラスです。DOMjudge では、ジャッジプロセスと提出コード実行プロセスの2つを、それぞれの標準入出力をパイプでつなぐことによりリアクティブが実行されます。ジャッジプロセスには実行時の引数として、入力データファイル等が渡されます。
実際のDOMjudgeでは2つのプロセスの間にさらに橋渡しをするプログラムが存在していますが、今回は簡単のために直接両者をパイプでつなぎました。
また、今までのrimeではテストケースごとに (1) リアクティブの実行により何かしらのテキストがジャッジから出力され、(2) その出力を想定の出力との比較を実行すること、で最終的なテストケースの実行結果を判定していました。すなわち2ステップのプログラム実行によりテストケースの判定結果を決めていました。 DOMjudge ではジャッジプロセスの終了コードにより、テストケースの実行結果を判定するため、(1) の実行のみで判定が完了する必要があります。そのため、
DOMJudgeReactiveRunner
はテストケースの判定結果TestCaseResult
を直接呼び出し元に返すようにし、その対応のためにflexible_judge.py
にロジックの変更が入っています。