Skip to content

適応システム構成論(0AL5524)での課題を快適に行うためのスクリプトたち

Notifications You must be signed in to change notification settings

jj1guj/adaptation_systems

Repository files navigation

adaptation_systems

適応システム構成論(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)  

課題1のジャッジ

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の判定ができません.

課題2のジャッジ

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に書き込んでください.

About

適応システム構成論(0AL5524)での課題を快適に行うためのスクリプトたち

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •