problem.toml の書き方

ツールを使うために、問題ごとに設定ファイル problem.toml を作成します。

Tip

Rime を使用したことがある方向け: このファイルは Rime で言うところの PROBLEM ファイルに似た位置づけです。 PROBLEM と同じ階層に保存することを推奨します。

ファイルの一例は次のとおりです。より具体的な例は リポジトリ内のサンプル をご覧ください。

id = "A"

params_path = "./tests/constraints.hpp"
assets_path = "./statement/assets/"
sample_path = "./tests/"
ignore_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 が設定されているとみなして実行します。

digit_separator

桁区切りに使用する文字を設定します。何も指定しなかった場合は , が設定されているとみなして実行します。

  • 半角スペース 1 文字を指定した場合: 1 000 000 のように、数字の間に半角スペースが入ります

  • , を指定した場合: 1,000,000 のように、数字の間に半角カンマが入ります

  • none を指定した場合: 1000000 のように、数字の間に区切り文字が入りません

markdown_extensions

Python-Markdown が公式でサポートしている拡張機能 のうち、使用したいものの Entry Point をリスト形式で指定します。

mode

docs または local のどちらかを指定します。問題文ファイルが存在する場所に応じて設定ください。

何も設定しなかった場合はモードが自動で認識されますので、通常は mode を設定する必要はありません。

[constraints]

問題制約を記述します。 [定数名] = [定数] のように記載します。