物理ゴルフ:傾斜射撃


9

「そして今、何かのために、完全に異なる。」

怒っている鳥は、高速Uで水平に角度βで撮影されます。地面は急で、角度αで傾斜しています。鳥が地面にぶつかる前に移動した水平距離qを見つけます。

撮影

長さqを返す関数f(α、β、u)を作成します。鳥が地面に着く前に移動した水平距離です。

制約と注意:

  • -90 <α<90。
  • 0 <β<180。
  • αは常にβよりも小さい。
  • 0 <= u <10 ^ 9。
  • 重力g = 10による加速を想定します。
  • α、βには度の代わりにラジアンを使用できます。
  • uの次元は、gおよびqと一致している限り、無関係です。
  • 空気抵抗がないか、または豪華すぎるものはありません。

最短のコードが勝ちます。

いくつかの方程式については、発射体の動きに関するウィキペディアの記事を参照してください。

サンプル:

f(0, 45, 10) = 10
f(0, 90, 100) = 0
f(26.565, 45, 10) = 5
f(26.565, 135, 10) = 15

数式についていくつかの混乱を見たように、ここでは他の人がそれを使用するためのものです:q = ABS[1/5 u^2 Cos[β] Sec[α] Sin[β - α]]
ベリサリウス博士、2011

回答:


3

ジャワ

ラジアンのみで機能します

double q(double a, double b, double u){
          return (Math.abs(((-Math.tan(a)+(Math.tan(b)))*(u*u)*(0.2*(Math.cos(b)*Math.cos(b))))));
      }

ゴルフバージョン(ピーターに感謝)

double z=u*Math.cos(b);return(Math.tan(b)-Math.tan(a))*z*z/5;

使用される数学:

q=u Cos(B) t
q tan(A) = u sin (B) t - .5 * 10 * t^2

- tan (A)  + tan(B) = 5q/u^2 sec^2 (B)
q =  [ - tan(A) + tan (B) ] u^2
    ---------------------
    sec^2(B)*5

これには何か問題があります...私は正しく理解できません。
アマンZeeKバーマ

この式は正しくありません。gnibblerの投稿でコメントを参照してください
Eelvex

そのため、まだ完全な解決策はありません:)
Aman ZeeK Verma

1
数式を更新しました...テストケースを今すぐ実行してください
アマンジークヴェルマ

いくつかの文字を保存できます。Math.absは不要です。-x+ yはyxと同じくらい短く、* 0.2は/ 5と短くできます。また、不要な角括弧があります。OTOHメソッドの戻り値の型がありません。
Peter Taylor

2

ハスケル(37 35)

アマンのソリューションに基づく:

q a b u=(tan a+tan b)*u*u*cos b^2/5

この問題は、実際にアルゴリズムを実行するよりも数式を実装するため、実際のコードゴルフではありません。


式がすでに短すぎるため、たぶんあなたは正しいです。
Eelvex、2011

1
うのようなもの/5/5.仕事?
Nabb

この式は正しくありません。gnibblerの投稿のコメントを参照してください。
Eelvex、2011

2

Python3-65文字

from math import*
f=lambda α,β,u:(tan(α)+tan(β))*u*u*.2*cos(β)**2

それはまったく正しくありません。1)fは常に正である必要があり、2)α> 0の場合、a = 0の場合よりも大きな値が返されます。これは不可能です。
Eelvex、2011

ああ、私はFUZxxlの式をコピーしました:/
gnibbler
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.