Você recebe um quadrado matriz e uma lista (ou vetor) de comprimento contendo os números 1 a n (ou 0 a n-1 ). Sua tarefa é reordenar as colunas e linhas da matriz A de acordo com a ordem especificada em u .
Isto é, vai construir uma matriz de , onde a elemento -ésimo é o elemento -ésimo de . Você também deve gerar o inverso dessa ação; isto é, a (i, j) -ésimo elemento de vai acabar na posição em uma nova matriz .
Por exemplo, dado
a saída deve ser
Você pode obter entrada e saída através de qualquer um dos métodos de E / S padrão. Você não precisa especificar qual matriz é ou , desde que você produza as duas. Você pode assumir que contém apenas números inteiros positivos e pode usar a indexação baseada em 1 ou 0 para . Você deve suportar matrizes até pelo menos tamanho .
Exemplo
===== Input =====
A =
35 1 6 26 19 24
3 32 7 21 23 25
31 9 2 22 27 20
8 28 33 17 10 15
30 5 34 12 14 16
4 36 29 13 18 11
u=
3 5 6 1 4 2
==== Output =====
B =
2 27 20 31 22 9
34 14 16 30 12 5
29 18 11 4 13 36
6 19 24 35 26 1
33 10 15 8 17 28
7 23 25 3 21 32
C =
17 15 8 10 28 33
13 11 4 18 36 29
26 24 35 19 1 6
12 16 30 14 5 34
21 25 3 23 32 7
22 20 31 27 9 2
fonte
0
como separador?u = [2, 0, 1]
?Respostas:
R , 42 bytes
Experimente online!
Toma
A
como ummatrix
e índices baseados em 1o
.fonte
MATL ,
1513 bytesEntradas
u
, entãoA
.Saídas
B
, entãoC
sem um separador, pois não há ambiguidade.Experimente online!
Explicação
fonte
Oitava , 33 bytes
Experimente online!
Obrigado a Luis por corrigir um erro e salvar vários bytes!
A indexação básica funciona aqui para as duas tarefas, definindo um vetorv igual à permutação que desfaz u . Ou seja, se u=(3,1,2) , o primeiro elemento de v é 2, uma vez que 1 está na segunda posição de u . Isso é realizado com a função de classificação do Octave .
fonte
Python 3 com numpy,
5145 bytesExperimente online!
-6 bytes graças a @xnor
A função usa dois argumentos: uma0 0 a n - 1 .
numpy
matriz e um vetor de permutação com valores defonte
for
loop não veio à minha mente.Wolfram Language (Mathematica) , 30 bytes
Experimente online!
Entrada como
f[A][u]
.fonte
PowerShell ,
787371 bytesExperimente online .
fonte
Gelatina , 13 bytes
Experimente online!
fonte
J , 19 bytes
Experimente online!
]/:~"1/:
/:
classifica o arg esquerdo (matriz) de acordo com a ordem que classificaria o arg direito (ordem especificada). Isso classifica as linhas./:~"1
novamente de acordo com a ordem especificada]
. Mas desta vez estamos classificando com a classificação 1, ou seja, classificando cada linha, o que tem o efeito de classificar colunas.],:/:
Aplicamos o acima exposto usando a ordem especificada]
e a classificação da ordem especificada/:
. Isso nos dá os 2 resultados que queremos.fonte
u
tem permissão para ser baseado em 0, então sort (/:
) pode ser indexado ({
) com argumentos trocadosJavaScript (Node.js) ,
777068 bytesExperimente online!
fonte
v
era. É interessante como você encontrou um uso para falha silenciosa no modo não estrito da atribuição de propriedades a um valor primitivo e o usou para o seu caso base de recursão.APL (Dyalog Extended) , SBCS de 12 bytes
Experimente online!
⎕
[3,1,2]
⍮⍨
justaposição-selfie;[[3,1,2],[3,1,2]]
⍋¨
permutação-inversão de cada um;[[2,3,1],[2,3,1]]
⍛
então⍮⍨
justapor com a própria[[[2,3,1],[2,3,1]],[[3,1,2],[3,1,2]]]
⌷
∘
⎕
¨
fonte
J ,
17 16 1514 bytes-1 graças a @Jonah
Experimente online!
fonte
([{"1{)~(,:/:)
: Experimente online!Carvão , 24 bytes
Experimente online! Link é a versão detalhada do código. Indexado a 0. Nota: Espaço à direita. Explicação:
fonte
Kotlin , 213 bytes
Experimente online!
fonte
APL + WIN, 21 bytes
Solicita a entrada de u seguida de a. Saídas b imediatamente acima da parte superior de c sem separador:
Experimente online! Cortesia de Dyalog Classic
fonte
Perl 5 , 79 bytes
Experimente online!
fonte
Geléia ,
12 1113 bytes+2 :( para corrigir casos quando B = C
Um link diádico que aceita uma lista de listas,
A
(n
porn
), à esquerda e uma lista dos primeirosn
números inteiros à direitau
, que produz uma lista de listas de listas[B, C]
,.Experimente online!
Quão?
fonte
q, 26 bytes
iasc
retorna índices para classificar seu argumento.fonte
Limpo , 91 bytes
Experimente online!
Define
$ :: {{a}} [Int] -> [{{a}}]
(usado coma = Int
) a obtenção de uma matriz de matrizes e uma lista de índices baseados em zero, retornando uma lista de matrizes de matrizes contendo B e C.fonte
Python 3 , 91 bytes
Experimente online!
Pega parâmetros como uma lista 2D e 1D e retorna uma lista contendo duas listas 2D B e C. Não tenho certeza se existe uma maneira mais limpa de executar todos os loops for-loops.
fonte
C ++ (gcc) ,
148142 bytesExperimente online!
Graças à sugestão do @ceilingcat, use #import <queue> em vez de <vector>, que traz misteriosamente std :: vector
fonte