Nie mylić z najmniejszą wielokrotnością .
Biorąc pod uwagę listę dodatnich liczb całkowitych z więcej niż jednym elementem, zwróć najpopularniejszy iloczyn dwóch elementów w tablicy.
Na przykład MCM listy [2,3,4,5,6]
jest 12
, ponieważ tabela produktów to:
2 3 4 5 6
---------------
2 | # 6 8 10 12
3 | # # 12 15 18
4 | # # # 20 24
5 | # # # # 30
6 | # # # # #
Dzięki DJMcMayhem za stół
Jak 12
pojawia się najczęściej (dwa razy jako 2*6
i 3*4
). Należy pamiętać, że nie jesteśmy w tym produkt elementu i sobie, tak 2*2
lub 4*4
nie nie pojawiają się na tej liście. Jednak identyczne elementy będą nadal mnożone, więc tabela [2,3,3]
wygląda następująco:
2 3 3
----------
2 | # 6 6
3 | # # 9
3 | # # #
Z MCM jest 6
.
W przypadku remisu możesz zwrócić dowolny z powiązanych elementów lub listę wszystkich z nich.
- To jest golf golfowy , więc wygrywa najkrótsza bajt dla każdego języka!
Przypadki testowe:
[2,3,4,5,6] -> 12
[7,2] -> 14
[2,3,3] -> 6
[3,3,3] -> 9
[1,1,1,1,2,2] -> 2
[6,200,10,120] -> 1200
[2,3,4,5,6,7,8,8] -> 24
[5,2,9,10,3,4,4,4,7] -> 20
[9,7,10,9,7,8,5,10,1] -> 63, 70, 90 or [63,70,90]
code-golf
array-manipulation
Jo King
źródło
źródło
[3,3,3] -> 9
.). Wszystkie obecne przypadki testowe odfiltrowują wszystkie pary, w których elementy są takie same (nawet w przypadku przypadków testowych, takich jak[2,3,3]
zawierające te same wartości) nadal będą przechowywać poprawne wyniki testu, ale zawiodą dla tego przypadku testowego, ponieważ żadne nie pozostanie po filtrowaniu.Odpowiedzi:
Brachylog , 11 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
R ,
545041 bajtówWypróbuj online!
Alternatywnie, dla
545344 bajtów:Wypróbuj online!
Zasadniczo ta ostatnia wersja generuje odpowiedni wynik nawet bez
names
funkcji, ale następuje liczba takich najczęstszych produktów, o które nie prosi się ...Podziękowania dla CriminallyVulgar za -4 i -1 oraz Giuseppe za -9 w obu przypadkach.
źródło
combn(scan(),2,prod)
działa zamiast używaćapply
Galaretka , 6 bajtów
Wypróbuj online! lub Sprawdź zestaw testowy .
Jak to działa
źródło
Pyth, 12 bajtów
Zestaw testowy
Najpierw bierzemy wszystkie 2-elementowe kombinacje danych wejściowych bez replace (
.cQ2
). Następnie mapujemy każdą z tych par do ich produktu (*M
). Następnie nadpisujemy zmienną wejściową listą produktów (=
). Następnie sortujemy listę produktów według liczby wystąpień na liście produktów (o/QN
). Na koniec weź ostatni element posortowanej listy (e
).źródło
MATL ,
87 bajtówWypróbuj online!
(-1 bajt przy użyciu metody z @Mr. Odpowiedź galaretki Xcodera .)
Starsza odpowiedź:
8 bajtów
Wypróbuj online!
źródło
05AB1E ,
86 bajtów-2 bajty dzięki @Kaldo .
Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
źródło
ù
.Mathematica, 32 bajty
-17 bajtów (i poprawka) dzięki JungHwan Min .
Czysta funkcja. Pobiera listę liczb jako dane wejściowe i zwraca listę MCM jako dane wyjściowe.
źródło
{3, 3, 3}
. Naprawiono:Commonest[1##&@@@#~Subsets~{2}]&
Subsets
nie liczy się powtórzeń jako osobnych elementów. Wygląda na to, że tak, więc dziękuję!MATLAB, 43 bajty
To także coś w rodzaju twistera języka!
Wyjaśnienie
źródło
I'*I*1-eye
Dlaczego nie tylkoI'*I-eye
?Perl 6 ,
4138 bajtówWypróbuj online!
źródło
:
operatora.Stax ,
1210 bajtówUruchom i debuguj
źródło
Python 3 ,
7772 bajtówWypróbuj online!
źródło
Attache , 59 bajtów
Wypróbuj online!
Nadal pracuję nad tym trochę, ale myślę, że jest to prawie optymalne dla wybranego przeze mnie podejścia.
Wyjaśnienie
Jest to kompozycja trzech funkcji:
{Flat[UpperTriangle&1!Table&_!`*]^^0}
SortBy#`&&:`~
Last
Pierwsza funkcja wykonuje większość obliczeń:
Drugi jest nieco skomplikowany, ale robi coś raczej prostego. Po pierwsze, warto wiedzieć, że
f&n
jest to funkcja, która po wywołaniu z argumentami...x
zwracaf[...x, n]
.f&:n
jest podobny, powracaf[n, ...x]
. Teraz rozłóżmy to:Najpierw
f#g
tworzy widelec. Z wejściemn
zwracaf[n, g[n]]
. Jednak w tym przypadkuf
jest funkcja~SortBy
.~f
odwraca argumenty funkcji. Oznacza to, że~f#g
jest równoważnef[g[n], n]
lub tutajSortBy[(`& &: `~)[n], n]
.`& &: `~
postępuje zgodnie z formularzemf&:n
. Ale czym są`&
i`~
? Są to „cudzysłowy operatora” i zwracają funkcję równoważną operatorowi cytowanemu. Tak więc w tym przypadku`&
jest to samo, co${ x & y }
. Mając to na uwadze, wyrażenie to jest równoważne z następującym dla operatorów binarnych:Daje to funkcję
`~&x
, gdziex
jest wynikiem pierwszej funkcji.n ~ a
zlicza wystąpienian
wa
. Zwraca więc funkcję, która zlicza wystąpienie argumentu w obliczonej tablicy z funkcji 1.Wracając do
SortBy
, ten każdy element w tablicy według liczby razy w nim pojawia się.Wreszcie
Last
bierze element, który występuje najczęściej. Więzy są zrywane przez algorytm sortowania.źródło
[5, 2, 9, 10, 3, 4, 4, 4, 7] -> 16
zamiast20
tego.JavaScript (ES6),
7270 bajtówWypróbuj online!
źródło
Węgiel drzewny , 24 bajty
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
Podczas gdy tablica wejściowa nie jest pusta ...
... pop ostatni element i pomnóż resztę tablicy przez ten element ...
... i wrzuć wyniki do wstępnie zdefiniowanej pustej listy.
Policz, ile razy każdy produkt pojawia się na liście i weź maksymalnie ...
... następnie filtruj produkty, których liczba jest równa temu maksimum ...
... następnie pop ostatni element i rzut na ciąg w celu niejawnego wydruku.
źródło
Łuska , 7 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
APL (Dyalog Unicode) ,
29 2719 bajtówWypróbuj online!
Tacit fn.
Dzięki Adám za cichą wersję i 2 bajty.
Dzięki ngn za 8 bajtów!
W jaki sposób:
źródło
Japt ,
2016 bajtówWypróbuj online!
źródło
CJam ,
7068 bajtówWypróbuj online!
Wyjaśnienie
Musisz przewinąć w prawo, aby zobaczyć wyjaśnienia, ponieważ kod jest dość długi, a także wyjaśnienia.
To był absolutny koszmar do napisania. CJam nie ma funkcji powerset (w przeciwieństwie do mnóstwa innych języków golfowych - świetny wybór z mojej strony), co oznacza, że musiałem ręcznie znaleźć powerset. Dało mi to jednak możliwość zignorowania niepoprawnej liczby czynników, w przeciwieństwie do innych odpowiedzi z funkcją powerset.
To powinno być możliwe do gry w golfa, biorąc pod uwagę, że jestem okropny w CJam.
Zmiany:
Helen odciąła 2 bajty!
Stary:
q',/S*~_,1-:L{LX-,0a\+[{X1++}*](;{_X=\_Y=@*\}fY}fX]~;]_{\_@e=}$\;_,1-=
nowy:
q',/S*~_,(:L{LX-,0a\+[{X1++}*](;{_X=\_Y=@*\}fY}fX]~;]_{\_@e=}$\;_,(=
Zmieniając
1-
s na po prostu(
uzyskujemy ten sam efekt, ale z mniejszą liczbą bajtów.źródło
Java (JDK 10) , 132 bajty
Wypróbuj online!
źródło
Haskell ,
9694 bajtów-2 bajty dzięki Nimi (stosując
sortOn(0<$)
zamiastlength
)!Wypróbuj online!
źródło
MATLAB 39 bajtów
Zobacz także odpowiedź Jacoba Watsona
źródło
b=triu(a'*a,1);
pozwala zaoszczędzić 4 bajty.triu
celowo, ale jakoś odpłynąłemSQL Server, 93 bajty
Zakłada się, że dane wejściowe pochodzą z tabeli formularza
Przykładowa populacja tabeli:
Wyjaśnienie:
Zakładam, że z „listą liczb całkowitych” będzie powiązany indeks, którym w moim przypadku jest kolumna
i
. Kolumnaa
zawiera wartości listy.Tworzę produkty każdej pary, w których lewa para pojawia się na liście wcześniej niż prawa para. Następnie grupuję produkt i sortuję według najbardziej zaludnionej liczby.
Trochę mi smutno, że nie skorzystałem z żadnych klauzul cte ani partycjonowania, ale były one po prostu za długie.
SELECT
jest bardzo drogim słowem kluczowym.Alternatywnie, 183 bajty
Jeśli SQL nie otrzyma oddzielnej kolumny indeksu, oto rozwiązanie, w którym tworzę indeks za pomocą
ROW_NUMBER
funkcji. Osobiście nie dbam o zamówienie, ale zamówienie jest wymagane, a użyciea
kolumny jest najkrótsze.źródło
CJam , 29 bajtów
Wypróbuj online!
źródło
Burleska - 8 bajtów
Wypróbuj online tutaj.
(i tak, Burleska ma również polecenie „najmniej wspólnego elementu”)
źródło
C # (interaktywny kompilator Visual C #) , 95 bajtów
Wypróbuj online!
Kod mniej golfowy:
źródło
PHP, 91 bajtów
pobiera dane wejściowe z argumentów wiersza poleceń; uruchom
-nr
lub wypróbuj online .Użyj PHP 7, aby uniknąć ostrzeżenia TRYB WYSOKIEGO.
źródło
J,
29252423 bajtówWypróbuj online!
w jaki sposób
źródło
Japt
-h
, 11 bajtówSpróbuj
Spróbuj
źródło
APL (NARS), 53 znaki, 106 bajtów
Test:
źródło