公平なコンテストのための制限事項


このコンテストは自由な発想のため Visual C++ でコンパイルできればなんでもアリというゆるいルールにします。 構造体、共用体、ポインタ、クラス、ラムダ式関数、自動変数等、何を使っても いいです。 とはいえ、プログラミングの創意工夫を競うコンテストにしたい、 プログラムの質も重要な視点としたい、 コンテスト本番を円滑に進めたいといった観点から以下のようなルールを設けたいと思います

1. 外部と通信してはならない

人間のジョイパッド、ジョイスティックの操作でロボットを操作するような プログラムも作ることは可能です。 ChatGPT 等の生成系 AI に次どうすればいいか逐次問い合わせるプログラムも作れるかもしれません。

しかしそれらはロボットの頭脳を作るという目的からは逸れてしまいます。 遊びで作って仲間内で遊ぶ分にはかまいませんが、コンテストには参加できません。

2. ライブラリを別途リンクしてはならない

もしかしたら世の中どこかにこういったヘクスマップを走行する関数や 最適経路を確率論で推定するライブラリがあるかもしれません。 そういったものも活用可にすると、 ネット上のどこかにある適したライブラリを見つける競技になってしまいます。

そこで本コンテストでは stdio.h, stdlib.h, string.h, stdint,h だけを include 可にするルールにしたいと思います。 なお、どうしてもこのヘッダファイルも include して使いたいというのであれば申請すればルール改正するかもしれません。

3. ソースファイルは RobotControl.cpp のみとする

理由は 2. と同じです。 RobotControl.cpp 以外のファイルを添えることは不可とします。

4. ソースファイルは可読性のあるコードとする

例えばマシンコードを配列にして取っておき 実行時にそれをメモリに展開して call などの使い方は禁止とします。

5. エラーなく実行できるコードとします

例えば配列やポインタの領域外アクセスやスタックオーバーフローの発生、 ゼロ除算など実行時にエラーになるようなコードは失格とします。 Debug モードなら動くけど Release モードだと動かないとかいうコードも失格です。

6. Loop() 一回にかかる所要時間は 0.2 秒以下とする

Loop() 関数の処理が重いとコンテスト本番のスケジュールに支障が出ます。 Loop() 関数は呼び出されてから 200msec 以内に終了するように作ってください (Sandy Bridge 世代の i3 基準)。 本シミュレータでは呼び出し時間を計測していませんが、 コンテスト本番で使うシミュレータでは計測機能を設けるつもりです。

7. メモリ使用量は 16Mbyte を上限とします

Visual C++ の int 型は 4byte なので、この量でも int 形で 419 万弱の大きさの配列を取れます。 それを上限とします。

8. 同じ大会に同じコードのロボットを複数台エントリしてはならない

当コンテストでは、一つの学校から複数チームがエントリしても構わないと考えています。 しかしプログラムコードは簡単にコピーできるので、 同じ頭脳をもったロボットが何台も参加できてしまいます。 本ルールはそれを防ぐためのものです。


それ以外も制限事項を増やすかもしれませんが、とりあえず現時点での制限です。

[戻る]