Schreiben Sie ein Snippet, um den Modus (die häufigste Zahl) einer Liste positiver Ganzzahlen zu berechnen.
Zum Beispiel der Modus von
d = [4,3,1,0,6,1,6,4,4,0,3,1,7,7,3,4,1,1,2,8]
ist 1
, weil es maximal 5 mal vorkommt.
Sie können davon ausgehen, dass die Liste in einer Variablen wie d
und in einem eindeutigen Modus gespeichert ist.
zB: Python, 49
max(((i,d.count(i))for i in set(d)), key=lambda x:x[1])
Das ist Code-Golf , also gewinnt die kürzeste Lösung in Bytes.
code-golf
array-manipulation
garg10may
quelle
quelle
d,
undkey=
.defaultdict(int)
oder benutztCounter
. So etwas wieCounter(d).most_common()[0]
.Matlab / Octave,
75 BytesEs überrascht nicht, dass es eine integrierte Funktion zum Auffinden von Modi gibt. Als anonyme Funktion:
Dies gibt das am häufigsten vorkommende Element im Eingabevektor mit Bindungen zum kleineren Wert zurück.
2 Bytes gespart dank Dennis!
quelle
help mode
): "Wenn zwei oder mehr Werte die gleiche Frequenz haben, gibt" mode "die kleinste zurück."@mode
.Pyth - 6
Probieren Sie es online aus.
Erwartet Eingaben über stdin wie
[4,3,1,0,6,1,6,4,4,0,3,1,7,7,3,4,1,1,2,8]
. Bindungen werden beim letzten Auftreten aufgelöst, da Python stabile Sortierungen ausführt.Sortiert die Liste nach dem Wert in der Liste und druckt dann die letzte Nummer der Liste.
Q
könnte durch ersetzt werden,d
wenn Sie initialisiert habend
, den Wert vor z=d[4 3 1 0 6 4 4 0 1 7 7 3 4 1 1 2 8)
Python-artiger Pseudocode:
Vollständige Erklärung:
Pyth's
orderby
läuft genauso wie Python's,sorted
wobeiorderby
das erste Argument daskey
Argument ist.quelle
Mathematica, 25 Bytes
oder
Wie bei der Challenge wird erwartet, dass die Liste in gespeichert wird
d
.oder ... 15 Bytes
Natürlich wäre Mathematica nicht Mathematica, wenn es kein eingebautes Programm hätte:
Commonest
Gibt eine Liste aller gängigen Elemente zurück (im Falle eines Gleichstands) und#&@@
ist ein GolfspielerFirst@
.quelle
Ruby, 22 Bytes
Grundsätzlich eine Portierung meiner Mathematica-Antwort, außer dass Ruby eine direkte hat,
max_by
sodass ich nicht erst sortieren muss.quelle
d.max_by d.method:count
aber das ist ungefähr eine Million (auch nicht zwei) Bytes länger. Dennoch ist es erwähnenswert, dass es möglich ist.R
3325 BytesDanke @Hugh für die Hilfe beim Kürzen:
Das Original:
Dadurch wird die Häufigkeit jedes Elements im Vektor berechnet
d
und anschließend der Name der Spalte mit dem größten Wert zurückgegeben. Der zurückgegebene Wert ist eine Zeichenfolge, die die Zahl enthält. Es wurde nirgendwo gesagt, dass das nicht in Ordnung ist, also ...Vorschläge zur Verkürzung sind willkommen!
quelle
names(sort(-table(d))[1])
CJam,
1110 BytesNimmt das Array in einer aufgerufenen Variablen an
A
. Dies sortiert das Array grundsätzlich nach dem Vorkommen jeder Zahl im Array und wählt dann das letzte Element des Arrays aus.Anwendungsbeispiel
Ausgabe
1 Byte gespart dank Dennis!
Probieren Sie es hier online aus
quelle
A{A\-,}$0=
ist ein Byte kürzer.Ae`$e_W=
$e`$e_W=
Powershell 19
(Dies setzt voraus, dass das Array bereits aktiviert ist.
$d
)quelle
J - 12 Zeichen
Anonyme Funktion. Sortiert die Liste vom häufigsten bis zum seltensten, wobei das erste Element verwendet wird.
0{
Zuerst von~.
Einzigartige Gegenstände\:
Herunter sortiert von#/.~
FrequenzenProbieren Sie es aus.
quelle
JavaScript (ES6) 51
Nur ein einzeiliger Ausdruck mit der vorab geladenen Variablen d. Sortieren Sie das Array nach der Frequenz und erhalten Sie dann das erste Element.
Böser Nebeneffekt, das ursprüngliche Array wird verändert
Wie üblich .map anstelle von .reduce verwenden, da es insgesamt 1 Zeichen kürzer ist. Mit .reduce ist es fast eine saubere, nicht Golf spielende Lösung.
Endlich eine Lösung, die eine Funktion verwendet, ohne das ursprüngliche Array zu ändern und ohne Globale (62 Bytes):
Test In FireFox / Firebug - Konsole
Ausgabe 1
Das d-Array wird zu:
quelle
Python - 32
Um ehrlich zu sein, wird es in Zukunft nirgendwo eine Lösung mit 18 Zeichen geben.
EDIT: Ich stehe korrigiert und beeindruckt.
quelle
JavaScript, ES6, 71 Byte
Ein bisschen lang, kann viel golfen.
Dies erzeugt eine Funktion,
f
die wief([1,1,1,2,1,2,3,4,1,5])
folgt aufgerufen werden kann und zurückkehrt1
.Probieren Sie es auf Ihrer neuesten Firefox-Konsole aus.
quelle
f=a=>(c=b=[],a.map(x=>b[x]++-1?0:b[x]=1),b.map((x,i)=>c[x]=i),c.pop())
ist 1 Byte kürzer.05AB1E , 3 Bytes
(nicht konkurrierend - Frage geht der Sprache voraus)
Erläuterung:
Wenn Sie das Array in einer Variablen speichern möchten, anstatt die Eingabe zu verwenden, verschieben Sie das Array einfach zu Beginn des Programms in den Stapel.
Probieren Sie es online!
quelle
C # - 49
Kann nicht wirklich mit C # konkurrieren, aber na ja:
Angenommen,
d
ist das Arrayd.GroupBy(i=>i).OrderBy(a=>a.Count()).Last().Key;
quelle
Bash -
2927 ZeichenEs benutzen:
dh "1" ist der Modus, und es erscheint fünfmal.
quelle
sort|uniq -c|sort -nr|sed q
speichert ein paar ZeichenGolfScript, 10 Bytes
Aus dieser Antwort schrieb ich an Tipps zum Golfen in GolfScript . Erwartet die Eingabe in einem Array mit dem Namen
a
, gibt das Ergebnis auf dem Stapel zurück. (Um Eingaben von einem Array auf dem Stack zu lesen, müssen Sie:
11 Bytes voranstellen. Um Eingaben von stdin (im Format[1 2 1 3 7]
) zu lesen , müssen Sie auch voranstellen~
12 Bytes .)Dieser Code iteriert über das Eingabearray, subtrahiert jedes Element vom ursprünglichen Array und zählt die Anzahl der verbleibenden Elemente. Dies wird dann als Schlüssel zum Sortieren des ursprünglichen Arrays verwendet, und das erste Element des sortierten Arrays wird zurückgegeben.
Online-Demo.
Ps. Vielen Dank an Peter Taylor , der mich auf diese Herausforderung aufmerksam gemacht hat .
quelle
Dyalog APL, 12 Zeichen
d[⊃⍒+/∘.=⍨d]
∘.=⍨d
ist dasselbe wied∘.=d
, reflexives äußeres Produkt von=
. Es wird eine boolesche Matrix erstellt, in der jedes Elementpaar verglichen wirdd
.+/
summiert diese Matrix entlang einer der Achsen und erzeugt einen Vektor.⍒
bewertet den Vektor, dh sortiert ihn nach Indizes. (Wie die Glyphen andeuten, werden die⍒
Noten in absteigender Reihenfolge und angezeigt⍋
die in aufsteigender Reihenfolge vergeben.)⊃
Nimmt den ersten Index aus der Bewertung - den Index des größten Elements vond
.d[...]
Gibt dieses Element zurück.quelle
+/∘.=⍨d
zählt für jedes Element vond
.⊢∘≢⌸d
zählt für jedes Element von∪d
, daher entsprechen die Indizes nicht denen vond
. Gegenbeispiel :d←1 1 2 2 2
. Damit es funktioniert:(∪d)[⊃⍒⊢∘≢⌸d]
oder(⊃⍒⊢∘≢⌸d)⊃∪d
.Perl 6 , 21 Bytes
Beispiel:
Wenn es ein Unentschieden gibt, wird das größere Unentschieden gedruckt.
Die
.Bag
Methode für eine Liste oder ein Array erstellt einen quantifizierten Hash, der die Gesamtanzahl der Aufrufe eines bestimmten Werts mit diesem Wert verknüpft.Die
.invert
Methode erstellt eine Liste der Paare in der Tasche mit dem Schlüssel und dem getauschten Wert. (Der Grund, warum wir dies nennen, ist, dass die nächste Methode das tut, was wir wollen.)Die
.max
Methode auf einer Liste von Paaren gibt das größte Paar zurück, das zuerst die Schlüssel vergleicht, und im Falle eines Gleichstands, das die Werte vergleicht.(Dies ist, weil so
multi infix:<cmp>(Pair:D \a, Pair:D \b)
bestimmt wird, welche größer ist)Die
.value
Methode gibt den Wert aus dem Pair zurück. (Es wäre der Schlüssel gewesen, nach dem wir gesucht hätten, wenn der.invert
Anruf nicht früher stattgefunden hätte.)Wenn Sie alle Werte zurückgeben möchten, die bei einem Unentschieden gebunden wurden:
Die
.classify
Methode gibt eine Liste von Paaren zurück, bei denen die Schlüssel vom Aufrufen des Whatever-Lambda*.value
mit jedem der Paare stammen.Dann rufen wir
.max
an, um das größte Paar zu bekommen.Ein Anruf, um
.value
uns die originalen Paare aus der Tasche zu holen (in diesem Fall nur eines)Anschließend
>>.key
rufen wir die.key
Methode für jedes Paar in der Liste auf, sodass wir eine Liste der Werte erhalten, die am häufigsten gesehen wurden.quelle
Java 8: 184 Bytes
Eingang A muss vom Typ sein
Integer[]
. Beachten Siejava.util.*
undjava.util.stream.*
müssen importiert werden, jedoch im Spirit Oneliner werden sie ausgelassen.quelle
(i->i,Collectors.counting())
.Bash + Unix-Tools, 62 Bytes
Erwartet das Array im STDIN. Das Eingabeformat zählt nicht, solange die Zahlen nicht negative ganze Zahlen sind.
Bearbeitet: Platzhalter in grep-Argumenten ausgeblendet. Jetzt kann es sicher in nicht leeren Verzeichnissen ausgeführt werden. Dank der Handarbeit.
quelle
[0-9]*
möglicherweise zu passenden Dateinamen erweitert.'
das Argument umgrep
.Perl, 27 Bytes
Gibt den letzten am häufigsten verwendeten Wert im Falle eines Gleichstands zurück.
quelle
PHP,
5350 BytesLaufen Sie wie folgt:
Optimierungen
d
quelle
Java 8, 83 Bytes
d
muss ein seinCollection<Integer>
.Kann
Collections
statisch importiert werden:59 Bytes
quelle
Haskell 78
Wenn die Importe ignoriert werden, ist es 45 .
quelle
maximumBy
anstelle von verwendenlast.sortBy
. Der neue Code würde werdeng=head.maximumBy(comparing length).group.sort
.g=
. 2.) Sie können ersetzenmaximumBy(comparing length)
durchsnd.maximum.map((,)=<<length)
welche nicht importieren müssenOrd
, für insgesamt 62 Bytes: Versuchen Sie es online!Haskell ,
4239 BytesProbieren Sie es online!
Edit: Als zu Zgarb für -3 Bytes
quelle
sum
ist unnötig.Brachylog , 5 Bytes
Probieren Sie es online!
Dies ist kein Schnipsel, aber ich bin nicht sicher, was wäre ...
quelle
Clojure, 32 Bytes
(frequencies %)
Gibt eine Hash-Map zurück, die als Funktion verwendet werden kann. Bei einem Schlüssel wird der entsprechende Wert zurückgegeben :)Gleiche Länge:
quelle
Scala, 32
quelle
C ++ 119
Vollständiger Code und Test:
quelle