Você recebe uma lista não vazia de números inteiros positivos, por exemplo
[6 2 9 7 2 6 5 3 3 4]
Você deve classificar esses números pelo seu valor, mas, como é habitual nas tabelas de classificação, se houver um empate, todos os números empatados obterão a mesma classificação e um número apropriado de classificações será ignorado. O resultado esperado para a lista acima seria, portanto,
[3 9 1 2 9 3 5 7 7 6]
Por exemplo, o valor mais alto na entrada foi 9
, então isso se torna um 1
(primeiro rank). O terceiro valor mais alto é 6
, então ambos 6
se tornam 3
e a classificação 4
é ignorada completamente.
Regras
Você pode usar qualquer formato de lista simples, conveniente e inequívoco para entrada e saída. A primeira / menor classificação na saída deve sempre ser 1 .
Você pode escrever um programa ou uma função e usar qualquer um dos nossos métodos padrão de recebimento de entrada e saída.
Você pode usar qualquer linguagem de programação , mas observe que essas brechas são proibidas por padrão.
Isso é código-golfe , então a resposta mais curta e válida - medida em bytes - vence.
Casos de teste
[8] -> [1]
[1 15] -> [2 1]
[18 14 11] -> [1 2 3]
[11 16 14 8] -> [3 1 2 4]
[15 15 15 15 15] -> [1 1 1 1 1]
[10 2 5 4 15 5] -> [2 6 3 5 1 3]
[5 5 10 10 5 11 18] -> [5 5 3 3 5 2 1]
[2 4 9 4 17 9 17 16] -> [8 6 4 6 1 4 1 3]
[11 17 19 17 10 10 15 3 18] -> [6 3 1 3 7 7 5 9 2]
[2 11 4 8 3 3 12 20 4 18] -> [10 4 6 5 8 8 3 1 6 2]
[12 6 10 2 19 19 6 19 8 6 18] -> [5 8 6 11 1 1 8 1 7 8 4]
[5 6 14 19 13 5 19 9 19 9 9 19] -> [11 10 5 1 6 11 1 7 1 7 7 1]
[9 2 12 3 7 11 15 11 6 8 11 17 11] -> [8 13 3 12 10 4 2 4 11 9 4 1 4]
[3 5 15 7 18 5 3 9 11 2 18 1 10 19] -> [11 9 4 8 2 9 11 7 5 13 2 14 6 1]
[6 11 4 19 14 7 13 16 10 12 7 9 7 10 10] -> [14 6 15 1 3 11 4 2 7 5 11 10 11 7 7]
[11 20 11 1 20 16 11 11 4 8 9 7 11 14 10 14] -> [6 1 6 16 1 3 6 6 15 13 12 14 6 4 11 4]
[4 7 15 2 3 2 3 1 14 2 10 4 7 6 11 2 18] -> [9 6 2 13 11 13 11 17 3 13 5 9 6 8 4 13 1]
[5 1 17 7 1 9 3 6 9 7 6 3 2 18 14 4 18 16] -> [12 17 3 8 17 6 14 10 6 8 10 14 16 1 5 13 1 4]
[5 6 8 10 18 13 20 10 7 1 8 19 20 10 10 18 7 2 1] -> [16 15 11 7 4 6 1 7 13 18 11 3 1 7 7 4 13 17 18]
[12 17 8 2 9 7 15 6 19 5 13 16 14 20 10 11 18 4 3 1] -> [9 4 13 19 12 14 6 15 2 16 8 5 7 1 11 10 3 17 18 20]
fonte
indexOf
função. Acredito que, para entradas não classificadas, existem alternativas mais curtas em muitos idiomas.Respostas:
Solução alternativa no Excel para regras tolas em relação às entradas do mouse no Exchange Code Stack Exchange: (WESRRMICGSE) 28 bytes
rank(RC[1],r1c1:r1024:c1024)
Lista de entrada como csv (
10,23,34,2,
) no compilador depois de inserir a fonte. sem aspas, sem colchetes, vírgula à direita.O WESRRMICGSE é exatamente como a programação no Excel, exceto que você pode omitir o sinal inicial '=' para salvar um byte. A diferença na funcionalidade vem do fato de o WESRRMICGSE arrastar a fórmula para baixo para copiar o código automaticamente e fornecer diferentes saídas fornecidas com uma única entrada inteira. fornecida uma lista como entrada, essa lista entra na coluna B (coluna de entrada) e a fórmula é desativada automaticamente para corresponder ao número de entradas. (por exemplo: a entrada 34,21,45, 'arrastaria' a fórmula para baixo em 2 células, para um total de 3 células com a fórmula).
Edit: Eu nunca esperei que esta resposta fosse popular. Uau!
fonte
MATL , 4 bytes
Experimente online! Ou verifique todos os casos de teste .
Explicação
fonte
Python 2, 41 bytes
Para cada valor, encontre seu índice na lista classificada por ordem decrescente. Para fazer com que o maior valor dê 1 em vez de 0, usamos um elemento "infinito" extra da própria lista, pois o Python 2 trata as listas como maiores que os números.
Uma solução mais direta é de 42 bytes e também funciona no Python 3.
Para cada elemento, conta o número de elementos menores, adicionando 1 para mudar para 1-indexado.
fonte
Geléia , 5 bytes
Experimente online!
Como funciona
fonte
R, 24
2520bytesUsa a função de classificação padrão com o método de empates "min" sobre o vetor negado.
cat
adicionado para enviá-lo para STDOUT. Guardado 1 graças a @GuiseppeExemplo
fonte
cat
para que seja um programa completo.rank(-a,,'min')
aceitável onde a é a entrada da lista em forma de vetor?function(a)rank(-a,,'min')
."mi"
vez de"min"
.cat
? Se a apresentação tinha sidofunction(a)rank(-a,,'mi')
que possa ser considerada suficiente e a saída do programa é idêntico aorank(-scan(),,'mi')
PowerShell v2 +,
4341 bytesDesenvolvido de forma independente, mas vejo que esse é o mesmo algoritmo da solução Python do @ xnor , então / shrug.
Recebe entrada como argumentos individuais da linha de comando (ou seja, uma lista separada por espaços). Saída (formatação padrão) é uma nova linha entre elementos.
Para cada elemento na lista de entrada,
sort
é a lista de entrada em-d
ordem de tendência, pega o.indexOf()
elemento atual e adiciona1
. Observe a matriz explícita convertida@(...)
para contabilizar uma entrada de um dígito. Os números resultantes são deixados no pipeline e a saída está implícita.Economizou 2 bytes graças a @Matt!
Exemplo
fonte
sort -d
não funcionar para você? Isso é inequívoco para mim.-Descending
e-Debug
são ambíguos. Mas no shell direto no Win8.1 e no shell e ISE no Win10 funciona bem. Esta não seria a primeira vez que minha instalação específica do Win8.1 é pateta ...: - / Obrigado pelo golfe!$args|%{@($args|sort -d).indexof($_)+1}
ele é mais curto, mas eu não tive uma boa olhada para saber se ele funciona$args
funciona como entrada para o bloco de scripts do loop{...}
, como se você estivesse usando umfilter
oufunction
.Oitava, 15 bytes
Porta da minha resposta MATL para Octave. Também funciona no Matlab R2016b.
O código define uma função anônima. Para chamá-lo, atribua-o a uma variável. Experimente em Ideone .
fonte
JavaScript (ES6),
3836 bytesEditar: salvou 2 bytes graças a @ETHproductions.
fonte
.map
FTW ;-)a=>a.map(e=>a.map(d=>r+=e<d,r=1)&&r)
Geléia , 5 bytes
TryItOnline!
Quão?
fonte
1+(+/@:<)"0 1~
>€µS‘
ou menos<@€µS‘
(@
inverte argumentos para o<
operador). O J~
está implícito na cadeia à esquerda doµ
, que é a separação monádica (e não diádica) e<
vetoriza se o (s) argumento (s) é (são) lista (s).Perl 6 ,
4226 bytesEncontre o primeiro índice
:k
em uma[R,]
lista classificada invertidaConte os valores maiores e adicione um
fonte
JavaScript,
8749 bytesf=a=>a.slice().map(function(v){return a.sort(function(a,b){return b-a}).indexOf(v)+1 })
a=>[...a].map(v=>a.sort((a,b)=>b-a).indexOf(v)+1)
Obrigado Conor O'Brien e ETHproductions!
fonte
v=>a.sort((a,b)=>b-a).indexOf(v)+1
..slice()
, porque.map
opera em uma cópia da matriz.f=
também.[18,13,18]
retornos[1,1,2]
em vez de[1, 3, 1]
a.sort()
armazena a matriz classificadaa
. Mas você pode mudara.slice()
para[...a]
economizar alguns bytes.Mathematica,
44 bytes42 bytes40 bytes
é o caractere de uso privado de 3 bytesU+F4A1
( página de documentos da Wolfram )Edit: Obrigado ao JHM pela economia de bytes.
fonte
{10,2,5,4,15,5}
(a saída{2,6,3,5,1,3}
não deve ser{2,5,3,4,1,3}
. Observe que4
deve ser ignorado porque existem dois5
s na entrada).x
e#
(efetivamente se livrar dos parênteses):xPosition[SortBy[x,-#&],#][[1,1]]&/@x
.Pyke, 6 bytes
Experimente aqui!
fonte
J ,
148 bytesQuão?
Solução anterior
fonte
1+1#.</~
. O somatório em linha é realizado usando a conversão de base 1. Outra alternativa é1+\:~i.]
que também tem 8 bytes.Haskell, 28 bytes
Apenas algumas compreensões de lista.
fonte
Maravilha , 28 bytes
Uso:
Mapeie sobre a matriz de entrada com uma função que adiciona 1 ao primeiro índice do item em uma versão ordenada descendente da entrada.
fonte
Dyalog APL , 7 bytes
⊢
argumentos⍳⍨
índices em⍒
os índices que classificariam o argumento descendente⊃¨
cada um escolhido⊂
todo o argumentoTryAPL online!
fonte
Mathematica, 37 bytes
Uma função pura que classificará sua entrada, conforme as regras do problema. Ex:
fonte
Água-viva , 15 bytes
Experimente online!
Explicação
Ainda não parece ser uma boa maneira de encontrar o índice de um valor em uma lista no Jellyfish, então isso usa a abordagem de contar quantos valores são maiores que o atual e incrementar o resultado. Isso é amplamente feito através da construção de uma função unária que calcula esse valor para um determinado elemento.
Isso cria uma versão encadeada do operador de comparação; portanto, se você fornecer um número inteiro e uma lista, ele retornará uma lista de resultados de comparação entre esse número inteiro e cada elemento da lista.
Isso atualiza o argumento do lado direito da função anterior com a lista de entradas. Portanto, o resultado é uma função unária que pega um número inteiro e fornece a lista de resultados de comparação com a entrada do programa.
Aqui
/+
está a redução por adição, o que significa que é simplesmente uma função "somar esta lista".&
compõe isso na função anterior, então agora temos uma função unária que conta quantos valores na entrada são maiores que esse número inteiro.Também compomos a função de incremento para isso.
Finalmente, também encadeamos essa função, para que ela seja aplicada automaticamente a cada número inteiro de uma lista passada para ela. Devido ao layout do código, também
i
é considerado a entrada dessa função, para que isso calcule a saída desejada.Finalmente, isso imprime o resultado.
fonte
brainfuck, 124 bytes
Formatado:
Isso foi projetado para implementações de 8-brainfuck. Entrada e saída são via valores de bytes .
Experimente online.
Para cada elemento, isso conta o número de elementos maior que ele e imprime o resultado mais um. Isso é feito incrementando todos os elementos até que o elemento atual seja igual a zero, atualizando o resultado sempre que outro elemento se torna zero antes do elemento atual.
A fita é dividida em nós de 4 células,
b c 0 0
onde
c
está o elemento eb
é um sinalizador de navegação negativo para o elemento atual, caso contrário, um.O resultado e uma cópia do elemento atual são mantidos à esquerda da matriz.
fonte
Java, 215 bytes
Explicação:
Muito auto-explicativo.
Basicamente, para cada número inteiro na matriz, ele verifica quantos são maiores que ele e depois imprime a nova matriz com as classificações.
Sinto muito, isso não é muito conciso, mas é a minha primeira tentativa em um desses e não vi uma entrada para java. Tenho certeza de que pode ser jogado mais.
Ele pode ser executado apenas fazendo referência ao método estático e passando uma matriz. Não achei que fosse necessário escrever a função principal, mas se for, farei isso no futuro.
fonte
r = new
) #for (
?PHP, 101 bytes
Deve haver uma maneira mais curta.
A função recebe a entrada como matriz de números inteiros, substitui a variável de entrada com as classificações como seqüências numéricas.
Uso:
$a=[1,2,4,2,2,3];f($a);print_r($a);
fonte
Ruby,
4540 bytesfonte
[10, 2, 5, 4, 15, 5]
me dá saída[2, 5, 3, 4, 1, 3]
quando deveria[2, 6, 3, 5, 1, 3]
- acho que para corrigir que você acabou de remover.uniq
- salvando 5 bytes!Clojure,
4844 bytesAtualização: usando em
for
vez demap
Simplesmente filtra cada valor menor que o atual, conta o comprimento da lista e aumenta em um.
fonte
Tcl , 54 bytes
Experimente online!
fonte
PHP, 84 bytes
Uso: Passe a função r sua matriz de números inteiros e ela retornará a matriz correspondente de números inteiros classificados.
Passando nos testes aqui.
fonte
Perl 5, 23 +2 (-ap)
Experimente online
fonte
K (oK) , 11 bytes
Solução:
Experimente online!
Exemplos:
Explicação:
Procure a posição da lista original na lista classificada e adicione uma.
fonte