Écrivez un extrait pour calculer le mode (nombre le plus courant) d'une liste d'entiers positifs.
Par exemple, le mode de
d = [4,3,1,0,6,1,6,4,4,0,3,1,7,7,3,4,1,1,2,8]
est 1
, car il se produit au maximum 5 fois.
Vous pouvez supposer que la liste est stockée dans une variable telle que d
et a un mode unique.
par exemple: Python, 49
max(((i,d.count(i))for i in set(d)), key=lambda x:x[1])
Il s'agit de code-golf , donc la solution la plus courte en octets l'emporte.
code-golf
array-manipulation
garg10may
la source
la source
d,
etkey=
.defaultdict(int)
ouCounter
. Quelque chose commeCounter(d).most_common()[0]
.Matlab / Octave,
75 octetsSans surprise, il existe une fonction intégrée pour trouver les modes. En tant que fonction anonyme:
Cela renvoie l'élément le plus courant dans le vecteur d'entrée avec des liens allant à la plus petite valeur.
Enregistré 2 octets grâce à Dennis!
la source
help mode
): "Si deux ou plusieurs valeurs ont la même fréquence," mode "renvoie la plus petite."@mode
.Pyth - 6
Essayez-le en ligne.
Attend une entrée sur stdin comme
[4,3,1,0,6,1,6,4,4,0,3,1,7,7,3,4,1,1,2,8]
. Les liens sont résolus par la dernière occurrence car Python effectue des tris stables.Trie la liste en comptant la valeur de la liste, puis imprime le dernier numéro de la liste.
Q
pourrait être remplacé pard
si vous avez initialiséd
pour contenir la valeur avant par exemple=d[4 3 1 0 6 4 4 0 1 7 7 3 4 1 1 2 8)
Pseudo-code Python-esque:
Explication complète:
Pyth de
orderby
runs exactement comme Pythonsorted
avec leorderby
premier argument de » étant l'key
argument de .la source
Mathematica, 25 octets
ou
Comme dans le défi, cela attend que la liste soit stockée
d
.ou ... 15 octets
Bien sûr, Mathematica ne serait pas Mathematica s'il n'avait pas de fonction intégrée:
Commonest
renvoie une liste de tous les éléments les plus courants (en cas d'égalité), et#&@@
est un golféFirst@
.la source
Rubis, 22 octets
Fondamentalement, un port de ma réponse Mathematica, sauf que Ruby a un direct,
max_by
donc je n'ai pas besoin de trier d'abord.la source
d.max_by d.method:count
mais c'est environ un million (ou même pas deux) octets de plus. Pourtant, il convient de noter que c'est possible.R,
3325 octetsMerci @Hugh pour le raccourcissement de l'aide:
L'original:
Cela calcule la fréquence de chaque élément du vecteur
d
, puis renvoie le nom de la colonne contenant la plus grande valeur. La valeur renvoyée est en fait une chaîne de caractères contenant le nombre. Cela ne disait nulle part que ce n'était pas bien, alors ...Toutes les suggestions pour raccourcir ceci sont les bienvenues!
la source
names(sort(-table(d))[1])
CJam,
1110 octetsSuppose le tableau dans une variable appelée
A
. Il s'agit essentiellement de trier le tableau en fonction de l'occurrence de chaque numéro du tableau, puis de sélectionner le dernier élément du tableau.Exemple d'utilisation
Sortie
1 octet économisé grâce à Dennis!
Essayez-le en ligne ici
la source
A{A\-,}$0=
est un octet plus court.Ae`$e_W=
$e`$e_W=
Powershell 19
(cela suppose que le tableau est déjà allumé
$d
)la source
J - 12 caractères
Fonction anonyme. Trie la liste du plus courant au moins courant, en prenant le premier élément.
0{
D'abord~.
Objets uniques\:
Trié par#/.~
FréquencesEssayez-le par vous-même.
la source
JavaScript (ES6) 51
Une seule expression de ligne utilisant la variable préchargée d. Triez le tableau par fréquence, puis récupérez le premier élément.
Effet secondaire désagréable, le tableau d'origine est modifié
Comme d'habitude, utilisez .map au lieu de .reduce car il est globalement 1 caractère plus court. Avec .reduce, c'est presque une solution propre et sans golf.
Enfin, une solution utilisant une fonction, ne changeant pas le tableau d'origine et sans globaux (62 octets):
Test dans la console FireFox / FireBug
Sortie 1
Le tableau d devient:
la source
Python - 32
Pour être honnête, ne voyez aucune solution à 18 caractères dans le futur.
EDIT: Je suis corrigé et impressionné.
la source
JavaScript, ES6, 71 octets
Un peu long, on peut beaucoup jouer au golf.
Cela crée une fonction
f
qui peut être appelée commef([1,1,1,2,1,2,3,4,1,5])
et qui reviendra1
.Essayez-le sur votre dernière console Firefox.
la source
f=a=>(c=b=[],a.map(x=>b[x]++-1?0:b[x]=1),b.map((x,i)=>c[x]=i),c.pop())
est 1 octet plus court.05AB1E , 3 octets
(non concurrentiel - la question est antérieure à la langue)
Explication:
Si vous souhaitez stocker le tableau dans une variable au lieu d'utiliser l'entrée, poussez simplement le tableau vers la pile au début du programme.
Essayez-le en ligne!
la source
C # - 49
Je ne peux pas vraiment rivaliser avec C # mais bon:
En supposant que
d
le tableaud.GroupBy(i=>i).OrderBy(a=>a.Count()).Last().Key;
la source
bash -
2927 caractèresEn l'utilisant:
c'est-à-dire "1" est le mode, et il apparaît cinq fois.
la source
sort|uniq -c|sort -nr|sed q
enregistre quelques personnagesGolfScript, 10 octets
À partir de cette réponse, j'ai écrit à Tips for golfing in GolfScript . Attend l'entrée dans un tableau nommé
a
, renvoie le résultat sur la pile. (Pour lire l'entrée d'un tableau sur la pile, ajoutez:
11 octets; pour lire l'entrée depuis stdin (au format[1 2 1 3 7]
), ajoutez également~
12 octets.)Ce code fonctionne en itérant sur le tableau d'entrée, en soustrayant chaque élément du tableau d'origine et en comptant le nombre d'éléments restants. Il est ensuite utilisé comme clé pour trier le tableau d'origine et le premier élément du tableau trié est renvoyé.
Démo en ligne.
Ps. Merci à Peter Taylor de m'avoir signalé ce défi .
la source
Dyalog APL, 12 caractères
d[⊃⍒+/∘.=⍨d]
∘.=⍨d
est le même qued∘.=d
, produit extérieur réflexif de=
. Il crée une matrice booléenne comparant chaque paire d'éléments dansd
.+/
additionne cette matrice le long d'un des axes et produit un vecteur.⍒
classe le vecteur, c'est-à-dire le trie par indices. (Comme le suggèrent les glyphes, les⍒
notes sont décroissantes et⍋
se classeraient par ordre croissant.)⊃
prend le premier indice de la notation - l'indice du plus grand élément ded
.d[...]
renvoie cet élément.la source
+/∘.=⍨d
compte pour chaque élément ded
.⊢∘≢⌸d
compte pour chaque élément de∪d
, de sorte que les indices ne correspondent pas à ceux ded
. Contre -exemple :d←1 1 2 2 2
. Pour le faire fonctionner:(∪d)[⊃⍒⊢∘≢⌸d]
ou(⊃⍒⊢∘≢⌸d)⊃∪d
.Perl 6 , 21 octets
Exemple:
S'il y a une cravate, elle imprimera la plus grande de celles qui ont noué.
La
.Bag
méthode sur une liste ou un tableau crée un hachage quantifié qui associe le nombre total de fois où une valeur donnée a été vue à cette valeur.La
.invert
méthode crée une liste des paires dans le sac avec la clé et la valeur échangées. (La raison pour laquelle nous appelons cela est pour la prochaine méthode pour faire ce que nous voulons)La
.max
méthode sur une liste de paires renvoie la plus grande paire en comparant les clés en premier et dans le cas d'une égalité en comparant les valeurs.(C'est parce que c'est ainsi que
multi infix:<cmp>(Pair:D \a, Pair:D \b)
détermine ce qui est le plus grand)La
.value
méthode renvoie la valeur de la paire. (Cela aurait été la clé que nous recherchions s'il n'y avait pas eu l'.invert
appel plus tôt)Si vous souhaitez renvoyer toutes les valeurs liées dans le cas d'une égalité:
La
.classify
méthode retourne une liste de paires où les clés doivent appeler le lambda Quel que soit*.value
avec chacune des paires.Ensuite, nous appelons
.max
pour obtenir la plus grande paire.Un appel pour
.value
nous obtenir les paires originales du sac (une seule dans ce cas)Ensuite, nous utilisons
>>.key
pour appeler la.key
méthode sur chaque paire de la liste, afin de nous retrouver avec une liste des valeurs les plus vues.la source
Java 8: 184 octets
L'entrée A doit être de type
Integer[]
. Remarquejava.util.*
etjava.util.stream.*
doivent être importés, mais dans l'esprit oneliner ils sont laissés de côté.la source
(i->i,Collectors.counting())
.Outils Bash + Unix, 62 octets
Attend le tableau dans le STDIN. Le format d'entrée ne compte pas, tant que les nombres sont des entiers non négatifs.
Modifié: caractère générique échappé dans l'argument grep. Maintenant, il peut être exécuté en toute sécurité dans des répertoires non vides. Merci au manatwork.
la source
[0-9]*
peut être étendu aux noms de fichiers correspondants.'
l'argument dansgrep
.Perl, 27 octets
Renvoie la dernière valeur la plus courante en cas d'égalité.
la source
PHP,
5350 octetsCourez comme ceci:
Tweaks
d
la source
Java 8, 83 octets
d
doit être unCollection<Integer>
.Si
Collections
peut être importé statiquement:59 octets
la source
Haskell 78
Si les importations sont ignorées, c'est 45 .
la source
maximumBy
au lieu delast.sortBy
. Le nouveau code deviendraitg=head.maximumBy(comparing length).group.sort
.g=
. 2.) Vous pouvez remplacermaximumBy(comparing length)
parsnd.maximum.map((,)=<<length)
ce qui n'a pas besoin d'importerOrd
, pour un total de 62 octets: Essayez-le en ligne!Haskell ,
4239 octetsEssayez-le en ligne!
Edit: Thans à Zgarb pour -3 octets
la source
sum
n'est pas nécessaire ici.Brachylog , 5 octets
Essayez-le en ligne!
Ce n'est pas vraiment un extrait, mais je ne sais pas ce que ce serait ...
la source
Clojure, 32 octets
(frequencies %)
renvoie une table de hachage, qui peut être utilisée comme fonction. Étant donné une clé, elle renvoie la valeur correspondante :)Longueur égale:
la source
Scala, 32
la source
C ++ 119
Code complet et test:
la source