Napisz funkcję, która pobiera listę lub tablicę i zwraca listę różnych elementów, posortowanych w porządku malejącym według częstotliwości.
Przykład:
Dany:
["John","Doe","Dick","Harry","Harry","Doe","Doe","Harry","Doe","John"]
Oczekiwana wartość zwrotu:
["Doe","Harry","John","Dick"]
Odpowiedzi:
APL (14)
Jest to funkcja, która pobiera listę, np .:
Wyjaśnienie:
∘.≡⍨⍵
: porównaj każdy element w tablicy z innymi elementami w tablicy, dając macierz+⌿
: zsumuj kolumny macierzy, podając ile razy występuje każdy element⍒
: podaj wskaźniki w dół⍵[
...]
: zmiana kolejności⍵
według podanych wskaźników∪
: zdobądź unikalne elementyźródło
Python
3-4743; Python 2 -4039W przypadku Python 3:
W przypadku Python 2:
Próbny:
źródło
f=lambda n:sorted(set(n),cmp,n.count,1)
39 znakówcmp
ikey
funkcję. Chłodny.f=lambda n:sorted(set(n),key=n.count)[::-1]
Mathematica, 31
(Z
n = {"John", "Doe", "Dick", "Harry", "Harry", "Doe", "Doe", "Harry", "Doe", "John"}
)źródło
Reverse
, aleSort[GatherBy@n][[-1;;1, 1]]
nie działa :). Jakieś pomysły?Mathematica (26
37)Z
n = {"John", "Doe", "Dick", "Harry", "Harry", "Doe", "Doe", "Harry", "Doe", "John"}
:Mathematica V10 + (26) :
źródło
Perl 6 (36 bajtów, 35 znaków)
»
można zastąpić>>
, jeśli nie możesz obsługiwać UTF-8. Jestem prawie pewien, że może to być krótsze, aleBag
klasa zachowuje się dość dziwnie (niestety) i nie jest tak naprawdę ukończona, ponieważ jest stosunkowo nowa (ale może liczyć argumenty).{}
deklaruje anonimową funkcję.Przykładowe dane wyjściowe (z Perl 6 REPL):
źródło
Rubin: 34
37postacie(edytowane: poprzednie 30-znakowe rozwiązanie było ciałem funkcji)
źródło
f=->a{a.sort_by{|z|-a.count(z)}&a}
.&
Robi Uniq.GolfScript, 14 znaków (19 jako nazwana funkcja, również 14 jako pełny program)
Ten kod pobiera tablicę na stos i sortuje unikalne elementy w porządku malejącym według liczby wystąpień. Na przykład, jeśli tablica wejściowa to:
wtedy tablica wyjściowa będzie
Uwaga: powyższy kod jest czystą sekwencją instrukcji. Aby przekształcić go w funkcję o nazwie, zawiń ją w nawiasy klamrowe i przypisz do nazwy, jak w:
Alternatywnie, aby przekształcić kod w pełny program, który odczytuje listę ze standardowego wejścia (używając notacji listy pokazanej powyżej) i drukuje ją na standardowe wyjście,
~
dołącza i dołącza`
do kodu. W[.
tym przypadku można pominąć (ponieważ wiemy, że na stosie nie będzie nic więcej), więc wynikowy program składający się z 14 znaków będzie:Jak to działa?
:a
zapisuje kopię oryginalnej tablicy w zmienneja
do późniejszego wykorzystania..|
oblicza zestaw unii tablicy z samym sobą, eliminując duplikaty jako efekt uboczny.{ }$
sortuje zduplikowaną tablicę za pomocą niestandardowych kluczy sortowania obliczonych przez kod w nawiasach klamrowych. Ten kod pobiera każdy element tablicy, używa odejmowania tablicy, aby usunąć go z oryginalnej zapisanej tablicy wejścioweja
, i zlicza liczbę pozostałych elementów. W ten sposób elementy są sortowane w malejącej kolejności częstotliwości.Ps. Zobacz tutaj oryginalną 30-znakową wersję.
źródło
[a\])^
powinno być równoważne[.;]a\-
. Sortowanie według liczby niepasujących elementów to dobry pomysł.^
zwija duplikaty,-
nie robi. (I ITYM(
, nie)
.) Działałoby ,[a\](\-
ale nie zapisywało żadnych znaków.R: 23 znaki
Ale to nie używa tak piękny skrót
T
doTRUE
...źródło
jeśli to może pasować tutaj:
In sql-server
LUB
zobacz to w akcji
źródło
select name from #t1 group by name order by count(*) desc
PHP,
63 6261 znakówPróbny:
źródło
array_count_values()
… To wszystko, czego musisz użyć (w tymarsort()
)array_count_values()
jak widzę, nie usuwa zduplikowanych wartości ani nie porządkuje ich.array_count_values
dłuższa?<?$u=array_count_values($_GET);arsort($u);print_r($u);
moim zdaniem jest 54 bajtówRuby: 59 znaków
Przykładowy przebieg:
źródło
Mathematica, 39 znaków
źródło
JavaScript (ECMAScript5):
118113 znakówhttp://jsfiddle.net/mblase75/crg5B/
źródło
f=n=>{m={};n.forEach(e=>m[e]=m[e]+1||1);return Object.keys(m).sort((a,b)=>m[b]-m[a])}
. (Obecnie tylko w Firefox.)m[n[i]]=-~m[n[i]]
do zwiększania i nie potrzebujesz {} wokół całego obwodu pętli.Haskell - 53 znaków
Objaśnienie: pierwsze dwa wiersze to konieczne importowanie, następny wiersz kodu to podpis typu (generalnie nie jest to konieczne), faktyczna funkcja to ostatni wiersz. Funkcja sortuje listę według naturalnego porządku, grupuje równe elementy w listy, sortuje listę według malejącego rozmiaru i pobiera pierwszy element z każdej listy.
całkowita długość wraz z importem: 120
bez importu, ale z podpisem typu: 86
sama funkcja: 53
źródło
Clojure: 43 znaków
Funkcjonować:
Demo (w repl):
źródło
Perl
Aby spełnić specyfikację wejścia / wyjścia potrzebuję 120 znaków
czysty najkrótszy kod, biorąc jeden element w wierszu i drukując jeden element w wierszu Potrzebuję tylko 55 znaków
źródło
C #: 111 znaków
(wewnątrz klasy)
Proste rozwiązanie wykorzystujące LINQ.
źródło
R (22)
Jako funkcja zajęłaby 11 dodatkowych znaków.
Stosowanie:
źródło
Scala (71)
Nie golfowany:
źródło
J, 8 bajtów
Stosowanie
Nazwy są przechowywane jako tablica ciągów w ramkach.
Wyjaśnienie
źródło
CJam, 15 bajtów (być może niekonkurujących)
Może to korzystać z funkcji CJam po opublikowaniu tego wyzwania. Jestem zbyt leniwy, by to sprawdzić.
źródło