Inspirado por esta pergunta e refinado por Luis Mendo .
Desafio
Dada uma matriz 2D de números inteiros, cada linha tem um valor máximo. Um ou mais elementos de cada linha serão iguais ao valor máximo de suas respectivas linhas. Seu objetivo é determinar quais colunas contêm mais entradas iguais ao valor máximo de suas respectivas linhas, bem como o número máximo de linhas encontrado nessas colunas.
Entrada
- A entrada será uma matriz
M
x não vaziaN
(M
> 0 eN
> 0), em qualquer forma que seja adequada ao seu idioma de escolha.
Resultado
- Seu programa deve retornar o índice de cada coluna que contém o número máximo de máximos em linhas (como valores separados ou uma lista). A indexação baseada em 0 ou 1 pode ser usada (especifique na sua descrição).
- Seu programa também deve retornar o número de máximos presentes nessas colunas (um único número).
- A ordem / formato da saída é flexível, mas deve ser explicada no texto que acompanha sua resposta.
informação adicional
- Todas as entradas na matriz de entrada serão números inteiros positivos.
- Se o valor máximo de uma linha for compartilhado por vários elementos nessa linha, todas as ocorrências desse valor serão contabilizadas no total de suas colunas.
- Se várias colunas contiverem o mesmo número de máximos, você deverá retornar uma lista de todas as colunas que possuam esse número de máximos.
Um exemplo
Considere entrada
7 93
69 35
77 30
A linha 1 possui no máximo 93, que ocorre apenas uma vez, ou seja, na coluna 2. Linha 2: ocorre na coluna 1. Linha 3: também na coluna 1. Portanto, a coluna vencedora é 1, com 2 máximos. Assim, a saída será [1] [2]
. Se mudarmos a entrada para
7 93
69 35
77 77
a saída será [1 2] [2]
, porque as duas colunas têm 2 máximos.
Casos de teste
input => output ( [1-based index array], [nMaxima] )
----------------------------------------------
7 93
69 35 => [1], [2]
77 30
7 93
69 35 => [1 2], [2]
77 77
1 2 3 4 => [4], [2]
5 6 7 8
16 2 3 13
5 11 10 8 => [1 2 4], [1]
9 7 6 12
1 1 1 1 => [1 2 3 4], [1]
25 6 13 25 => [1 4], [1]
1
2
3 => [1], [4]
4
100 => [1], [1]
Pontuação
Este é o código-golfe , o código mais curto em bytes vence. O desempatador vai para a resposta anterior.
Entre os melhores
Abaixo está um trecho de pilha para analisar todas as entradas.
fonte
Respostas:
Geléia , 9 bytes
Entrada é uma lista 2D, saída é um par: uma lista de índices baseados em 1 e o número máximo de máximos.
Experimente online! ou verifique todos os casos de teste .
Como funciona
fonte
J, 27 bytes
Este é um verbo monádico, usado da seguinte forma no caso do segundo exemplo:
A saída consiste em duas caixas e usa indexação baseada em 0. Experimente aqui!
Explicação
fonte
MATL, 17 bytes
A primeira saída é o número máximo de máximos e a segunda saída são as colunas nas quais isso ocorreu (indexação baseada em 1).
Experimente Online!
Explicação
fonte
MATL , 17 bytes
A entrada é uma matriz 2D, com linhas separadas por ponto e vírgula. Portanto, as entradas para os casos de teste são
A saída é: primeiro a quantidade máxima de máximos, depois um ou mais índices de coluna.
Experimente online!
Explicação
Isso usa uma abordagem diferente da resposta de Suever .
Primeiro, uma matriz de valores lógicos (
true
efalse
) é calculada, ondetrue
indica a presença de um máximo de linha. Em seguida, os índices da coluna dostrue
valores são extraídos em um vetor. Finalmente, o modo desse vetor é calculado (número máximo de máximos), juntamente com todos os valores mais frequentes (índices de coluna desejados).fonte
Pitão,
201917 bytes1 byte graças a @Suever .
1 byte graças a @Jakube .
Suíte de teste.
A saída é indexada em 0.
A ordem é revertida.
Todas as entradas
Todas as saídas
Como funciona
fonte
CJam ,
383531 bytes2 bytes a menos graças ao @FryAmTheEggMan, com a ajuda também de @quartata. Agradecemos também a @Dennis por remover mais 4 bytes.
A entrada é do formato
A saída é uma matriz de índices de coluna com base em 1 e um número.
Experimente online!
fonte
q~_::e>.f=:.+_:e>_@f{=U):Ua*~}p
salva alguns bytes. Transformar em um bloco de código economizaria mais 1.{=U):Ua*~}
faz ...Pyke, 17 bytes
Experimente aqui!
fonte
Python 2, 106 bytes
Entrada é uma lista 2D de flutuadores, saída é um par: uma lista de índices baseados em 0 e um número inteiro.
Teste em Ideone .
fonte
Julia, 54 bytes
Entrada é uma matriz, saída é um par: uma lista de índices baseados em 1 e o número máximo de máximos.
Experimente online!
fonte
JavaScript (ES6), 111 bytes
Retorna uma matriz de dois elementos; a primeira é a contagem máxima de máximos, a segunda é a matriz de colunas indexadas a zero com essa contagem.
fonte
Oitava,
4746 bytesIsso cria uma função anônima que se atribui automaticamente
ans
e pode ser executada usandoans([1 2 3; 4 5 6])
. Ele retorna uma matriz de célula de dois elementos em que o primeiro elemento é o número máximo de máximos e o segundo é o índice baseado em 1 das colunas que contêm esses máximos.Todos os casos de teste
fonte
Python 3, 142 bytes
O algoritmo aqui é basicamente, percorra cada linha e aumente a pontuação das colunas que têm o máximo dessa linha. Em seguida, encontre o máximo das pontuações e encontre as colunas que possuem essa pontuação máxima e retorne-as. As colunas são indexadas em 1. Tentei alinhar isso em um lambda, mas ao gerar as pontuações coluna por coluna, era 153 bytes.
Casos de teste
fonte
Clojure, 150 bytes
Cara, eu tenho a sensação de que isso pode ser muito simplificado. Pelo menos, produz a saída correta.
fonte
05AB1E , 14 (ou 12) bytes
Saídas no formato
[[1-indexed columns-list], maxima]
.Experimente online ou verifique todos os casos de teste .
Se é permitido ter itens
0
na lista de colunas que ignoramos, pode ser 2 bytes a menos removendo o0K
:Experimente online ou verifique todos os casos de teste .
Explicação:
fonte