このコンテストは自由な発想のため Visual C++ でコンパイルできればなんでもアリというゆるいルールにします。 構造体、共用体、ポインタ、クラス、ラムダ式関数、自動変数等、何を使っても いいです。 とはいえ、プログラミングの創意工夫を競うコンテストにしたい、 プログラムの質も重要な視点としたい、 コンテスト本番を円滑に進めたいといった観点から以下のようなルールを設けたいと思います
人間のジョイパッド、ジョイスティックの操作でロボットを操作するような プログラムも作ることは可能です。 ChatGPT 等の生成系 AI に次どうすればいいか逐次問い合わせるプログラムも作れるかもしれません。
しかしそれらはロボットの頭脳を作るという目的からは逸れてしまいます。 遊びで作って仲間内で遊ぶ分にはかまいませんが、コンテストには参加できません。
もしかしたら世の中どこかにこういったヘクスマップを走行する関数や 最適経路を確率論で推定するライブラリがあるかもしれません。 そういったものも活用可にすると、 ネット上のどこかにある適したライブラリを見つける競技になってしまいます。
そこで本コンテストでは stdio.h, stdlib.h, string.h, stdint,h だけを include 可にするルールにしたいと思います。 なお、どうしてもこのヘッダファイルも include して使いたいというのであれば申請すればルール改正するかもしれません。
理由は 2. と同じです。 RobotControl.cpp 以外のファイルを添えることは不可とします。
例えばマシンコードを配列にして取っておき 実行時にそれをメモリに展開して call などの使い方は禁止とします。
例えば配列やポインタの領域外アクセスやスタックオーバーフローの発生、 ゼロ除算など実行時にエラーになるようなコードは失格とします。 Debug モードなら動くけど Release モードだと動かないとかいうコードも失格です。
Loop() 関数の処理が重いとコンテスト本番のスケジュールに支障が出ます。 Loop() 関数は呼び出されてから 200msec 以内に終了するように作ってください (Sandy Bridge 世代の i3 基準)。 本シミュレータでは呼び出し時間を計測していませんが、 コンテスト本番で使うシミュレータでは計測機能を設けるつもりです。
Visual C++ の int 型は 4byte なので、この量でも int 形で 419 万弱の大きさの配列を取れます。 それを上限とします。
当コンテストでは、一つの学校から複数チームがエントリしても構わないと考えています。 しかしプログラムコードは簡単にコピーできるので、 同じ頭脳をもったロボットが何台も参加できてしまいます。 本ルールはそれを防ぐためのものです。