Dada una lista de puntuaciones (enteros no negativos) ordenadas de mayor a menor:
[ 10, 10, 6, 6, 4, 0]
Asigne a cada puntaje un rango entero, comenzando con 1 y ascendiendo, de modo que los puntajes iguales tengan el mismo rango (es decir, estén empatados):
[ 1, 1, 3, 3, 5, 6 ]
En el caso de los empates, los rangos se "omiten", por ejemplo, dado que el primer y el segundo puntaje más alto (10 y 10) están empatados, ambos tienen el rango 1 y el rango 2 se "omite", por lo que el tercer puntaje más alto ( 6) tiene rango 3.
Produzca una lista de rangos no descendentes correspondientes a los puntajes de entrada.
Ejemplos
In: 10 10 6 6 4 0
Out: 1 1 3 3 5 6
In: 10 9 8
Out: 1 2 3
In: 0 0 0
Out: 1 1 1
In: 16 15 15 12 11 11 10 9 9 9 8 2 2 2 0
Out: 1 2 2 4 5 5 7 8 8 8 11 12 12 12 15
Entrada
Suponga que todos los puntajes estarán entre 0 y 1,000 inclusive, y la entrada no tendrá más de 500 puntajes. La entrada puede estar en cualquier formato que sea conveniente para el idioma que elija (incluidos, entre otros, STDIN, argumentos de una función, una matriz ya almacenada en una variable, etc.).
Salida
Retorno o almacenar en una variable de la lista resultante ordenada de filas, o escribir a la salida estándar de una forma legible por humanos (por ejemplo 1 2 3, [1,2,3], 1\n2\n3\n, y { 1, 2, 3 }son todos muy bien, 123no es, a falta de un delimitador). Los puntajes de entrada pueden almacenarse / imprimirse junto con sus rangos de salida correspondientes, pero eso no es obligatorio.
Restricciones
Puede usar cualquier biblioteca estándar que ofrezca su idioma. Se aplican lagunas estándar.
Condiciones ganadoras
Este es el código de golf , por lo que gana el programa más pequeño (en bytes). En caso de empate, la respuesta con más votos gana.
Notas
Esto se basa en una pregunta de Ruby sobre SO que generó algunas respuestas interesantes, incluida una muy breve. Te animo a que encuentres tus propias soluciones antes de buscar allí.