適応システム構成論(0AL5524)での課題を快適に行うためのスクリプトたち
・Python3(Python3.7及びPython3.8での正常な動作を確認しています)
・ターミナルもしくはコマンドプロンプトからg++
がたたけること(Windowsでたたけない場合はMinGWをインストールしてください)
python make_dataset.py
以下のオプション引数を使用してカスタマイズすることができます.
--path, -p: テストケースの出力先のパス(デフォルトでは`in`)
--testcase_num, -t: 生成するテストケースの数(デフォルトは50)
--data_min, -dmin: 各テストケースにおける引数の個数の最小値(デフォルトは2)
--data_max, -dmax: 各テストケースにおける引数の個数の最大値(デフォルトは2048)
--min, -min: 各テストケースにおける引数の値の最小値(デフォルトは0)
--max, -max: 各テストケースにおける引数の値の最大値(デフォルトは1)
--seed, -s: 乱数のシード値(デフォルトは0)
確認はしていないですがオプション引数で適切に指定すれば動作すると思いますjudge_task1.py
, judge_task1_parallel.py
, 作成したソースコード, 生成したテストケースのディレクトリ(in
)をすべて同じ階層に入れるようにして下さい.
python judge_task1.py -s ジャッジしたいファイル名.c
ジャッジを並列実行したい場合はこちら
python judge_task1_parallel.py -s ジャッジしたいファイル名.c
以下のオプション引数を使用してカスタマイズできます.(judge_task1.py
, judge_task1_parallel.py
とも共通です)
--source, -s: ジャッジしたいファイル名, 必須
--path, -p: テストケースのパス(デフォルトは`in`)
スコアの算出は各テストケースでのグループ0とグループ1の差の絶対値を取り, すべて足しています.
そのため, 最終的に出てきたスコアが低ければ低いほどいいです.
・ジャッジスクリプトでは途中出力があると正しくジャッジできないので最終解のみ出力するようにして実行してください.Ubuntuのみ途中出力に対応しました
・judge_task1_parallel.py
ではTLEの判定ができません.
確認はしていないですがオプション引数で適切に指定すれば動作すると思いますjudge_task1.py
, judge_task1_parallel.py
, 作成したソースコード, 生成したテストケースのディレクトリ(in
)をすべて同じ階層に入れるようにして下さい.
python judge_task2.py -s ジャッジしたいファイル名.c
ジャッジを並列実行したい場合はこちら
python judge_task2_parallel.py -s ジャッジしたいファイル名.c
以下のオプション引数を使用してカスタマイズできます.(judge_task2.py
, judge_task2_parallel.py
とも共通です)
--source, -s: ジャッジしたいファイル名, 必須
--path, -p: テストケースのパス(デフォルトは`in`)
--split_mode, -m: 分割数(課題の第2引数), 後ろで説明(デフォルトではランダムモード)
スコアの算出は各テストケースでのグループ0とグループ1の差の絶対値を取り, すべて足しています.
そのため, 最終的に出てきたスコアが低ければ低いほどいいです.
課題2では2分割~16分割から分割数を指定されます.
ジャッジスクリプトでは前述したとおり分割数を指定することができます.
指定方法は以下のとおりです.
r: ランダムモード. ランダムに分割数を自動的に指定する.
f [filename]: ファイル指定モード. あらかじめファイルに分割数を書き込んでおき, 書き込んだ分割数で分割する.
n [number]: 定数モード. すべてのテストケースに対して[number]分割する.
python judge_task2_parallel.py -s ジャッジしたいファイル名.c -m r
のように書くことですべてのテストケースに対してランダムな分割数を指定し, ジャッジを実行します.
デフォルトではランダムモードになっており, モード指定を行わなくてもランダムモードになります.
python judge_task2_parallel.py -s ジャッジしたいファイル名.c -m f 分割数を指定したファイル名
のように書くことであらかじめ分割数を指定したファイル名を読み取り, 書き込まれた分割数で分割します.
分割数は各行に数字1つのみを書き, 必ず改行してください.
1行目から順にテストケースのファイル名のうち辞書順に対応付けてジャッジを行います.
書き込まれた数字が制約の範囲内(2~16)に収まっていなかったらジャッジを行わずに終了します.
行数が全テストケース数より少ないとジャッジを行わずに終了します.(多い分には先頭から全テストケース分だけ使用します)
また, 指定したファイル名が存在しない場合はランダムに分割数を自動的に指定し, それを指定したファイル名に書き込んだ上でジャッジを行います.
分割数を指定したファイル名のサンプルはこちら
python judge_task2_parallel.py -s ジャッジしたいファイル名.c -m n 分割数
のように指定することで全テストケースに対して指定した分割数で分割を行うようになります.
分割数が制約の範囲内(2~16)に収まっていなかったらジャッジを行わずに終了します.
・judge_task2_parallel.py
ではTLEの判定ができません.
バグや改善してほしい点等ありましたらmanabaのスレッドか本リポジトリのissueに書き込んでください.