ものすごく久しぶりにブログ書きます。
もうスイーツとか関係なくなってますがすいません。
以下の日程で開催された、ハル研究所 プログラミングコンテスト2014について書いていきます。
2014年10月1日(水)12:00~2014年11月10日(月)12:00
興味ない人はスルーしてください。すいません。
前置き長いのもアレなんで、アルゴリズムだけ書いていきます。図とか使わないんで、みにくかったらすいません。
・根幹を支える重要なアルゴリズム
加速しなくてもハスにさわれる距離ならWAIT
現在のターンで加速したらそのあと何もしなくてもハスに触れるならアクセル(でも現在ある程度の速度が出てればムリにはやらない)
今はムリだが、速度0になるまでに1回でも加速すればハスに触れるならWAIT
・アクセルの方向に関して
次に狙う予定のハスの半径内で、次の次のハスに一番近い点をnext_targetと呼ぶ。
現在狙ってるハスの半径内で、next_targetに一番近い点をtargetと呼ぶ。
現在狙ってるハスの半径+キャラ半径で、next_targetに一番近い点をgiri_targetと呼ぶ。
基本的にはtargetを目指す
ある程度ハスに近いときは、target,giri_target,狙ってるハスの中心の中からよさげなのを選ぶ
・target変更
自分の現在の速度ベクトルと、targetまでのベクトルのコサイン類似度が0以下ならばアクセル
・先輩
2ターン以内に先輩と触る可能性があればWAIT。ハス付近では4ターン見る
・川の流れ
ハスより十分遠い場合、target=target-flowvel*14*(ハスまでの距離/アクセルで進む距離)
・アクセル数(この処理がないと上の全ての処理がムダになるので重要)
利用できるアクセル数が少ないときは、あんまりアクセルしない
利用できるアクセル数が多いほど、だいたんにアクセルする
5段階の場合分けを設けています。
・おまけ
(ハスまでの距離%アクセルで進む距離)==0だったらアクセル
・パラメータ
アクセルで進む距離=6.32 (速度0になるまでなら6.5625ですが、ちょっと工夫してます)
川の流れのところの14は、アクセルから速度0になるまでのターン数(今思えば12ぐらいでよかった気がする)
ある程度の速度がでてればムリにアクセル踏まない~のところの閾値は、0.31
赤字部分は最初に投稿したときの書き間違えの修正です。
青地部分は加筆修正部分です。わりと蛇足気味。