CodinGameのMars Lander 1の模範解答への蛇足コメント
http://ethiery.vvv.enseirb-matmeca.fr/CGsolo/mars-lander-1.html
このサイトに載っているコードの一部にコメントを追加します。
/* もし今スラスターを吹かしてなくて、今からスラスターを吹かし始めて、 スラスターが最大に吹かされた時の垂直速度と高度を求める*/ double vdY = (double)dY; double vY = (double)Y; for (double i = 0.0; i <= 4; i++) { vdY += i - 3.711; vY += vdY; } /*その時、着地していなくて、落下中である限り、一秒後の高度と落下速度を求める。 最後に求められる高度と落下速度は、着地した時、または上昇し始めた時の、高度と落下速度。*/ while (vY > groundY && vdY < 0) { vdY += 0.289; // 4-3.711; vY += vdY; } //その時落下速度が-40以上なら、今スラスターを吹かさない、-40以下なら、今吹かす。 printf((vdY > -40.0) ? "0 0\n" : "0 4\n"); /*もし今スラスターを吹かしているとしたら、「以降スラスターを全開に吹かしていい」という計算結果を すでに出しているはずで、さらに、今スラスターを吹かしていないと仮定した場合の着地時の落下速度は 実際の着地時の落下速度よりも小さくなり、「スラスターを全開に吹かす」という出力を出すので、問題ない*/