Écrivez une fonction qui prend une liste ou un tableau et renvoie une liste des éléments distincts, triés par ordre décroissant par fréquence.
Exemple:
Donné:
["John","Doe","Dick","Harry","Harry","Doe","Doe","Harry","Doe","John"]
Valeur de retour attendue:
["Doe","Harry","John","Dick"]
Réponses:
APL (14)
Il s'agit d'une fonction qui prend une liste, par exemple:
Explication:
∘.≡⍨⍵
: comparer chaque élément du tableau à chaque autre élément du tableau, donnant une matrice+⌿
: additionne les colonnes de la matrice, donnant combien de fois chaque élément apparaît⍒
: donner des indices de type descendant⍵[
...]
: réorganiser⍵
par les indices donnés∪
: obtenez les éléments uniquesla source
Python 3 -
4743; Python2-4039Pour Python 3:
Pour Python 2:
Démo:
la source
f=lambda n:sorted(set(n),cmp,n.count,1)
39 personnagescmp
et unekey
fonction. Cool.f=lambda n:sorted(set(n),key=n.count)[::-1]
Mathematica, 31
(Avec
n = {"John", "Doe", "Dick", "Harry", "Harry", "Doe", "Doe", "Harry", "Doe", "John"}
)la source
Reverse
, maisSort[GatherBy@n][[-1;;1, 1]]
ça ne marche pas :). Des idées?Mathematica (26
37)Avec
n = {"John", "Doe", "Dick", "Harry", "Harry", "Doe", "Doe", "Harry", "Doe", "John"}
:Mathematica V10 + (26) :
la source
Perl 6 (36 octets, 35 caractères)
»
peut être remplacé par>>
, si vous ne pouvez pas gérer UTF-8. Je suis presque sûr que cela pourrait être plus court, mais laBag
classe est relativement étrange dans son comportement (malheureusement), et n'est pas vraiment complète, car elle est relativement nouvelle (mais elle peut compter des arguments).{}
déclare une fonction anonyme.Exemple de sortie (de Perl 6 REPL):
la source
Rubis: 34
37personnages(édité: la solution précédente de 30 caractères était le corps de la fonction)
la source
f=->a{a.sort_by{|z|-a.count(z)}&a}
. Le&
fait un uniq.GolfScript, 14 caractères (19 comme fonction nommée, également 14 comme programme complet)
Ce code prend un tableau sur la pile et trie ses éléments uniques par ordre décroissant par nombre d'occurrences. Par exemple, si le tableau d'entrée est:
alors le tableau de sortie sera
Remarque: Le code ci-dessus est une simple séquence d'instructions. Pour la transformer en fonction nommée, enveloppez-la entre accolades et affectez-la à un nom, comme dans:
Alternativement, pour transformer le code en un programme complet qui lit une liste à partir de l'entrée standard (en utilisant la notation de liste illustrée ci-dessus) et l'imprime sur la sortie standard,
~
ajoutez et ajoutez`
au code. Le[.
peut être omis dans ce cas (puisque nous savons qu'il n'y aura rien d'autre sur la pile), de sorte que le programme résultant à 14 caractères sera:Comment ça marche?
:a
enregistre une copie du tableau d'origine dans la variablea
pour une utilisation ultérieure..|
calcule l'union définie du tableau avec lui-même, éliminant les doublons comme effet secondaire.{ }$
trie le tableau dédoublonné à l'aide des clés de tri personnalisées calculées par le code à l'intérieur des accolades. Ce code prend chaque élément du tableau, utilise la soustraction du tableau pour le supprimer du tableau d'entrée d'origine enregistré dansa
, et compte le nombre d'éléments restants. Ainsi, les éléments sont triés par ordre décroissant de fréquence.Ps. Voir ici pour la version originale de 30 caractères.
la source
[a\])^
devrait être équivalent à[.;]a\-
. Trier par nombre d'éléments non correspondants est une bonne idée.^
effondre les doublons,-
non. (Et ITYM(
, non)
.) Fonctionnerait ,[a\](\-
mais ne sauverait aucun caractère.R: 23 caractères
Mais il utilise le raccourci pas si sympa de
T
toTRUE
...la source
si cela pouvait convenir ici:
In sql-server
OU
le voir en action
la source
select name from #t1 group by name order by count(*) desc
PHP,
63 6261 caractèresDémo:
la source
array_count_values()
… C'est tout ce que vous avez à utiliser (y comprisarsort()
)array_count_values()
ne supprime pas les valeurs dupliquées, ni les ordonne, comme je peux le voir.array_count_values
plus long?<?$u=array_count_values($_GET);arsort($u);print_r($u);
sont 54 octets à mon avisRuby: 59 caractères
Exemple d'exécution:
la source
Mathematica, 39 caractères
la source
JavaScript (ECMAScript5):
118113 caractèreshttp://jsfiddle.net/mblase75/crg5B/
la source
f=n=>{m={};n.forEach(e=>m[e]=m[e]+1||1);return Object.keys(m).sort((a,b)=>m[b]-m[a])}
. (Actuellement uniquement dans Firefox.)m[n[i]]=-~m[n[i]]
pour incrémenter et vous n'avez pas besoin de {} autour du corps de la boucle.Haskell - 53 personnages
Explication: les deux premières lignes sont des importations nécessaires, la ligne de code suivante est la signature de type (généralement pas nécessaire), la fonction réelle est la dernière ligne. La fonction trie la liste par son ordre naturel, regroupe les éléments égaux en listes, trie la liste des listes par taille décroissante et prend le premier élément de chaque liste.
longueur totale, importations comprises: 120
sans importations mais avec signature de type: 86
fonctionner lui-même: 53
la source
Clojure: 43 caractères
Une fonction:
Démo (en repl):
la source
Perl
pour répondre aux spécifications d'E / S données, j'ai besoin de 120 caractères
code le plus court en prenant un élément par ligne et en imprimant un élément par ligne, je n'ai besoin que de 55 caractères
la source
C #: 111 caractères
(à l'intérieur d'une classe)
Une solution simple utilisant LINQ.
la source
R (22)
En tant que fonction, il faudrait 11 caractères supplémentaires.
Usage:
la source
Scala (71)
Non golfé:
la source
J, 8 octets
Usage
Les noms sont stockés sous forme de tableau de chaînes encadrées.
Explication
la source
CJam, 15 octets (éventuellement non concurrents)
Cela peut utiliser les fonctionnalités CJam après la publication de ce défi. Je suis trop paresseux pour vérifier.
la source