Navigazione in aereo


10

Hai il compito di pianificare una rotta di volo per una compagnia di consegna aereo locale. Devi indirizzare un aereo dal punto A al punto B. Non puoi semplicemente iniziare da A, puntare l'aereo su B e andare, tuttavia, poiché i venti prevalenti ti faranno volare fuori rotta. Invece devi capire in quale direzione dovresti puntare l'aereo in modo che voli direttamente verso B, tenendo conto del vento.

ingresso

7 numeri in virgola mobile, codifica A_x, A_y, B_x, B_y, S, W_x, W_y. Queste sono le coordinate della partenza e destinazione, la velocità del velivolo, e la forza del vento lungo l'assi xey (direzione soffia il vento a , non da).

produzione

Dovresti stampare l'angolo in gradi (ruotando in senso antiorario dall'asse x positivo) che il piano dovrebbe puntare per raggiungere B in linea retta. Stampa GROUNDEDse il vento è così forte da rendere impossibile il viaggio.

Puoi arrotondare al grado più vicino e farlo con qualsiasi metodo tu voglia (su / giù / più vicino / ...).

esempi

ingressi

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

uscite

30
GROUNDED
229

Il codice più corto vince.


1
terra piatta? o piccolo serbatoio del carburante :-)
pmg

5
Aspetta ... la terra non è piatta?
Keith Randall,

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

@BlaXpirit: cosa succede se i due vettori si trovano in direzioni opposte?
Lowjacker,

@BlaXpirit: cerca a sin x + b cos x = csu Google alcuni metodi per risolvere la tua equazione. La risoluzione diretta potrebbe non essere il modo migliore per andare qui, però ...
Keith Randall,

Risposte:


1

J - 155 caratteri

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
)

Per esempio:

   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

Rimuovi la parte 0".anteriore yse non ti dispiace sintassi J ( _per negazione unaria):

   h 0 0 10 0 100 0 _50
30

Come ho detto nella mia risposta Perl, sto solo imparando J, ma mi piace il suo potere.


2

Perl - 222 caratteri

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

Algoritmo diretto, e davvero giocato solo schiacciando lo spazio bianco e la lunghezza del nome variabile, ma ho pensato che avessimo bisogno di una prima risposta qui. Ho imparato un po 'di J per giocare a golf; Sospetto che la semplice traduzione in J (o Ruby) lo batterà facilmente. Off per provare quelli.

$X= componente del vento trasversale, $T= componente del vento in poppa. Siamo radicati se il vento in coda è in realtà un vento contrario (cioè negativo) e più forte della nostra velocità. Altrimenti, $Cè l'angolo di correzione del vento che sottraggiamo dal nostro percorso $cper ottenere la nostra direzione. Dobbiamo girare abbastanza lontano per bilanciare il vento trasversale con la componente cross-track della nostra velocità.


0

Perl: 193

È vero che questo è (principalmente) il codice Perl di DCharness: ma a chi non piace la fonte di auto-riscrittura?

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

Inoltre produrrà gradi fuori specifica (cioè <0 o> 360), ma ho menzionato la fonte di riscrittura automatica?

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.