Dada uma lista de pontuações (números inteiros não negativos) pré-classificadas do maior para o menor:
[ 10, 10, 6, 6, 4, 0]
Atribua a cada pontuação uma classificação inteira, começando com 1 e crescente, para que pontuações iguais tenham a mesma classificação (ou seja, estão empatadas):
[ 1, 1, 3, 3, 5, 6 ]
No caso de empates, as fileiras são "puladas", por exemplo, uma vez que a primeira e a segunda maiores pontuações (10 e 10) estão empatadas, ambas têm classificação 1 e a classificação 2 é "pulada", de modo que a terceira maior pontuação ( 6) tem classificação 3.
Envie uma lista de classificações não decrescentes correspondentes às pontuações de entrada.
Exemplos
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
Suponha que todas as pontuações estejam entre 0 e 1.000, inclusive, e a entrada não terá mais que 500 pontuações. A entrada pode estar em qualquer formato que seja conveniente para o seu idioma de escolha (incluindo, sem limitação, STDIN, argumentos para uma função, uma matriz já armazenada em uma variável etc.).
Resultado
Retorno ou armazenar em uma variável da lista resultante ordenada de fileiras, ou escrever para STDOUT de forma legível (por exemplo 1 2 3
, [1,2,3]
, 1\n2\n3\n
e { 1, 2, 3 }
são todos muito bem, 123
não é, por falta de um delimitador). As pontuações de entrada podem ser armazenadas / impressas junto com suas classificações de saída correspondentes, mas isso não é necessário.
Restrições
Você pode usar qualquer biblioteca padrão oferecida por seu idioma. Aplicam-se brechas padrão.
Condições vencedoras
Isso é código-golfe , então o menor programa (em bytes) vence. Em caso de empate, a resposta com mais votos vence.
Notas
Isso se baseia em uma pergunta do Ruby no SO que gerou algumas respostas interessantes, incluindo uma muito curta. Convido você a apresentar suas próprias soluções antes de procurar lá.