Dada uma matriz inteira a
e um inteiro não negativo i
, produz um mapeamento b
que mapeia os valores distintos na i
th coluna de a
para linhas de a
quem tem esse valor na i
th coluna.
Você pode assumir que i
está no intervalo semi-aberto [0, num_cols(a))
(ou [1, num_cols(a)]
se você optar por usar índices baseados em 1) e que todos os números inteiros estão dentro do intervalo representável para o seu idioma. A entrada e a saída podem ser feitas de qualquer maneira razoável, desde que atenda aos requisitos básicos do desafio (matriz 2D -> mapeamento de entradas para matrizes 2D de entradas). Desde que o mapeamento seja claro e consistente, as chaves não precisam ser incluídas na saída.
Exemplos
[[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]]}
Isso é código-golfe , então a resposta mais curta em bytes vence.
Respostas:
Oitava , 24 bytes
Experimente online!
Isso cria uma função anônima que retorna uma matriz cujas linhas correspondem aos critérios. Índices de oitava matrizes em 1, e não zero, e as linhas de uma matriz são separadas por a
;
.Matrizes são o que o Octave faz melhor - tão bem que, na verdade, esse desafio pode ser resolvido usando a sintaxe pura, sem funções internas.
Explicação
fonte
Ruby , 26 bytes
Experimente online!
fonte
Wolfram Language (Mathematica) , 21 bytes
1 indexado. Retorna um
Association
mapeamento.Experimente online!
Este é um caso raro em que uma função mais longa (
Extract
) reduz a contagem de bytes (sendo a mais curtaPart
ou[[ ... ]]
) porqueExtract
pode curry. O resultado é esta solução de duas funções extremamente concisa.Explicação
Função que extrai o
<second input>
elemento th.Agrupe as
<first input>
listas em associadas a chaves distintas<above function>[element]
.fonte
Haskell ,
6460 bytesExperimente online!
fonte
Limpo , 40 bytes
Experimente online!
Um lambda (
:: Int [[Int]] Int -> [[Int]]
) onde uma aplicação parcial dos dois primeiros argumentos fornece um mapeamento no terceiro argumento.fonte
J , 16 bytes
-3 bytes graças ao FrownyFrog!
Experimente online!
Explicação:
Um verbo diádico, tendo
i
como argumento esquerdo ea
como direito.]
é o argumento certo,a
{"1
localiza os números nai
coluna th em cada linha</.
grupos de caixas do argumento da direita, selecionado pelas teclas, fornecido pela esquerda~.@[
encontra as chaves exclusivas;"0
vincula as chaves aos grupos selecionadosfonte
;"0
em vez de,:
salva 3jq, 100 bytes
usa um objeto para saída, usa um argumento de linha de comando
$f
mais uma matriz na entrada padrãodesofuscada:
fonte
R ,
7955 bytesExperimente online!
24 bytes eliminados por @JayCe
fonte
cat(z)
impressão antes para também imprimir a chave (não sei se isso é necessário).Python 3 , 45 bytes
Experimente online!
Retorna o mapeamento representado como uma lambda anônima.
fonte
Próton , 29 bytes
Experimente online!
-3 bytes, graças ao Sr. Xcoder usando curry e
filter
(TBH, estou meio surpreso quefilter
realmente funcionou)fonte
filter
economizam três bytes.JavaScript (Node.js) , 29 bytes
Experimente online!
Atualizado agora que percebo os requisitos de saída soltos. Isso usa o curry como uma técnica de golfe e também retorna uma função que leva uma entrada
n
e mapeia isso para as matrizes apropriadas.fonte
Gelatina , 5 bytes
Experimente online!
Omite as teclas, mas deve estar claro.
Argumento 1: i + 1
Argumento 2: a
fonte
Java 10,
13564 bytesRetorna a
Function<Integer, List<int[]>>
aceitação de uma entrada de número inteiron
, que retorna uma Lista de matrizes (linhas da matriz) em que osi
valores são iguais aos dadosn
.Experimente online.
Explicação:
fonte