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.