Điều hướng máy bay


10

Bạn được giao nhiệm vụ lên kế hoạch bay cho một công ty giao hàng máy bay địa phương. Bạn cần định tuyến máy bay từ điểm A đến điểm B. Bạn không thể bắt đầu tại A, hướng máy bay đến B và đi, tuy nhiên, vì những cơn gió thịnh hành sẽ thổi bay bạn. Thay vào đó, bạn cần tìm ra hướng nào bạn nên hướng máy bay để nó sẽ bay thẳng đến B, tính đến gió.

đầu vào

7 số dấu phẩy động, mã hóa A_x, A_y, B_x, B_y, S, W_x, W_y. Đây là tọa độ của điểm bắt đầu và điểm đến của bạn, tốc độ bay của máy bay và sức mạnh của gió dọc theo trục x và y (hướng gió thổi tới , không phải từ).

đầu ra

Bạn nên in góc theo độ (quay ngược chiều kim đồng hồ từ trục x dương) mà mặt phẳng sẽ chỉ để đạt B theo đường thẳng. In GROUNDEDnếu gió quá mạnh để làm cho chuyến đi không thể.

Bạn có thể làm tròn đến mức độ gần nhất và thực hiện với bất kỳ phương pháp nào bạn muốn (lên / xuống / gần nhất / ...).

ví dụ

đầu vào

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

đầu ra

30
GROUNDED
229

Mã ngắn nhất sẽ thắng.


1
Trái đất phẳng? hoặc bình nhiên liệu nhỏ :-)
pmg

5
Đợi ... trái đất không phẳng?
Keith Randall

1
(Xb-Xa) (V · sinα + Wy) = (Yb-Ya) (V · cosα + Wx) ... Tuyệt vời.
Oleh Prypin

@BlaXpirit: Nếu hai vectơ ngược chiều nhau thì sao?
Lowjacker

@BlaXpirit: Tìm kiếm a sin x + b cos x = ctrên Google cho một số phương pháp giải phương trình của bạn. Giải quyết trực tiếp có thể không phải là cách tốt nhất để đến đây, mặc dù ...
Keith Randall

Câu trả lời:


1

J - 155 ký tự

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
)

Ví dụ:

   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

Xóa phần 0".trước ynếu bạn không nhớ cú pháp số J ( _đối với phủ định đơn nguyên):

   h 0 0 10 0 100 0 _50
30

Như tôi đã đề cập trong câu trả lời Perl của mình, tôi chỉ học J, nhưng thích sức mạnh của nó.


2

Perl - 222 ký tự

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

Thuật toán Straighforward, và thực sự chỉ chơi golf bằng cách nén khoảng trắng và độ dài tên biến, nhưng tôi nghĩ rằng chúng ta cần một câu trả lời đầu tiên ở đây. Tôi đã học một số J để chơi gôn; Tôi nghi ngờ chỉ cần dịch sang J (hoặc Ruby) sẽ dễ dàng đánh bại điều này. Tắt để thử những cái đó.

$X= thành phần gió ngược, $T= thành phần đuôi gió. Chúng tôi sẽ căn cứ nếu gió đuôi thực sự là một cơn gió ngược (tức là âm) và mạnh hơn tốc độ không khí của chúng tôi. Mặt khác, $Clà góc điều chỉnh gió mà chúng tôi trừ khỏi khóa học của chúng tôi $cđể có được tiêu đề của chúng tôi. Chúng ta cần quay đủ xa để cân bằng luồng gió với thành phần đường chéo của vận tốc của chúng ta.


0

Perl: 193

Phải thừa nhận rằng đây là (phần lớn) mã Perl của DCharness: nhưng ai không thích tự viết lại nguồn?

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

Ngoài ra, nó sẽ xuất độ ra khỏi spec (tức là <0 hoặc> 360), nhưng tôi đã đề cập đến nguồn tự viết lại chưa?

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.