Ver Mensaje Individual
  #4 (permalink)  
Antiguo 15/06/2015, 14:06
Avatar de kahlito
kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 21 años, 1 mes
Puntos: 65
Respuesta: Operación matemática, calcular regla de tres o porcentaje a partir de un t

Cita:
Iniciado por PHPeros Ver Mensaje
En toda regla de tres, siempre debe haber una constante de proporcionalidad. Como no siempre dará un valor entero, puedes hacer un redondeo o asociar los puntos con rangos numéricos.
Hola PHPeros, la verdad es que he estado intentando encontrar en este caso la constante de proporcionalidad y he sido incapaz, lo máximo que he visto cerca ha sido 0,04 y en otros casos ni si quiere la he encontrado, es decir que me parecía que no tenía en este caso, supongo que no he seguido el camino correcto.

Cita:
Iniciado por AlvaroG Ver Mensaje
Lo que necesitás es llevar tu número de participantes a una escala del 1 al 10. Creo que la palabra adecuada para esto es "normalizar".

posición 1 = 1
posición 230 = 10

con lo que podemos tomar cada paso, o punto de quiebre, en 23 (230/10):
1-23 = 1
24-46 = 2
...
208-230 = 10

podemos usar una fórmula entonces:

puntaje = ceil(pos/23), o ceil(posicion*total_participantes/puntaje_máximo)

Si posición = 25, entonces puntaje = ceil(25/23) ~ ceil(1.1)= 2
Si posición = 100, entonces puntaje = ceil(100/23) ~ ceil(4.3) = 5

esta solución tiene dos problemas, fácilmente ajustables:
- da el puntaje máximo a la posición 230, en vez de a la 1
- en vez de dar el puntaje máximo a la posición máxima, se lo da a un rango. Esto lo podemos arreglar con floor() en vez de ceil()

Obviamente este proceso tiene un problema, que es
Hola AlvaroG, he aplicado tu ejemplo a la inversa haciendo una tabla de mayor a menor pero luego me he vuelto a hacer un lio en las fórmulas ya que las tuyas eran inversas y por más que lo intento me he ido perdiendo... sin embargo tu ejemplo me sirve de mucho ya que tengo una tabla por tiempos de minutos en la que tendré que hacer algo parecido, es más ya hice una parecida hace tiempo pero al ser minutos y segundos aún no es tan exacta.

Por otro lado he recibido esta explicación y fórmula, que creo que se adapta perfectamente a mi ejemplo e incluso a otros que voy a usar en un futuro.

Cita:
El menor puntaje es 1 y, el mayor, 10. Esto significa que todos tienen 1 punto y que los otros 9 puntos se obtienen en forma inversamente proporcional al puesto que ocupen entre los 230, de tal forma que quien ocupe el puesto 1 obtiene 9 puntos adicionales y quien ocupe el puesto 230, cero puntos adicionales. O sea, puntaje adicional reciben 229 participantes (el 230 no recibe) en forma proporcional a (230-n):

P=1+9*(230-n)/229
Creo que esta parte está resuelta, aún así voy a seguir probando las diferentes maneras expuestas ya que como digo tengo que hacer nuevas fórmulas para tablas con tiempos, km y algun parámetro más y me interesa aprenderlo de la mejor manera.

Muchas gracias por vuestra ayuda, saludos