正確な終点とゼロの終端速度を備えたレーストラックのバリアント
前書き チャレンジは、ゲームレーストラックの非常に興味深いバリエーションであり、次の2つのチャレンジです。 Vectoryへ!–ベクターレーシンググランプリ レーシングカーをプログラムする この課題の出典はこちら(ドイツ語):c't-Racetrack この課題は、非常に興味深いものです(上記の2つの課題とは異なります)。これは、巨大な検索スペースと、満たさなければならない正確な条件を組み合わせるためです。膨大な検索スペースのため、網羅的な検索手法は使いにくく、正確な条件のため、近似法も簡単に使用できません。このユニークな組み合わせ(および物理学からの基本的な直感)のため、問題は魅力的です(そして、レーシングカーに関連するすべてがとにかく魅力的です;-) チャレンジ 次の競馬場(ソース)をご覧ください。 壁の1つに触れることなく、(120,180)正確に(320,220)(ドイツ語では "Ziel")で開始して終了する必要があります。 車は次の形式の加速度ベクトルによって制御されます(a_x,a_y)-例として: (8,-6) (10,0) (1,9) 最初の数値はxベクトルの加速度、2番目の数値はyベクトルの加速度です。グリッド上の整数点のみを使用できるため、整数でなければなりません。さらに、次の条件を満たす必要があります。 a_x^2 + a_y^2 <= 100, つまり、任意の方向の加速度は以下でなければなりません10。 どのように機能するかを確認するには、次の図(ソース)をご覧ください。 例として、x方向とy 方向に(120,180)加速します。次のステップでは、これは、次の結果の動き(ポイントへ)を取得する(物理的に正しい)加速度を追加する速度です。結果の動きは、壁の1つに触れたかどうかを調べるときに重要になります。次のステップでは次の加速度ベクトルを現在の速度に追加して、次の動きを取得します。したがって、すべてのステップで、車の位置と速度がわかります(上の図の画像では、青い矢印は速度、オレンジの矢印は加速と結果の動きの濃い赤の矢印)8-6(10,0)(146,168) 追加の条件として、(0,0)あなたが終点にいるとき、あなたは最終速度を持っている必要があります(320,220)。 出力は、上記の形式の加速度ベクトルのリストでなければなりません。 勝者は、加速度ベクトルが最も少ない解を見つけるプログラムを提供する人です。 タイブレーカー さらに、これが最適なソリューションであり、これが唯一の最適なソリューションであるかどうか、またはいくつかの最適なソリューションがあるかどうか(そしてそれらがどれであるか)を示すことができればすばらしいでしょう。 また、アルゴリズムがどのように機能するかについての一般的な概要を示し、コードにコメントを付けて、Googleが理解できるようにするとよいでしょう。 特定のソリューションが有効かどうかをチェックするプログラムがあり、フィードバックを提供します。 補遺 任意のプログラミング言語を使用できますが、誰かがRを使用した場合、私はそれを私の日常業務で頻繁に使用し、どういうわけかそれに慣れているので、特に嬉しく思います:-) 補遺II 初めて私は賞金を始めました-うまくいけば、これはボールが転がることです(またはそれ以上:車の運転です:-)