Golf Fisika: pemotretan miring

9

"Dan sekarang untuk sesuatu, sangat berbeda."

Sebuah burung marah ditembak pada β sudut terhadap horizontal pada kecepatan u. Tanahnya curam, miring pada sudut α. Temukan jarak horizontal q yang dilalui burung itu sebelum menyentuh tanah.

Penembakan

Buat fungsi f (α, β, u) yang mengembalikan panjang q : jarak horizontal yang ditempuh burung sebelum menyentuh tanah.

Batasan dan catatan:

  • -90 <α <90.
  • 0 <β <180.
  • α selalu lebih kecil dari β.
  • 0 <= u <10 ^ 9.
  • Asumsikan akselerasi karena gravitasi g = 10.
  • Anda dapat menggunakan radian alih-alih derajat untuk α, β.
  • Dimensi u tidak relevan selama konsisten dengan g dan q.
  • Tidak ada hambatan udara atau sesuatu yang terlalu mewah.

Kode terpendek menang.

Lihat artikel wikipedia tentang gerakan proyektil untuk beberapa persamaan.

Sampel:

f(0, 45, 10) = 10
f(0, 90, 100) = 0
f(26.565, 45, 10) = 5
f(26.565, 135, 10) = 15
Eelvex
sumber
Ketika saya melihat beberapa kebingungan tentang formula, ini untuk orang lain untuk menggunakannya:q = ABS[1/5 u^2 Cos[β] Sec[α] Sin[β - α]]
Dr. belisarius

Jawaban:

3

Jawa

Hanya bekerja untuk radian

double q(double a, double b, double u){
          return (Math.abs(((-Math.tan(a)+(Math.tan(b)))*(u*u)*(0.2*(Math.cos(b)*Math.cos(b))))));
      }

Versi Golf (Terima kasih kepada Peter)

double z=u*Math.cos(b);return(Math.tan(b)-Math.tan(a))*z*z/5;

Matematika yang Digunakan:

q=u Cos(B) t
q tan(A) = u sin (B) t - .5 * 10 * t^2

- tan (A)  + tan(B) = 5q/u^2 sec^2 (B)
q =  [ - tan(A) + tan (B) ] u^2
    ---------------------
    sec^2(B)*5
Aman ZeeK Verma
sumber
Ada yang salah dengan ini ... Saya hanya tidak bisa mengetahuinya dengan benar, dapatkah seseorang membantu?
Aman ZeeK Verma
Formula ini tidak benar. Silakan lihat komentar di posting
gnibbler
Namun, kami tidak punya solusi yang sempurna :)
Aman ZeeK Verma
1
perbarui rumus ... tolong tembak beberapa testcas sekarang
Aman ZeeK Verma
Anda dapat menyimpan beberapa karakter - Math.abs tidak perlu, -x + y lebih pendek dari yx, * 0,2 lebih pendek dari / 5, dan Anda memiliki tanda kurung yang tidak perlu. OTOH Anda melewatkan jenis metode pengembalian.
Peter Taylor
2

Haskell ( 37 35)

Berdasarkan solusi Aman:

q a b u=(tan a+tan b)*u*u*cos b^2/5

Saya pikir, masalah ini bukan kode-golf nyata, karena lebih menerapkan formula daripada benar-benar melakukan beberapa algoritma.

FUZxxl
sumber
Mungkin Anda benar, karena formulanya sudah terlalu pendek.
Eelvex
1
Akankah sesuatu seperti /5atau /5.bekerja?
Nabb
Formula ini tidak benar. Silakan lihat komentar di posting gnibbler.
Eelvex
2

Python3 - 65 karakter

from math import*
f=lambda α,β,u:(tan(α)+tan(β))*u*u*.2*cos(β)**2
gnibbler
sumber
Itu tidak sepenuhnya benar. 1) f harus selalu positif dan 2) untuk α> 0 mengembalikan nilai yang lebih besar daripada untuk a = 0, yang tidak mungkin.
Eelvex
Ah, saya menyalin rumus FUZxxl: /
gnibbler