Golf de física: tiro inclinado

9

"Y ahora para algo completamente diferente."

Se dispara a un pájaro enojado en un ángulo β con respecto a la horizontal a una velocidad u. El terreno es empinado, inclinado en un ángulo α. Encuentre la distancia horizontal q recorrió el pájaro antes de tocar el suelo.

Disparo

Haga una función f (α, β, u) que devuelva la longitud q : la distancia horizontal que recorrió el ave antes de tocar el suelo.

Restricciones y notas:

  • -90 <α <90.
  • 0 <β <180.
  • α es siempre más pequeño que β.
  • 0 <= u <10 ^ 9.
  • Suponga la aceleración debido a la gravedad g = 10.
  • Puede usar radianes en lugar de grados para α, β.
  • Las dimensiones de u son irrelevantes siempre que sean consistentes con gyq.
  • Sin resistencia al aire ni nada demasiado elegante.

El código más corto gana.

Vea el artículo de wikipedia sobre movimiento de proyectiles para algunas ecuaciones.

Muestras:

f(0, 45, 10) = 10
f(0, 90, 100) = 0
f(26.565, 45, 10) = 5
f(26.565, 135, 10) = 15
Eelvex
fuente
Como vi cierta confusión sobre la fórmula, aquí está para que otros la usen:q = ABS[1/5 u^2 Cos[β] Sec[α] Sin[β - α]]
Dr. belisarius

Respuestas:

3

Java

Funciona solo para radianes

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ón Golfed (Gracias a Peter)

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

Matemáticas utilizadas:

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
fuente
Hay algo mal con esto ... No puedo entenderlo correctamente, ¿puedo ayudar?
Aman ZeeK Verma
Esta fórmula no es correcta. Por favor, vea el comentario en la publicación de
gnibbler
Aún así, no tenemos ninguna solución perfecta :)
Aman ZeeK Verma
1
actualizó la fórmula ... dispare algunos casos de prueba ahora por favor
Aman ZeeK Verma
Puede guardar algunos caracteres: Math.abs es innecesario, -x + y es más corto como yx, * 0.2 es más corto como / 5 y tiene paréntesis innecesarios. OTOH, te falta el tipo de retorno del método.
Peter Taylor
2

Haskell ( 37 35)

Basado en la solución de Aman:

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

Creo que este problema no es un verdadero código de golf, ya que se trata más de implementar una fórmula que de hacer algún algoritmo.

FUZxxl
fuente
Quizás tengas razón, ya que la fórmula ya es demasiado corta.
Eelvex
1
¿Algo le gustaría /5o /5.funcionaría?
Nabb
Esta fórmula no es correcta. Por favor, vea el comentario en la publicación de gnibbler.
Eelvex
2

Python3 - 65 caracteres

from math import*
f=lambda α,β,u:(tan(α)+tan(β))*u*u*.2*cos(β)**2
gnibbler
fuente
Eso no es del todo correcto. 1) f siempre debe ser positivo y 2) para α> 0 devuelve un valor mayor que para a = 0, lo que no es posible.
Eelvex
Ah bueno, copié la fórmula de FUZxxl: /
gnibbler