飛行機のナビゲーション


10

あなたは地元の飛行機配達会社の飛行ルートの計画を立てられています。飛行機をA地点からB地点にルーティングする必要があります。Aから出発してB地点に飛行機を向けることはできませんが、卓越した風がコースを吹き飛ばすためです。代わりに、風を考慮して、飛行機がBに直接飛行するように飛行機をどの方向に向けるかを判断する必要があります。

入力

7つの浮動小数点数、A_x、A_y、B_x、B_y、S、W_x、W_yをエンコードします。これらは、出発地と目的地の座標、あなたの航空機の対気速度、及びXに沿って風の強さとy軸(風が吹く方向であるに対して、ではないから)。

出力

平面がBに直線で到達するように向ける角度(度数の正のx軸から反時計回りに回転)を印刷する必要があります。GROUNDED風が強すぎて旅行が不可能になる場合は、印刷します。

あなたは最も近い程度に丸めることができます、そしてあなたが望むどんな方法でもそうします(上/下/最近/ ...)。

入力

0 0 10 0 100 0 -50
0 0 10 0 50 -55 0
3.3 9.1 -2.7 1.1 95.0 8.8 1.7

出力

30
GROUNDED
229

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


1
平らな地球?または小型燃料タンク:-)
pmg 2011年

5
待って...地球は平らではないのですか?
キースランダル

1
(Xb-Xa)(V・sinα+ Wy)=(Yb-Ya)(V・cosα+ Wx)...すばらしい。
Oleh Prypin、2011年

@BlaXpirit:2つのベクトルが反対方向にある場合はどうなりますか?
ロージャッカー、2011年

@BlaXpirit:a sin x + b cos x = c方程式を解くいくつかの方法をGoogleで検索してください。ただし、直接解決することは、ここに行くための最良の方法ではないかもしれません...
キースランドール

回答:


1

J-155文字

h=:3 :0
'c w s'=.(([:j./[:-~/2 2$4{.]),([:j./5 6{]),4{])0".y
'T X'=.+.w*+c%|c
C=.-_1 o.X%s
>((s>|w)*.(-T)<s*2 o.C){'GROUNDED';360|<.360+(C+{:*.c)*180%o.1
)

例えば:

   h '0 0 10 0 100 0 -50'
30
   h '0 0 10 0 50 -55 0'
GROUNDED
   h '3.3 9.1 -2.7 1.1 95.0 8.8 1.7'
229

J数値構文を気にしない場合は、0".前方を削除しyます(_単項否定の場合)。

   h 0 0 10 0 100 0 _50
30

Perlの回答で述べたように、私はJだけを学習していますが、その力は好きです。


2

Perl-222文字

use Math::Trig;($A,$a,$B,$b,$s,$W,$w)=split' ',<>;$c=atan2($b-$a,$B-$A);$A=atan2($w,$W);$S=sqrt($W*$W+$w*$w);$X=$S*sin($A-$c);$T=$S*cos($A-$c);$C=asin($X/$s);print((-$T>$s*cos($C))?"GROUNDED":(360+rad2deg($c-$C))%360,"\n")

単純なアルゴリズムであり、実際には空白と可変名の長さを絞ることによってのみゴルフをしましたが、ここで最初の答えが必要だと思いました。私はゴルフのためにいくつかのJを学んでいます。私は単にJ(またはRuby)に翻訳するだけですぐにこれに勝ると思います。それらを試すためにオフ。

$X=横風コンポーネント、$T=追い風コンポーネント。追い風が逆風(つまり、マイナス)で、対気速度よりも強い場合は、接地されます。それ以外の場合$Cは、方向$cを取得するためにコースから差し引く風補正角度です。クロスウィンドとベロシティのクロストラックコンポーネントのバランスをとるのに十分なだけ回転する必要があります。


0

Perl:193

確かに、これは(ほとんど)DCharnessのPerlコードです。しかし、誰が自己書き換えソースを好まないのですか?

use Math::Trig;$/=' ';@i=<>;$_='1=atan2(3-1,2-0);0=atan2(6,5);2=sqrt(6*6+5*5);5=2*sin(0-1);3=2*cos(0-1);6=asin(5/4);print-3>4*cos 6?GROUNDED:int rad2deg(1-6),"\n"';s/((?<!\w)\d)/\$i[$1]/g;eval

また、仕様外の度数(つまり、<0または> 360)を出力しますが、自己書き換えソースについて言及しましたか?

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