การนำทางเครื่องบิน


10

คุณได้รับมอบหมายให้วางแผนเส้นทางบินสำหรับ บริษัท ขนส่งเครื่องบินท้องถิ่น คุณต้องกำหนดเส้นทางเครื่องบินจากจุด A ไปยังจุด B คุณไม่สามารถเริ่มต้นที่ A ชี้เครื่องบินไปที่ B แล้วไปอย่างไรก็ตามเนื่องจากลมที่พัดผ่านจะทำให้คุณระเบิด คุณต้องหาทิศทางที่คุณควรชี้เครื่องบินเพื่อให้มันบินตรงไปที่ B แทนโดยคำนึงถึงลม

อินพุต

7 ตัวเลขทศนิยม, เข้ารหัส A_x, A_y, B_x, B_y, S, W_x, W_y นี่คือพิกัดเริ่มต้นและปลายทางของคุณความเร็วของเครื่องบินและความแรงของลมตามแนวแกน x และ y (ทิศทางที่ลมพัดไปไม่ใช่จาก)

เอาท์พุต

คุณควรพิมพ์มุมเป็นองศา (หมุนทวนเข็มนาฬิกาจากแกน x บวก) ที่ระนาบควรชี้ไปที่ B ในแนวเส้นตรง พิมพ์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 = cใน Google สำหรับวิธีการแก้สมการของคุณ การแก้ปัญหาโดยตรงอาจไม่ใช่วิธีที่ดีที่สุดที่จะไปที่นี่แม้ว่า ...
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

ลบ0".ล่วงหน้าyหากคุณไม่คำนึงถึงไวยากรณ์ตัวเลข J ( _สำหรับการปฏิเสธแบบเอกนารี):

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

ขั้นตอนวิธีการ Straighforward และจริง ๆ แล้วกอล์ฟโดยการบีบช่องว่างและความยาวชื่อตัวแปร แต่ฉันคิดว่าเราต้องการคำตอบแรกที่นี่ ฉันได้เรียนรู้เจบางอย่างสำหรับการเล่นกอล์ฟ; ฉันสงสัยว่าการแปลเป็น J (หรือ Ruby) อย่างง่ายดายจะเอาชนะสิ่งนี้ได้ ปิดเพื่อลองเหล่านั้น

$X= crosswind component, $T= tailwind component เรามีการต่อสายดินถ้าจริง ๆ แล้วลมพัดเป็นลม (เช่นลบ) และแรงกว่าเครื่องบินของเรา มิฉะนั้น$Cก็คือมุมการแก้ไขลมที่เราลบออกจากเส้นทางของเรา$cเพื่อมุ่งหน้าไป เราจำเป็นต้องหันหน้าไปทางไกลพอที่จะสร้างความสมดุลให้กับลมหมุนด้วยองค์ประกอบทางวิ่งของความเร็วของเรา


0

Perl: 193

เป็นที่ยอมรับว่าเป็น (ส่วนใหญ่) รหัส Perl ของ DCharness: แต่ใครที่ไม่ชอบแหล่งเขียนด้วยตนเองอีกครั้ง

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.