Dada una matriz entera a
y un entero no negativo i
, genera un mapeo b
que mapea los valores distintos en la i
columna th a
a las filas de a
quienes tienen ese valor en la i
columna th.
Puede suponer que i
está en el rango medio abierto [0, num_cols(a))
(o [1, num_cols(a)]
si elige usar índices basados en 1), y que todos los enteros están dentro del rango representable para su idioma. La entrada y la salida pueden realizarse de cualquier manera razonable, siempre que satisfaga los requisitos básicos del desafío (matriz 2D -> mapeo de ints a matrices 2D de ints). Mientras el mapeo sea claro y consistente, las claves no necesitan ser incluidas en la salida.
Ejemplos
[[1]], 0 -> {1: [[1]]}
[[3, 4, 5], [1, 4, 2], [5, 5, 5], [7, 7, 7], [1, 5, 9]], 1 -> {4: [[3, 4, 5], [1, 4, 2]], 5: [[5, 5, 5], [1, 5, 9]], 7: [[7, 7, 7]]}
[[1, 2, 3, 4, 5], [5, 4, 3, 2, 1], [2, 3, 4, 5, 6], [8, 9, 100, 0, 2]], 4 -> {5: [[1, 2, 3, 4, 5]], 1: [[5, 4, 3, 2, 1]], 6: [[2, 3, 4, 5, 6]], 2: [[8, 9, 100, 0, 2]]}
Este es el código de golf , por lo que gana la respuesta más corta en bytes.
Respuestas:
Octava , 24 bytes
Pruébalo en línea!
Esto crea una función anónima que devuelve una matriz cuyas filas coinciden con los criterios. Octave indexa las matrices en 1, no en cero, y las filas de una matriz están separadas por a
;
.Las matrices son lo que Octave hace mejor, tan bien, de hecho, que este desafío se puede resolver utilizando sintaxis pura, sin funciones integradas.
Explicación
fuente
Rubí , 26 bytes
Pruébalo en línea!
fuente
Wolfram Language (Mathematica) , 21 bytes
1 indexado. Devuelve un
Association
mapeo.Pruébalo en línea!
Este es un caso raro en el que una función más larga (
Extract
) reduce el recuento de bytes (el más corto esPart
o[[ ... ]]
) porqueExtract
puede curry. El resultado es esta solución de dos funciones extremadamente concisa.Explicación
Función que extrae el
<second input>
elemento th.Agrupe las
<first input>
listas asociadas con claves distintas<above function>[element]
.fuente
Haskell ,
6460 bytesPruébalo en línea!
fuente
Limpio , 40 bytes
Pruébalo en línea!
Un lambda (
:: Int [[Int]] Int -> [[Int]]
) donde una aplicación parcial de solo los dos primeros argumentos proporciona una asignación en el tercer argumento.fuente
J , 16 bytes
-3 bytes gracias a FrownyFrog!
Pruébalo en línea!
Explicación:
Un verbo diádico, tomando
i
como argumento izquierdo ya
como derecho.]
es el argumento correctoa
{"1
encuentra los números eni
la columna th de cada fila</.
agrupa grupos del argumento derecho, seleccionados por las teclas, proporcionados por el izquierdo~.@[
encuentra las llaves únicas;"0
vincula las teclas a los grupos seleccionadosfuente
;"0
en lugar de,:
salva 3jq, 100 bytes
usa un objeto para la salida, toma un argumento de línea de comando
$f
más una matriz en la entrada estándardesobuscado:
fuente
R ,
7955 bytesPruébalo en línea!
24 bytes recortados por @JayCe
fuente
cat(z)
antes de imprimir para imprimir también la clave (no estoy claro si es necesario).Python 3 , 45 bytes
Pruébalo en línea!
Devuelve la asignación representada como una lambda anónima.
fuente
Protón , 29 bytes
Pruébalo en línea!
-3 bytes gracias al Sr. Xcoder usando curry y
filter
(TBH, estoy un poco sorprendido de quefilter
realmente haya funcionado)fuente
filter
ahorran tres bytes.JavaScript (Node.js) , 29 bytes
Pruébalo en línea!
Actualizado ahora que me doy cuenta de los requisitos de salida suelta. Esto utiliza el curry como una técnica de golf, y también devuelve una función que toma una entrada
n
y la asigna a las matrices adecuadas.fuente
Jalea , 5 bytes
Pruébalo en línea!
Omite las claves, pero debe quedar claro.
Argumento 1: i + 1
Argumento 2: a
fuente
Java 10,
13564 bytesDevuelve la
Function<Integer, List<int[]>>
aceptación de una entrada de enteron
, que devuelve una Lista de matrices (matrices-filas) donde losi
valores 'th son iguales a los dadosn
.Pruébalo en línea.
Explicación:
fuente