Napisz fragment kodu, aby obliczyć tryb (najczęstszą liczbę) listy dodatnich liczb całkowitych.
Na przykład tryb
d = [4,3,1,0,6,1,6,4,4,0,3,1,7,7,3,4,1,1,2,8]
jest 1
, ponieważ występuje maksymalnie 5 razy.
Możesz założyć, że lista jest przechowywana w zmiennej takiej jak d
i ma unikalny tryb.
np .: Python, 49
max(((i,d.count(i))for i in set(d)), key=lambda x:x[1])
To jest golf golfowy , więc wygrywa najkrótsze rozwiązanie w bajtach.
code-golf
array-manipulation
garg10may
źródło
źródło
d,
ikey=
.defaultdict(int)
lubCounter
. Coś jakCounter(d).most_common()[0]
.Matlab / Octave,
75 bajtówNic dziwnego, że jest wbudowana funkcja wyszukiwania trybów. Jako funkcja anonimowa:
Zwraca to najczęściej występujący element w wektorze wejściowym, a krawaty przechodzą do mniejszej wartości.
Zaoszczędzono 2 bajty dzięki Dennisowi!
źródło
help mode
): „Jeśli dwie lub więcej wartości mają tę samą częstotliwość,„ tryb ”zwraca najmniejszą.”@mode
.Pyth - 6
Wypróbuj online.
Oczekuje wkładu na standardowe wejście
[4,3,1,0,6,1,6,4,4,0,3,1,7,7,3,4,1,1,2,8]
. Więzy są rozwiązywane przez ostatnie wystąpienie, ponieważ Python wykonuje stabilne sortowanie.Sortuje listę według liczby na liście, a następnie drukuje ostatni numer listy.
Q
można zastąpić,d
jeśli zainicjowano,d
aby zawierała wartość przed np=d[4 3 1 0 6 4 4 0 1 7 7 3 4 1 1 2 8)
Pseudo-kod Python-esque:
Pełne objaśnienie:
Pyth za
orderby
przebiega dokładnie tak samo jak Pythonasorted
zorderby
„s pierwszy argument byciakey
argument.źródło
Mathematica, 25 bajtów
lub
Podobnie jak w przypadku wyzwania, oczekuje się, że lista będzie przechowywana
d
.lub ... 15 bajtów
Oczywiście Mathematica nie byłaby Mathematica, gdyby nie miała wbudowanego:
Commonest
zwraca listę wszystkich najczęstszych elementów (w przypadku remisu) i#&@@
gra w golfaFirst@
.źródło
Ruby, 22 bajty
Zasadniczo część mojej odpowiedzi Mathematica, z wyjątkiem tego, że Ruby ma bezpośredni,
max_by
więc nie muszę sortować najpierw.źródło
d.max_by d.method:count
ale to około miliona (aka nawet dwóch) bajtów dłużej. Warto jednak zauważyć, że jest to możliwe.R,
3325 bajtówDzięki @Hugh za skrócenie pomocy:
Oryginalny:
Oblicza to częstotliwość każdego elementu w wektorze
d
, a następnie zwraca nazwę kolumny zawierającej największą wartość. Zwrócona wartość jest w rzeczywistości ciągiem znaków zawierającym liczbę. Nigdzie nie było powiedziane, że to nie w porządku, więc ...Wszelkie sugestie dotyczące skrócenia tego są mile widziane!
źródło
names(sort(-table(d))[1])
CJam,
1110 bajtówZakłada tablicę w zmiennej o nazwie
A
. Jest to w zasadzie sortowanie tablicy na podstawie występowania każdej liczby w tablicy, a następnie wybór ostatniego elementu tablicy.Przykładowe użycie
Wydajność
1 bajt zapisany dzięki Dennisowi!
Wypróbuj online tutaj
źródło
A{A\-,}$0=
jest o jeden bajt krótszy.Ae`$e_W=
$e`$e_W=
PowerShell 19
(zakłada się, że tablica jest już włączona
$d
)źródło
J - 12 znaków
Funkcja anonimowa. Sortuje listę od najbardziej do najmniej popularnych, biorąc pierwszy element.
0{
Po pierwsze~.
Unikalne przedmioty\:
Downsortowane przez#/.~
CzęstotliwościWypróbuj sam.
źródło
JavaScript (ES6) 51
Tylko wyrażenie jednowierszowe przy użyciu wstępnie załadowanej zmiennej d. Posortuj tablicę według częstotliwości, a następnie uzyskaj pierwszy element.
Paskudny efekt uboczny, oryginalny układ został zmieniony
Jak zwykle użycie .map zamiast .reduce, ponieważ ogólnie jest o 1 char. Krótszy. Z .reduce to prawie czyste rozwiązanie bez gry w golfa.
Wreszcie rozwiązanie wykorzystujące funkcję, nie zmieniające oryginalnej tablicy i bez globałów (62 bajty):
Testuj w konsoli FireFox / FireBug
Wyjście 1
Tablica d staje się:
źródło
Python - 32
Szczerze mówiąc, nie widzę rozwiązania 18 postaci w przyszłości.
EDYCJA: Poprawiłem się i jestem pod wrażeniem.
źródło
JavaScript, ES6, 71 bajtów
Trochę długi, można dużo golfa.
To tworzy funkcję,
f
którą można wywołać jakf([1,1,1,2,1,2,3,4,1,5])
i powróci1
.Wypróbuj na najnowszej konsoli Firefox.
źródło
f=a=>(c=b=[],a.map(x=>b[x]++-1?0:b[x]=1),b.map((x,i)=>c[x]=i),c.pop())
jest o 1 bajt krótszy.05AB1E , 3 bajty
(niekonkurencyjny - pytanie poprzedza język)
Wyjaśnienie:
Jeśli chcesz przechowywać tablicę w zmiennej zamiast używać danych wejściowych, po prostu wepchnij tablicę do stosu na początku programu.
Wypróbuj online!
źródło
C # - 49
Naprawdę nie mogę konkurować przy użyciu C #, ale cóż:
Zakładając, że
d
jest to tablicad.GroupBy(i=>i).OrderBy(a=>a.Count()).Last().Key;
źródło
bash -
2927 znakówUżyj tego:
tzn. „1” jest trybem i pojawia się pięć razy.
źródło
sort|uniq -c|sort -nr|sed q
ratuje kilka postaciGolfScript, 10 bajtów
Z tej odpowiedzi napisałem do Wskazówki dotyczące gry w golfa w GolfScript . Oczekuje danych wejściowych w tablicy o nazwie
a
, zwraca wynik na stosie. (Aby odczytać dane wejściowe z tablicy na stosie, poprzedzaj:
11 bajtów; aby odczytać dane wejściowe ze standardowego wejścia (w formacie[1 2 1 3 7]
), również poprzedzaj~
12 bajtów).Ten kod działa poprzez iterację tablicy wejściowej, odejmowanie każdego elementu od oryginalnej tablicy i zliczanie liczby pozostałych elementów. Jest to następnie używane jako klucz do sortowania oryginalnej tablicy i zwracany jest pierwszy element posortowanej tablicy.
Demo online.
Ps. Dziękuję Peterowi Taylorowi za wskazanie mi tego wyzwania .
źródło
Dyalog APL, 12 znaków
d[⊃⍒+/∘.=⍨d]
∘.=⍨d
jest taki sam jakd∘.=d
refleksyjny produkt zewnętrzny=
. Tworzy macierz boolowską porównując każdą parę elementów wd
.+/
sumuje tę macierz wzdłuż jednej z osi i tworzy wektor.⍒
ocenia wektor, tzn. sortuje go według wskaźników. (Jak sugerują glify,⍒
ocenia w kolejności malejącej i⍋
oceniałby w kolejności rosnącej).⊃
pobiera pierwszy indeks z oceny - indeks największego elementud
.d[...]
zwraca ten element.źródło
+/∘.=⍨d
liczy się dla każdego elementud
.⊢∘≢⌸d
liczy się dla każdego elementu∪d
, więc wskaźniki nie odpowiadają tym zd
. Kontrprzykład:d←1 1 2 2 2
. Aby to działało:(∪d)[⊃⍒⊢∘≢⌸d]
lub(⊃⍒⊢∘≢⌸d)⊃∪d
.Perl 6 , 21 bajtów
Przykład:
Jeśli jest remis, wydrukuje większy z tych, które związały.
.Bag
Metoda na liście lub tablicy tworzy ilościowo hash, który wiąże się z całkowitą rachubę, ile razy dana wartość została zaobserwowana w tej wartości..invert
Metoda tworzy listę par w worku z kluczem i wartością zamienione. (Powodem, dla którego to nazywamy, jest następna metoda robienia tego, co chcemy)..max
Metoda na listę par zwraca największą Pair porównujące klucze pierwszy oraz w przypadku remisu porównanie wartości.(Jest tak, ponieważ w ten sposób
multi infix:<cmp>(Pair:D \a, Pair:D \b)
określa się, która jest większa).value
Metoda zwraca wartość od pary. (Byłby to klucz, którego szukaliśmy, gdyby nie.invert
wcześniejsza rozmowa)Jeśli chcesz zwrócić wszystkie wartości powiązane w przypadku remisu:
.classify
Metoda zwraca listę par, gdzie klawisze są z wywołaniem lambda cokolwiek*.value
z każdej z par.Następnie dzwonimy,
.max
aby uzyskać największą parę.Zadzwoń, by
.value
otrzymać oryginalne pary z torby (w tym przypadku tylko jedną)Następnie używamy metody
>>.key
do wywołania.key
metody na każdej parze na liście, dzięki czemu otrzymujemy listę wartości, które były najczęściej oglądane.źródło
Java 8: 184 bajty
Wejście A musi być typu
Integer[]
. Uwagajava.util.*
ijava.util.stream.*
należy je zaimportować, jednak w duchu oneliner są one pominięte.źródło
(i->i,Collectors.counting())
.Narzędzia Bash + unix, 62 bajty
Oczekuje tablicy w STDIN. Format wejściowy się nie liczy, o ile liczby są liczbami całkowitymi nieujemnymi.
Edytowano: znak ucieczki w argumencie grep. Teraz można go bezpiecznie uruchomić w niepustych katalogach. Dzięki manatwork.
źródło
[0-9]*
może zostać rozszerzone do pasujących nazw plików.'
argument wokółgrep
.Perl, 27 bajtów
Zwraca ostatnią najczęstszą wartość w przypadku remisu.
źródło
PHP,
5350 bajtówUruchom tak:
Poprawki
d
źródło
Java 8, 83 bajtów
d
musi byćCollection<Integer>
.Jeśli
Collections
można je zaimportować statycznie:59 bajtów
źródło
Haskell 78
Jeśli import zostanie zignorowany, będzie to 45 .
źródło
maximumBy
zamiastlast.sortBy
. Nowy kod stałby sięg=head.maximumBy(comparing length).group.sort
.g=
. 2.) Możesz zastąpić,maximumBy(comparing length)
przezsnd.maximum.map((,)=<<length)
co nie trzeba importowaćOrd
, w sumie 62 bajty: Wypróbuj online!Haskell ,
4239 bajtówWypróbuj online!
Edycja: Dzięki Zgarb za -3 bajty
źródło
sum
tutaj nie jest to konieczne.Brachylog , 5 bajtów
Wypróbuj online!
To nie jest tak naprawdę fragment, ale nie jestem pewien, co by było ...
źródło
Clojure, 32 bajty
(frequencies %)
zwraca mapę skrótu, której można użyć jako funkcji. Podany klucz zwraca odpowiednią wartość :)Równa długość:
źródło
Scala, 32 lata
źródło
C ++ 119
Pełny kod i test:
źródło