@@ -10,34 +10,56 @@ Problems for Waseda CS orientation 2018
10
10
* [ 2015] ( https://github.com/AI-comp/Orientation2015Problems )
11
11
* [ 2014] ( https://github.com/AI-comp/Orientation2014Problems ) - [ 順位表] ( https://drive.google.com/file/d/0BzlMTVLOBnPmN25pWFBYbXN5STA/view?usp=sharing )
12
12
13
- # How to Create a new Problem
14
13
15
- 1 . 問題ディレクトリ作成(プロジェクトトップで以下実行)
14
+ # Guide for Problem Writers
15
+
16
+ サンプル問題である ` a+b ` に,一通り必要な物が揃っているので,これを参考にしてください.
17
+
18
+ ## 準備
19
+
20
+ * [ rime] ( https://github.com/icpc-jag/rime ) インストール
21
+
22
+ ## 新規問題追加
23
+
24
+ 1 . 問題ディレクトリの作成(プロジェクトトップで以下実行).
25
+
16
26
```
17
27
rime add . problem <problem_name>
18
28
```
19
29
20
- 2 . ` statement.md ` を書く.
30
+ 2 . その問題の設定ファイル ` PROBLEM ` が ` <problem_name>/ ` に作成され,エディタで開くので,適当に必要そうなところを編集する.(AtCoder用の項目とかもあるので分からなければ飛ばす)
21
31
22
- 3 . 必要に応じてwriter解,input generator, input validatorを作る. [ testlib ] ( https://github.com/MikeMirzayanov/testlib ) を使おう .
32
+ 3 . 問題文ファイル ` statement.md ` を作成して,書く .
23
33
24
- # How to Solve and Test Problems
34
+ 4 . 必要に応じてwriter解(次の「解の追加」も参照),input generator, input validatorを作る.generator, validatorには [ testlib ] ( https://github.com/MikeMirzayanov/testlib ) を使おう. ` PROBLEM ` ファイルの ` reference_solution ` にはwriter解を指定する.
25
35
26
- 1 . [ rime] ( https://github.com/icpc-jag/rime ) をインストール
27
- ```
28
- pip install git+https://github.com/icpc-jag/rime
29
- ```
36
+ ## 解の追加とテスト
30
37
31
- 2 . 解く問題のディレクトリ名を確かめ,以下を実行.この際,`` solution_name `` は既存のものと被らなければ自由に設定可能.
38
+ 1 . 解く問題のディレクトリ名を確かめ,以下を実行.この際,`` solution_name `` は既存のものと被らなければ自由に設定可能.
32
39
```
33
40
rime add <problem_dir_name> solution <solution_name>
34
41
```
35
42
36
- 3 . 既定のエディタで ` SOLUTION ` ファイルが開く.このファイルが解法の設定ファイル .今から作る解法のファイル名やコンパイルオプション等を設定する.(分からない場合は問題` a+b ` に複数の言語での設定があるので参考にしてください.)
43
+ 2 . その解法の設定ファイル ` SOLUTION ` が ` <problem_name>/<<problem_dir_name> ` に作成され,エディタで開く .今から作る解法のファイル名やコンパイルオプション等を設定する.(分からない場合は問題` a+b ` に複数の言語での設定があるので参考にしてください.)
37
44
38
- 4 . ` <problem_dir_name>/<solution_name> ` ディレクトリ内に解答を作成 .
45
+ 3 . ` <problem_dir_name>/<solution_name> ` ディレクトリ内に先ほどのファイル名で解答を作成 .
39
46
40
- 5 . ` rime test -j N ` コマンドでジャッジを実行.(` N ` は並列ジョブ数.)
47
+ 4 . ` rime test -j N ` コマンドでジャッジを実行.(` N ` は並列ジョブ数.)
41
48
プロジェクトのルートで実行すれば,全問題に対するジャッジが走る.問題のディレクトリ内で実行すれば,その問題だけのジャッジが走る.解法のディレクトリ内で実行すれば,その解法だけのジャッジが走る.
42
49
43
- 他にもrimeの機能はあるので,詳しく知りたい場合はこちら: https://rime.readthedocs.io/ja/latest/
50
+ > 今回は,` <problem_dir_name>/tests ` に全部のテストケースを入れるようにしている.そのディレクトリ内の ` *.in ` ファイルは入力ファイルとして扱われる.それに対し,同一ファイル名の ` *.diff ` があれば,それが期待される出力である.` *.diff ` ファイルが存在しない場合,` PROBLEM ` ファイルの ` reference_solution ` で指定されたwriter解の出力が,その入力に対する出力ファイルとみなされる.
51
+
52
+ ## Generator, validator作成
53
+
54
+ * Generatorとは
55
+ * 入力ファイルを生成するプログラム.
56
+ * Validatorとは
57
+ * 生成された入力ファイルが,制約を守って正しいフォーマットであることを検証するプログラム.
58
+ * outputJudgeとは
59
+ * 完全一致以外が許される出力をチェックし,出力されたものがACか否かをジャッジするプログラム.オリエンでは出力の完全一致のみACとしているので今回は使わない.
60
+
61
+ 説明が面倒なので ` a+b ` をサンプルに作成してください.
62
+
63
+ なお,今回,問題の制約で指定する定数群は ` constraints.h ` に記載し,各generatorやvalidarorが参照するようにしましょう.
64
+
65
+ 他にもrimeの機能はあるので,詳しく知りたい場合はこちら: https://rime.readthedocs.io/ja/latest/ (ただし,リンク先はver.1について述べているけど,rimeは最新はver.2)
0 commit comments