Inspirado por esta pregunta y refinado por Luis Mendo .
Desafío
Dada una matriz 2D de enteros, cada fila tiene un valor máximo. Uno o más elementos de cada fila serán iguales al valor máximo de su fila respectiva. Su objetivo es determinar qué columna (s) contienen la mayoría de las entradas que son iguales al valor máximo de sus filas respectivas, así como el número de máximos en filas encontrados en estas columnas.
Entrada
- La entrada será una matriz
M
x no vacíaN
(M
> 0 yN
> 0) en cualquier forma que se adapte bien al idioma que elija.
Salida
- Su programa debe devolver el índice de cada columna que contiene el número máximo de máximos por fila (ya sea como valores separados o como una lista). Se puede usar la indexación basada en 0 o en 1 (especifique en su descripción).
- Su programa también debe devolver el número de máximos que estaban presentes en estas columnas (un solo número).
- El orden / formato de la salida es flexible, pero debe explicarse en el texto que acompaña a su respuesta.
Información Adicional
- Todas las entradas en la matriz de entrada serán enteros positivos.
- Si el valor máximo de una fila es compartido por varios elementos en esa fila, todas las ocurrencias de ese valor cuentan para el total de sus columnas.
- Si varias columnas contienen el mismo número de máximos, debe devolver una lista de todas las columnas que tenían este número de máximos.
Un ejemplo
Considerar entrada
7 93
69 35
77 30
La fila 1 tiene un máximo de 93, que ocurre solo una vez, es decir, en la columna 2. Fila 2: ocurre en la columna 1. Fila 3: también en la columna 1. Entonces la columna ganadora es 1, con 2 máximos. Por lo tanto, la salida será [1] [2]
. Si cambiamos la entrada a
7 93
69 35
77 77
la salida será [1 2] [2]
, porque ambas columnas tienen 2 máximos.
Casos de prueba
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]
Puntuación
Este es el código de golf , gana el código más corto en bytes. Tiebreaker va a la respuesta anterior.
Tabla de clasificación
A continuación se muestra un fragmento de pila para analizar todas las entradas.
fuente
Respuestas:
Jalea , 9 bytes
La entrada es una lista 2D, la salida es un par: una lista de índices basados en 1 y el número máximo de máximos.
Pruébalo en línea! o verificar todos los casos de prueba .
Cómo funciona
fuente
J, 27 bytes
Este es un verbo monádico, usado de la siguiente manera en el caso del segundo ejemplo:
La salida consta de dos cuadros y utiliza indexación basada en 0. Pruébalo aquí!
Explicación
fuente
MATL, 17 bytes
La primera salida es el número máximo de máximos y la segunda salida son las columnas en las que esto ocurrió (indexación basada en 1).
Pruébalo en línea!
Explicación
fuente
MATL , 17 bytes
La entrada es una matriz 2D, con filas separadas por punto y coma. Entonces las entradas para los casos de prueba son
La salida es: primero la cantidad máxima de máximos, luego uno o más índices de columna.
Pruébalo en línea!
Explicación
Esto utiliza un enfoque diferente de la respuesta de Suever .
Primero se calcula una matriz de valores lógicos (
true
yfalse
), dondetrue
indica la presencia de un máximo de fila. Luego, los índices de columna de lostrue
valores se extraen en un vector. Finalmente, se calcula el modo de ese vector (número máximo de máximos), junto con todos los valores que son los más frecuentes (índices de columna deseados).fuente
Pyth,
201917 bytes1 byte gracias a @Suever .
1 byte gracias a @Jakube .
Banco de pruebas.
La salida está indexada a 0.
El orden se invierte.
Todas las entradas
Todas las salidas
Cómo funciona
fuente
CJam ,
383531 bytes2 bytes menos gracias a @FryAmTheEggMan, con ayuda también de @quartata. Gracias también a @Dennis por eliminar 4 bytes más.
La entrada es de la forma
La salida es una matriz de índices de columna basados en 1 y un número.
Pruébalo en línea!
fuente
q~_::e>.f=:.+_:e>_@f{=U):Ua*~}p
Guarda algunos bytes. Convertirlo en un bloque de código ahorraría 1 más.{=U):Ua*~}
hace ...Pyke, 17 bytes
Pruébalo aquí!
fuente
Python 2, 106 bytes
La entrada es una lista 2D de flotantes, la salida es un par: una lista de índices basados en 0 y un número entero.
Pruébelo en Ideone .
fuente
Julia, 54 bytes
La entrada es una matriz, la salida es un par: una lista de índices basados en 1 y el número máximo de máximos.
Pruébalo en línea!
fuente
JavaScript (ES6), 111 bytes
Devuelve una matriz de dos elementos; el primero es el recuento máximo de máximos, el segundo es la matriz de columnas indexadas a cero con ese recuento.
fuente
Octava,
4746 bytesEsto crea una función anónima que se asigna automáticamente
ans
y se puede ejecutar usandoans([1 2 3; 4 5 6])
. Devuelve una matriz de celdas de dos elementos donde el primer elemento es el número máximo de máximos y el segundo es el índice basado en 1 de las columnas que contienen estos máximos.Todos los casos de prueba
fuente
Python 3, 142 bytes
El algoritmo aquí es básicamente, pasar por cada fila y aumentar la puntuación de las columnas que tienen el máximo de esa fila. Luego encuentre el máximo de los puntajes y las columnas que tienen ese puntaje máximo y devuélvalos. Las columnas están indexadas en 1. Intenté unir esto en una lambda, pero al generar los puntajes columna por columna fue 153 bytes.
Casos de prueba
fuente
Clojure, 150 bytes
Hombre que es largo, tengo la sensación de que esto podría simplificarse mucho. Al menos produce la salida correcta.
fuente
05AB1E , 14 (o 12) bytes
Salidas en el formato
[[1-indexed columns-list], maxima]
.Pruébelo en línea o verifique todos los casos de prueba .
Si se permite tener elementos
0
en la lista de columnas que ignoramos, podrían ser 2 bytes menos al eliminar0K
:Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
fuente