ツールの概要

statements-manager (略称: ss-manager) は、Markdown 形式で記述された競技プログラミングの問題文ファイルを、 HTML / PDF / Markdown 形式のいずれかに変換して出力します。

競技プログラミングの問題を準備するとき、何らかのヒューマンエラーによって、意図しない状態の問題文やデータセットを作ってしまう危険性があります。例えば以下のようなミスが考えられます。

  • 問題文に書いてある制約と、データセットで利用している制約が食い違っており、データセットで制約違反を起こしてしまった

  • 想定解法が変化し、あるサンプル入力に対応するサンプル出力を修正する必要があったが、修正前のものをそのまま問題文に書いてしまった

  • Google Docs で問題文を管理し、定期的にローカルファイルに転記して問題文を作っていたが、古いバージョンのものを問題文として利用してしまった

このツールでは、このようなミスを防止するための機能が備わっており、コマンドを打つだけで適切に問題文を作ることができます。これについての詳細は 特長 をご覧ください。

サンプルファイルを使って、このツールをすぐに試してみたい方は クイックスタート をご覧ください。

Screencast

問題文中に制約やサンプルの情報が直接的には書かれていないファイルを statements-manager でビルドすると、それらの情報を埋め込んだ HTML ファイルが出力されていることが確認できます。また、制約を表すファイル constraints.hpp が自動で生成されていることも確認できます。

特長

問題の制約・サンプルの一元的な管理を実現

このツールでは、問題それぞれについて problem.toml という設定ファイルを作ります。この設定ファイルに、問題制約やサンプルへのパスなどの情報を記載します。

statements-manager では、この設定ファイルをもとに制約ファイル constraints.hpp を自動生成します。データセットを作成するスクリプト内でこのファイルを利用することで、 問題文の制約と同じ制約でデータセットを作ることができます。 また、statements-manager は問題文中に制約やサンプル入出力の情報を自動で埋め込むため、 問題文中に制約やサンプル入出力をハードコーディングする必要がありません。

実際にどのように設定ファイルを作ればよいかは、以下をご覧ください。

Google Docs 上の問題文 / ローカル上の問題文の両方に対応

ローカルに保存されている問題文だけでなく、Google Docs で管理している問題文にも対応しています。この場合ももちろん、先ほどの例のように制約やサンプルを一元的に管理できます。

Google Docs では、テキストに対して修正の提案を出すことができますが、本ツールの実行時には 未解決の提案が存在するかどうかを確認できます。 これは例えば、問題準備の終盤に未解決の提案が存在するかどうか調べるときに役立ちます。