Procon26のプログラムを書くにあたって,問題生成とか簡易サーバーとか作りたかったプロジェクト
結局くっそ適当な問題生成機能だけ作って結局使わなかったけど,もったいないのでここに供養
(以下,当時書いたメモ)
readmeとは名ばかりのメモ書き
- ひと目で分かる?問題の仕様まとめ
- 石 (Stone)
- 1~16個のブロックからなる
- 8*8マス内に収まる
- バラバラにならない
- 輪にならない
- 敷地 (Field)
- 32*32
- 障害物は0~1023個, 敷地を分断しない
- ルール
- 石は裏返し・回転ができる
- 石は敷く順番が指定される
- 2つ目以降の石はすでに敷いた石と隣接させる
- 石を敷かない場合はパスできる
- 与えられる石のずく数の合計は,与えられる領域の空マス数以上
- 与えられる石では, 全敷地を敷き詰めることができない場合もある
- 与えられる石の数は, 敷き詰め尽くすことができる個数よりも多い場合がある
- 複数回答した場合, 最後の有効回答が有効
- 制限時間は1~10分
- 順位決定法
- 得点が小さい(空き地ずく数)
- 敷き詰めた石の個数が少ない
- 回答時間が短い
- サイコロ
- 石 (Stone)
POSTの細かい仕様はどうなるだろうか。去年のを参考にしよう
- ユーティリティの機能
- gen - 問題ファイルの生成
- パラメータ: 石の数(1
256), ずく数合計(11024), 障害物の散らばり具合(小さいほど敷地が正方形に近くなる) - 出力: "quest[1-3].txt" ASCII CR+LF (各自ファイルリダイレクトして)
- パラメータ: 石の数(1
- server - 競技サーバ(手軽に実行するため一問ごと)
- パラメータ: 問題ファイル, -t 制限時間
- 仕様:
- benchmark - ベンチマーク(数問まるごと)
- パラメータ: プログラムのパス, (benchmark.jsonのパス)
- 仕様:
- サーバを立ち上げる
- プログラムに--benchmarkのオプションを付けて実行する
- プログラムは即座に問題をgetし, 随時回答をPOSTする
- 制限時間になったらプログラムを終了させる(プログラムにEOFを入力する)。また, それ以前にプログラム自身が最適解を出したと判断した場合は自ら終了するようにする
- benchmark.jsonにもとづき, 2番からの手順をループする
- 全てのテストが終わったら, 総合結果を標準出力とscore.logに出力する
- gen - 問題ファイルの生成