Não confunda com Mínimo Múltiplo Comum .
Dada uma lista de números inteiros positivos com mais de um elemento, retorne o produto mais comum de dois elementos na matriz.
Por exemplo, o MCM da lista [2,3,4,5,6]
é 12
, pois uma tabela de produtos é:
2 3 4 5 6
---------------
2 | # 6 8 10 12
3 | # # 12 15 18
4 | # # # 20 24
5 | # # # # 30
6 | # # # # #
Obrigado DJMcMayhem pela mesa
Como 12
aparece mais vezes (duas vezes como 2*6
e 3*4
). Observe que não estamos incluindo o produto de um elemento e ele próprio, portanto, 2*2
ou 4*4
não, aparece nesta lista. No entanto, elementos idênticos ainda serão multiplicados, portanto a tabela para[2,3,3]
parece com:
2 3 3
----------
2 | # 6 6
3 | # # 9
3 | # # #
Com o MCM sendo 6
.
Em caso de empate, você pode retornar qualquer um dos elementos empatados ou uma lista de todos eles.
- Isso é código-golfe , então a contagem de bytes mais curta para cada idioma vence!
Casos de teste:
[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
Brincadeira
fonte
fonte
[3,3,3] -> 9
). Com todos os seus casos de teste atuais, filtrando quaisquer pares em que os elementos sejam os mesmos (mesmo para casos de teste como[2,3,3]
os mesmos valores) ainda manterão os resultados corretos, mas falharão nesse caso de teste porque nenhum permanecerá após a filtragem.Respostas:
Braquilog , 11 bytes
Experimente online!
Explicação
fonte
R ,
545041 bytesExperimente online!
Como alternativa, para
545344 bytes:Experimente online!
Em princípio, a última versão gera o resultado relevante mesmo sem a
names
função, mas seguida pela contagem desses produtos mais frequentes, que não são solicitados ...Obrigado a CriminallyVulgar por -4 e -1 e Giuseppe por -9 em ambos.
fonte
combn(scan(),2,prod)
funciona em vez de usarapply
Gelatina , 6 bytes
Experimente online! ou Confira a suíte de testes .
Como funciona
fonte
Pitão, 12 bytes
Suíte de teste
Primeiro, pegamos todas as 2 combinações de elementos da entrada sem substituição (
.cQ2
). Em seguida, mapeamos cada um desses pares para o seu produto (*M
). Em seguida, substituímos a variável de entrada pela lista de produtos (=
). Em seguida, classificamos a lista de produtos pelo número de ocorrências na lista de produtos (o/QN
). Por fim, pegue o elemento final da lista classificada (e
).fonte
MATL ,
87 bytesExperimente online!
(-1 byte usando o método da resposta do Sr. Xcoder Jelly .)
Resposta mais antiga:
8 bytes
Experimente online!
fonte
05AB1E ,
86 bytes-2 bytes graças a @Kaldo .
Experimente online ou verifique todos os casos de teste .
Explicação:
fonte
ù
.Mathematica, 32 bytes
-17 bytes (e uma correção) graças a JungHwan Min .
Função pura. Pega uma lista de números como entrada e retorna a lista de MCMs como saída.
fonte
{3, 3, 3}
. Corrigido:Commonest[1##&@@@#~Subsets~{2}]&
Subsets
não contava repetições como elementos separados. Parece que sim, então obrigado!MATLAB, 43 bytes
Também é uma espécie de trava-língua!
Explicação
fonte
I'*I*1-eye
Por que não apenasI'*I-eye
?Perl 6 ,
4138 bytesExperimente online!
fonte
:
.Stax ,
1210 bytesExecute e depure
fonte
Python 3 ,
7772 bytesExperimente online!
fonte
Anexo , 59 bytes
Experimente online!
Ainda estou trabalhando um pouco no golfe, mas acho que isso é quase ideal para a abordagem que escolhi.
Explicação
Esta é uma composição de três funções:
{Flat[UpperTriangle&1!Table&_!`*]^^0}
SortBy#`&&:`~
Last
A primeira função faz a maior parte do cálculo:
O segundo é um pouco complicado, mas faz algo bastante simples. Primeiro, é útil saber que
f&n
é uma função que, quando chamada com argumentos...x
, retornaf[...x, n]
.f&:n
é semelhante, retornandof[n, ...x]
. Agora, vamos decompor isso:Primeiro,
f#g
cria um garfo. Com a entradan
, ele retornaf[n, g[n]]
. No entanto, neste caso,f
é a função~SortBy
.~f
inverte os argumentos da função. Isso significa que~f#g
é equivalente af[g[n], n]
, ou aquiSortBy[(`& &: `~)[n], n]
,.`& &: `~
segue o formuláriof&:n
. Mas o que são`&
e`~
? São "cotações do operador" e retornam uma função equivalente ao operador entre aspas. Então, neste caso,`&
é a mesma coisa que${ x & y }
. Com isso em mente, essa expressão é equivalente ao seguinte para operadores binários:Isso gera a função
`~&x
, ondex
está o resultado da primeira função.n ~ a
conta as ocorrências den
ema
. Portanto, isso retorna uma função que conta as ocorrências do argumento na matriz computada da função 1.Voltando a
SortBy
, cada elemento na matriz pelo número de vezes que aparece nela.Por fim,
Last
pega o elemento que mais ocorre. Os laços são quebrados pelo algoritmo de classificação.fonte
[5, 2, 9, 10, 3, 4, 4, 4, 7] -> 16
em vez de20
sem ele.JavaScript (ES6),
7270 bytesExperimente online!
fonte
Carvão , 24 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
Enquanto a matriz de entrada não estiver vazia ...
... pop o último elemento e multiplique o restante da matriz por esse elemento ...
... e envie os resultados para a lista vazia predefinida.
Conte o número de vezes que cada produto aparece na lista e faça o máximo ...
... em seguida, filtre os produtos cuja contagem é igual a esse máximo ...
... em seguida, pop o último elemento e convertido em string para impressão implícita.
fonte
Casca , 7 bytes
Experimente online!
Explicação
fonte
APL (Dyalog Unicode) ,
29 2719 bytesExperimente online!
Tácito fn.
Agradecimentos a Adám pela versão tácita e 2 bytes.
Graças a ngn por 8 bytes!
Quão:
fonte
Japonês ,
2016 bytesExperimente online!
fonte
CJam ,
7068 bytesExperimente online!
Explicação
Você precisará rolar para a direita para ver as explicações, pois o código é bastante longo e também as explicações.
Este foi um pesadelo absoluto para escrever. O CJam não possui uma função de conjunto de potências (diferente de outras línguas de golfe - ótima opção da minha parte), o que significa que eu tive que encontrar manualmente o conjunto de potências. No entanto, isso me deu a oportunidade de ignorar qualquer número inválido de fatores, ao contrário de outras respostas com uma função de conjunto de poderes.
Isso deve ser jogável, considerando que eu sou péssimo no CJam.
Alterar:
Helen cortou 2 bytes!
Antigo:
q',/S*~_,1-:L{LX-,0a\+[{X1++}*](;{_X=\_Y=@*\}fY}fX]~;]_{\_@e=}$\;_,1-=
Novo:
q',/S*~_,(:L{LX-,0a\+[{X1++}*](;{_X=\_Y=@*\}fY}fX]~;]_{\_@e=}$\;_,(=
Alterando os
1-
para simplesmente(
obtemos o mesmo efeito, mas com uma contagem de bytes mais baixa.fonte
Java (JDK 10) , 132 bytes
Experimente online!
fonte
Haskell ,
9694 bytes-2 bytes graças a nimi (usando em
sortOn(0<$)
vez delength
)!Experimente online!
fonte
MATLAB 39 bytes
Confira também a resposta de Jacob Watson
fonte
b=triu(a'*a,1);
salva 4 bytes.triu
intialmente, mas me afastei de alguma formaSQL Server, 93 bytes
Presume-se que a entrada vem de uma tabela do formulário
Exemplo de população da tabela:
Explicação:
Presumo que uma "lista de números inteiros" terá um índice associado a eles, que no meu caso é a coluna
i
. A colunaa
contém os valores da lista.Crio produtos de cada par, em que o par esquerdo entra na lista mais cedo que o par direito. Em seguida, agrupo o produto e classifico pelo número mais populoso.
Estou um pouco triste por não ter usado nenhuma cláusula cte ou de particionamento, mas elas eram muito longas.
SELECT
é uma palavra-chave muito cara.Alternativa, 183 bytes
Se o SQL não tiver uma coluna de índice separada, aqui está uma solução em que eu crio um índice usando a
ROW_NUMBER
função Pessoalmente, não me importo com o pedido, mas é necessário um pedido e o uso doa
coluna é o mais curto.fonte
CJam , 29 bytes
Experimente online!
fonte
Burlesco - 8 bytes
Experimente online aqui.
(e sim, Burlesque também possui um comando para o "elemento menos comum")
fonte
C # (compilador interativo do Visual C #) , 95 bytes
Experimente online!
Menos código de golfe:
fonte
PHP, 91 bytes
recebe entrada de argumentos de linha de comando; execute
-nr
ou experimente online .Use o PHP 7 para evitar o aviso do modo estrito.
fonte
J,
29252423 bytesExperimente online!
quão
fonte
Japonês
-h
, 11 bytesTente
Tente
fonte
APL (NARS), 53 caracteres, 106 bytes
Teste:
fonte