Escreva uma função que pegue uma lista ou matriz e retorne uma lista dos elementos distintos, classificados em ordem decrescente por frequência.
Exemplo:
Dado:
["John","Doe","Dick","Harry","Harry","Doe","Doe","Harry","Doe","John"]
Valor de retorno esperado:
["Doe","Harry","John","Dick"]
Respostas:
APL (14)
Esta é uma função que leva uma lista, por exemplo:
Explicação:
∘.≡⍨⍵
: compare cada elemento da matriz com outro elemento da matriz, fornecendo uma matriz+⌿
: soma as colunas da matriz, fornecendo quantas vezes cada elemento ocorre⍒
: fornece índices de ordem descendente⍵[
...]
: reordenar⍵
pelos índices fornecidos∪
: obtenha os elementos exclusivosfonte
Python 3 -
4743; Python2-4039Para Python 3:
Para Python 2:
Demo:
fonte
f=lambda n:sorted(set(n),cmp,n.count,1)
39 caracterescmp
função não-None e umakey
função. Legal.f=lambda n:sorted(set(n),key=n.count)[::-1]
Mathematica, 31
(Com
n = {"John", "Doe", "Dick", "Harry", "Harry", "Doe", "Doe", "Harry", "Doe", "John"}
)fonte
Reverse
, masSort[GatherBy@n][[-1;;1, 1]]
não funciona :). Alguma ideia?Mathematica (26
37.)Com
n = {"John", "Doe", "Dick", "Harry", "Harry", "Doe", "Doe", "Harry", "Doe", "John"}
:Mathematica V10 + (26) :
fonte
Perl 6 (36 bytes, 35 caracteres)
»
pode ser substituído por>>
, se você não puder lidar com UTF-8. Tenho quase certeza de que isso poderia ser mais curto, mas aBag
classe é relativamente estranha em seu comportamento (infelizmente) e não é realmente completa, pois é relativamente nova (mas pode contar argumentos).{}
declara uma função anônima.Saída de amostra (do Perl 6 REPL):
fonte
Ruby: 34
37.personagens(editado: a solução anterior de 30 caracteres era o corpo da função)
fonte
f=->a{a.sort_by{|z|-a.count(z)}&a}
. O&
faz um uniq.GolfScript, 14 caracteres (19 como função nomeada, também 14 como programa completo)
Esse código pega uma matriz na pilha e classifica seus elementos exclusivos em ordem decrescente pelo número de ocorrências. Por exemplo, se a matriz de entrada for:
então a matriz de saída será
Nota: O código acima é uma sequência simples de instruções. Para transformá-lo em uma função nomeada, envolva-o entre chaves e atribua-o a um nome, como em:
Como alternativa, para transformar o código em um programa completo que leia uma lista da entrada padrão (usando a notação de lista mostrada acima) e a imprima na saída padrão,
~
adicione e acrescente`
ao código. O[.
pode ser omitido nesse caso (já que sabemos que não haverá mais nada na pilha), para que o programa de 14 caracteres resultante seja:Como funciona?
:a
salva uma cópia da matriz original na variávela
para uso posterior..|
calcula a união do conjunto da matriz consigo, eliminando duplicatas como efeito colateral.{ }$
classifica a matriz deduplicada usando as chaves de classificação personalizadas calculadas pelo código dentro dos chavetas. Esse código utiliza cada elemento da matriz, usa a subtração da matriz para removê-lo da matriz de entrada original salvaa
e conta o número de elementos restantes. Assim, os elementos são classificados em ordem decrescente de frequência.Ps. Veja aqui a versão original de 30 caracteres.
fonte
[a\])^
deve ser equivalente a[.;]a\-
. Classificar por número de elementos não correspondentes é uma boa ideia.^
recolhe duplicados,-
não. (E ITYM(
, não)
.) Funcionaria ,[a\](\-
mas não salvaria nenhum personagem.R: 23 caracteres
Mas ele usa o atalho não tão bom de
T
paraTRUE
...fonte
se isso poderia caber aqui:
In sql-server
OU
vê-lo em ação
fonte
select name from #t1 group by name order by count(*) desc
PHP,
63 6261 caracteresDemo:
fonte
array_count_values()
... Isso é tudo que você tem que usar (inclusivearsort()
)array_count_values()
não exclui valores duplicados nem os ordena, como posso ver.array_count_values
mais longo?<?$u=array_count_values($_GET);arsort($u);print_r($u);
são 54 bytes na minha opiniãoRuby: 59 caracteres
Exemplo de execução:
fonte
Mathematica, 39 caracteres
fonte
JavaScript (ECMAScript5):
118113 caractereshttp://jsfiddle.net/mblase75/crg5B/
fonte
f=n=>{m={};n.forEach(e=>m[e]=m[e]+1||1);return Object.keys(m).sort((a,b)=>m[b]-m[a])}
. (Atualmente apenas no Firefox).m[n[i]]=-~m[n[i]]
para incrementar e não precisa de {} s no corpo do loop.Haskell - 53 Personagens
Explicação: as duas primeiras linhas são importações necessárias, a próxima linha de código é a assinatura do tipo (geralmente não é necessária), a função real é a última linha. A função classifica a lista por sua ordem natural, agrupa elementos iguais em listas, classifica a lista de listas por tamanho decrescente e pega o primeiro elemento de cada lista.
comprimento total incluindo importações: 120
sem importações mas com assinatura de tipo: 86
função em si: 53
fonte
Clojure: 43 caracteres
Função:
Demo (em substituição):
fonte
Perl
para atender às especificações de E / S, preciso de 120 caracteres
código mais curto puro, pegando um item por linha e imprimindo um item por linha, preciso apenas de 55 caracteres
fonte
C #: 111 caracteres
(dentro de uma classe)
Uma solução simples usando o LINQ.
fonte
R (22)
Como função, seriam necessários mais 11 caracteres.
Uso:
fonte
Scala (71)
Ungolfed:
fonte
J, 8 bytes
Uso
Os nomes são armazenados como uma matriz de seqüências de caracteres em caixa.
Explicação
fonte
CJam, 15 bytes (possivelmente não concorrente)
Isso pode usar os recursos do CJam após o lançamento deste desafio. Estou com preguiça de verificar.
fonte