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

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

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.


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

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.