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

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

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.


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

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.