problem.toml の書き方
ツールを使うために、問題ごとに設定ファイル problem.toml を作成します。
Tip
Rime を使用したことがある方向け: このファイルは Rime で言うところの PROBLEM ファイルに似た位置づけです。 PROBLEM と同じ階層に保存することを推奨します。
ファイルの一例は次のとおりです。より具体的な例は リポジトリ内のサンプル をご覧ください。
id = "A"
params_path = "./tests/constraints.hpp"
assets_path = "./statement/assets/"
sample_path = "./tests/"
ignored_samples = []
[[statements]]
path = "./statement/statement_ja.md"
lang = "ja"
markdown_extensions = ["md_in_html", "tables", "fenced_code"]
[[statements]]
path = "./statement/statement_en.md"
lang = "en"
markdown_extensions = ["md_in_html", "tables", "fenced_code"]
[constraints]
MIN_N = 1
MAX_N = 100_000
MIN_M = 1
MAX_M = 100_000
MIN_D = 0
MAX_D = 2_000_000_000
設定項目それぞれについて説明します。
- id
これは必須項目です
問題 ID を指定します。この ID はツール実行中の問題判別や、出力ファイルの名前に使用されます
ID は、実行時に操作対象となる設定ファイルそれぞれで 一意でなければなりません。例えば、
id = "A"となる設定ファイルが複数存在してはいけません。
- assets_path
問題文に添付する画像などが含まれているディレクトリへのパスを指定します。問題文に図が必要な場合などにご利用ください。
assets_path以下に存在する全てのファイル・ディレクトリがss-outディレクトリ中のassetsディレクトリにコピーされます。画像などのリンクを張る際は、この仕様を念頭に置いて指定してください。
Tip
パスの記述は絶対パスでも良いですし、 problem.toml からの相対パスでも構いません。
- sample_path
サンプルケースが含まれているディレクトリへのパスを指定します。何も指定しなかった場合は、
problem.tomlが存在する階層下のtestsディレクトリが設定されます。指定されたディレクトリ内のファイルであって、以下に全て当てはまるものはサンプルケース関連のファイルとみなし、問題文に記載されます。
拡張子が
.in/.out/.diff/.mdのいずれかである.inファイル: 入力例を表すファイル.out/.diffファイル: 出力例を表すファイル.mdファイル: インタラクティブの入出力例を表すファイル (sampleディレクトリの I 問題参照)[言語名]/*.mdファイル: 入出力例に関する説明 (sampleディレクトリの A 問題を参照)例: 日本語で
00_sample_00に関する説明をしたいならば、[sample_path]/ja/00_sample_00.mdというファイルを用意します
ファイル名に
sampleが部分文字列として含まれる
- ignore_samples
sample_pathで指定されたディレクトリにある、サンプルケースとして認識されるファイル名のうち、問題文に反映してほしくないものをリスト形式で指定します。拡張子は含めてはなりません。何も指定されなかった場合、見つかった全てのサンプルケースが問題文に反映されます。ファイル名の指定には Unix のシェル形式のワイルドカード も利用できます。
例えば
00_sample_00および00_sample_hogeを問題文に含めてほしくない場合、ignore_samples = ["00_sample_00", "00_sample_hoge"]のように設定します。
- params_path
問題制約となるパラメータの値を、generator や validator で利用できるようにファイルに出力したいときに、パラメータを記載したファイルの出力パスを指定します。何も指定しなかった場合は、ファイルが出力されません。
既存のファイルと全く同じ出力になる場合、出力をスキップします。
警告
現状は C++ 形式の出力のみ (
.cpp,.cc,.h,.hpp) 対応しています。今後対応言語は増やす予定です
- [[statements]]
この設定は必須です
用意する問題文ファイルそれぞれについて設定します。設定方法の例は
sampleディレクトリにある A 問題・C 問題などを参照してください。サンプルの A 問題 では、英語・日本語の両方で問題文を作成する例を示しています
サンプルの C 問題 では、英語・日本語の両方で問題文を作成することに加えて、制約のみが異なる問題を作成する例も示しています
各問題文ファイルについて以下を設定します。
- path
この設定は必須です
ローカルに問題文が存在する場合: 問題文が記載されているファイル名を指定します
Google Docs に問題文が存在する場合: Google Docs の ID か、もしくは Google Docs のファイルの URL を指定します。設定方法の例は サンプルの H 問題 を参照してください。
- lang
問題文が書かれている言語を設定します。
ja(日本語) もしくはen(英語) のいずれか一方を指定します。何も指定しなかった場合は
enが設定されているとみなして実行します。
- markdown_extensions
Python-Markdown が公式でサポートしている拡張機能 のうち、使用したいものの Entry Point をリスト形式で指定します。
- mode
docsまたはlocalのどちらかを指定します。問題文ファイルが存在する場所に応じて設定ください。何も設定しなかった場合はモードが自動で認識されますので、通常は
modeを設定する必要はありません。
- [constraints]
問題制約を記述します。
[定数名] = [定数]のように記載します。