JAGの作問環境
これはCompetitive Programming (1) Advent Calendar 2018の2日目の記事です。
JAGでは作問を楽に行うために、様々な試行錯誤を行なっています。今回はデータセット・問題文の準備にどのような工夫をしているかを紹介します。作問の全体的な流れは既に記事が複数書かれているので省略します。
参考:
競技プログラミングの作問進行法 (Competitive Programming Advent Calendar Div2014 Day 2) - itohjamのブログ
競技プログラミング作問ガイド - nodchipのTopCoder日記 - TopCoder部
ツール
Slack
基本的にコミュニケーションはSlack上で行なっています。 コンテスト全体用のチャンネルと各問題ごとのチャンネルを作り情報が散逸しないようにしています。
PukiWiki
問題案の投稿や全体の進捗管理に用いています。
GitHub
テストデータはGitHub上で管理しています。 また、最終版に近いHTML形式の問題文もここに置かれます。
Google Docs
問題文の推敲をここで行います。
Rime
ジャッジ解の管理やジャッジデータの生成などに使います。
データセット
// あとでちゃんと書く
データセットの生成にはジャッジ解・テストデータ生成器・テストデータ検証器の3つが必要になります。 生成器と検証器を書く人は必ず別の人が担当します。 また、余力があれば他の人も検証器を追加で書きます。 これらはRimeで管理され、GitHubのプライベートリポジトリに置かれます。
Gitの運用ポリシーは「masterに直接push」です。
また、push時に自動的にWerckerでrime wikify_fullを走らせていて、実行結果がPukiWikiで確認できるようになっています。 注意点として、Wercker上で並列数を増やしすぎると結果が返ってこないことがある(たぶんメモリを食いつぶした?)ので8並列くらいにしておく必要があります。
GitHub - not522/write-problems-sample: 作問リポジトリのサンプル
問題文
問題文はGoogle docs上にMarkdownで準備しています。 校正もGoogle docsの機能で行っています。
このMarkdownからJAGの内部ツールでHTMLやPDFを生成しています。(このツールは将来的に公開したいと思っています)
この時、自動的にサンプルを挿入するようにしているため、サンプルがリボジトリと同期されないというミスをなくしています。