Schreiben Sie eine Funktion, die eine Liste oder ein Array aufnimmt und eine Liste der verschiedenen Elemente zurückgibt, sortiert in absteigender Reihenfolge nach Häufigkeit.
Beispiel:
Gegeben:
["John","Doe","Dick","Harry","Harry","Doe","Doe","Harry","Doe","John"]
Erwarteter Rückgabewert:
["Doe","Harry","John","Dick"]
Antworten:
APL (14)
Dies ist eine Funktion, die eine Liste annimmt, zB:
Erläuterung:
∘.≡⍨⍵
: Vergleiche jedes Element im Array mit jedem anderen Element im Array, um eine Matrix zu erhalten+⌿
: summiere die Spalten der Matrix und gebe an, wie oft jedes Element vorkommt⍒
: Indexe nach unten sortieren⍵[
...]
:⍵
nach den angegebenen Indizes neu ordnen∪
: Holen Sie sich die einzigartigen Elementequelle
Python 3 -
4743; Python 2 -4039Für Python 3:
Für Python 2:
Demo:
quelle
f=lambda n:sorted(set(n),cmp,n.count,1)
39 Zeichencmp
Funktion als auch einekey
Funktion übergeben können. Cool.f=lambda n:sorted(set(n),key=n.count)[::-1]
Mathematica, 31
(Mit
n = {"John", "Doe", "Dick", "Harry", "Harry", "Doe", "Doe", "Harry", "Doe", "John"}
)quelle
Reverse
, aber esSort[GatherBy@n][[-1;;1, 1]]
funktioniert nicht :). Irgendwelche Ideen?Mathematica (26
37)Mit
n = {"John", "Doe", "Dick", "Harry", "Harry", "Doe", "Doe", "Harry", "Doe", "John"}
:Mathematica V10 + (26) :
quelle
Perl 6 (36 Bytes, 35 Zeichen)
»
kann durch ersetzt werden>>
, wenn Sie mit UTF-8 nicht umgehen können. Ich bin mir fast sicher, dass dies kürzer sein könnte, aber dieBag
Klasse verhält sich (leider) relativ seltsam und ist nicht wirklich vollständig, da sie relativ neu ist (aber sie kann Argumente zählen).{}
deklariert eine anonyme Funktion.Beispielausgabe (von Perl 6 REPL):
quelle
Rubin: 34
37Zeichen(bearbeitet: vorherige 30-Zeichen-Lösung war der Hauptteil der Funktion)
quelle
f=->a{a.sort_by{|z|-a.count(z)}&a}
. Das&
macht eine uniq.GolfScript, 14 Zeichen (19 als benannte Funktion, auch 14 als volles Programm)
Dieser Code nimmt ein Array in den Stapel und sortiert seine eindeutigen Elemente in absteigender Reihenfolge nach der Anzahl der Vorkommen. Zum Beispiel, wenn das Eingabearray ist:
dann wird das Ausgangsarray sein
Hinweis: Der obige Code ist eine bloße Folge von Anweisungen. Um daraus eine benannte Funktion zu machen, setzen Sie sie in geschweifte Klammern und weisen Sie sie einem Namen zu, wie in:
Um den Code in ein vollständiges Programm umzuwandeln, das eine Liste von der Standardeingabe liest (unter Verwendung der oben gezeigten Listennotation) und auf der Standardausgabe ausgibt, müssen Sie den Code voranstellen
~
und anhängen`
. Das[.
kann in diesem Fall weggelassen werden (da wir wissen, dass es nichts anderes auf dem Stapel gibt), so dass das resultierende 14-stellige Programm sein wird:Wie funktioniert es?
:a
Speichert eine Kopie des ursprünglichen Arrays in der Variablena
zur späteren Verwendung..|
berechnet die Mengenvereinigung des Arrays mit sich selbst und eliminiert Duplikate als Nebeneffekt.{ }$
sortiert das nicht duplizierte Array mithilfe der benutzerdefinierten Sortierschlüssel, die durch den Code in geschweiften Klammern berechnet werden. Dieser Code verwendet jedes Array-Element, entfernt es mithilfe der Array-Subtraktion aus dem ursprünglichen, in gespeicherten Arraya
und zählt die Anzahl der verbleibenden Elemente. Somit werden die Elemente in absteigender Reihenfolge der Häufigkeit sortiert.Ps. Sehen Sie hier für die ursprüngliche 30-Zeichen - Version.
quelle
[a\])^
sollte gleichbedeutend sein mit[.;]a\-
. Es ist eine gute Idee, nach der Anzahl der nicht übereinstimmenden Elemente zu sortieren.^
Duplikate kollabieren,-
nicht. (Und ITYM(
nicht)
.)[a\](\-
Würde funktionieren, aber keine Zeichen speichern.R: 23 Zeichen
Aber es nutzt die nicht so nette Abkürzung von
T
zuTRUE
...quelle
wenn das hier passen könnte:
In sql-server
ODER
Sehen Sie es in Aktion
quelle
select name from #t1 group by name order by count(*) desc
PHP,
63 6261 ZeichenDemo:
quelle
array_count_values()
Sie einen Blick auf ... Das ist alles, was Sie verwenden müssen (einschließlicharsort()
)array_count_values()
löscht keine doppelten Werte und bestellt sie auch nicht, wie ich sehen kann.array_count_values
länger?<?$u=array_count_values($_GET);arsort($u);print_r($u);
Meiner Meinung nach sind es 54 BytesRuby: 59 Zeichen
Probelauf:
quelle
Mathematica, 39 Zeichen
quelle
JavaScript (ECMAScript5):
118113 Zeichenhttp://jsfiddle.net/mblase75/crg5B/
quelle
f=n=>{m={};n.forEach(e=>m[e]=m[e]+1||1);return Object.keys(m).sort((a,b)=>m[b]-m[a])}
. (Derzeit nur in Firefox.)m[n[i]]=-~m[n[i]]
zum Inkrementieren verwenden, und Sie brauchen keine {} s um den Schleifenkörper.Haskell - 53 Zeichen
Erklärung: Die ersten beiden Zeilen sind notwendige Importe, die nächste Codezeile ist die Typensignatur (in der Regel nicht notwendig), die eigentliche Funktion ist die letzte Zeile. Die Funktion sortiert die Liste nach ihrer natürlichen Reihenfolge, gruppiert gleiche Elemente in Listen, sortiert die Liste der Listen nach absteigender Größe und nimmt das erste Element in jeder Liste.
Gesamtlänge einschließlich Importe: 120
ohne Import, jedoch mit Typunterschrift: 86
Funktion selbst: 53
quelle
Clojure: 43 Zeichen
Funktion:
Demo (in Repl):
quelle
Perl
Um gegebene I / O-Spezifikationen zu erfüllen, benötige ich 120 Zeichen
reiner kürzester Code, indem ich einen Artikel pro Zeile nehme und einen Artikel pro Zeile drucke Ich benötige nur 55 Zeichen
quelle
C #: 111 Zeichen
(innerhalb einer Klasse)
Eine einfache Lösung mit LINQ.
quelle
R (22)
Als Funktion würde es 11 weitere Zeichen dauern.
Verwendung:
quelle
Scala (71)
Ungolfed:
quelle
J, 8 Bytes
Verwendung
Die Namen werden als Array von Strings in Boxen gespeichert.
Erläuterung
quelle
CJam, 15 Bytes (möglicherweise nicht konkurrierend)
Dies kann CJam-Funktionen verwenden, nachdem diese Herausforderung veröffentlicht wurde. Ich bin zu faul zu überprüfen.
quelle