비행기 탐색


10

현지 비행기 배달 회사의 비행 경로를 계획해야합니다. 비행기를 A 지점에서 B 지점으로 라우팅해야합니다. A에서 시작해서 비행기를 B로 옮길 수는 없습니다. 그러나 우세한 바람이 당신을 강타 할 것입니다. 대신 바람을 고려하여 비행기가 B로 직접 날아갈 방향을 결정해야합니다.

입력

A_x, A_y, B_x, B_y, S, W_x, W_y를 인코딩하는 7 개의 부동 소수점 숫자 이것들은 출발지와 목적지의 좌표하여 비행기의 비행 속도, 및 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

5
잠깐만 요 ... 지구가 평평하지 않습니까?
Keith Randall

1
(Xb-Xa) (V · sinα + Wy) = (Yb-Ya) (V · cosα + Wx) ... 좋다.
Oleh Prypin

@BlaXpirit : 두 벡터가 반대 방향이면 어떻게해야합니까?
Lowjacker

@BlaXpirit : a sin x + b cos x = cGoogle에서 방정식을 푸는 방법을 검색 하십시오. 직접 해결이 여기에가는 가장 좋은 방법은 아닐 수도 있습니다.
Keith Randall

답변:


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

펄-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")

Straighforward 알고리즘이며 공백과 변수 이름 길이를 짜서 만 골프를 쳤지 만 여기에 첫 번째 대답이 필요하다고 생각했습니다. 나는 골프를 위해 J를 배우고있다. J (또는 Ruby)로 번역하면 쉽게 이길 것입니다. 시도해보십시오.

$X= 크로스 윈드 구성 요소, $T= 테일 윈드 구성 요소. 꼬리 바람이 실제로 앞바람 (즉, 음수)이고 대기 속도보다 강한 경우 접지됩니다. 그렇지 않으면 $C방향을 빼기 $c위해 코스에서 빼는 바람 수정 각도입니다 . 우리는 우리의 속도의 크로스 트랙 구성 요소와 크로스 윈드의 균형을 잡을만큼 충분히 회전해야합니다.


0

펄 : 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.