Irá ser dada uma matriz quadrada de inteiros M e outro inteiro positivo n , estritamente menor que o tamanho de M . Sua tarefa é gerar todas as sub-matrizes quadradas de M de tamanho n .
Para os fins deste desafio, um sub-matriz quadrada é um grupo de adjacentes linhas e colunas contido em H .
Formatos de entrada / saída
Você é livre para escolher outros formatos razoáveis; estes são apenas alguns exemplos.
Entrada
- Uma matriz no tipo de matriz nativa (se o seu idioma tiver um)
- Uma matriz 2D (uma matriz de matrizes 1D, cada uma correspondendo a uma linha / uma coluna)
- Uma matriz 1D (uma vez que a matriz é sempre quadrada)
- Uma string (você escolheu o espaçamento, mas não abuse disso de nenhuma maneira), etc.
Resultado
- Uma matriz de matrizes.
- Uma matriz 4D, em que cada elemento (lista 3D) representa as sub-matrizes em uma linha / coluna.
- Uma matriz 3D, em que cada elemento (lista 2D) representa uma sub-matriz.
- Uma representação em cadeia das sub-matrizes resultantes, etc.
Especificações
- Você também pode escolher o tamanho de M como entrada. É garantido que seja pelo menos 2 .
- A orientação da saída é arbitrária: você pode optar por gerar as submatrizes como listas de colunas ou listas de linhas, mas sua escolha deve ser consistente.
- Você pode competir em qualquer linguagem de programação e pode receber e fornecer saída por qualquer método padrão , observando que essas brechas são proibidas por padrão.
- Isso é código-golfe , então a submissão mais curta (em bytes) para todos os idiomas vence.
Exemplo
Dado n = 3 e M :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
As possíveis submatrizes 3x3 são:
+ ------- + + -------- + 1 2 3 4 1 2 3 4 1 2 3 | 4 1 | 2 3 4 | + -------- + + -------- + 5 6 7 | 8 5 | 6 7 8 | | 5 6 7 | 8 5 | 6 7 8 | | 9 10 11 | 12 9 | 10 11 12 | | 9 10 11 | 12 9 | 10 11 12 | + ------- + + -------- + | 13 14 15 | 16 13 | 14 15 16 | 13 14 15 16 13 14 15 16 + -------- + + -------- +
Portanto, o resultado seria:
[[[1, 2, 3], [5, 6, 7], [9, 10, 11]], [[2, 3, 4], [6, 7, 8], [10, 11, 12]], [[5, 6, 7], [9, 10, 11], [13, 14, 15]], [[6, 7, 8], [10, 11, 12], [14, 15, 16]]]
Como observado acima, uma saída de:
[[[1, 5, 9], [2, 6, 10], [3, 7, 11]], [[2, 6, 10], [3, 7, 11], [4, 8, 12]], [[5, 9, 13], [6, 10, 14], [7, 11, 15]], [[6, 10, 14], [7, 11, 15], [8, 12, 16]]]
também seria aceitável, se você optar por retornar as submatrizes como listas de linhas.
Casos de teste
As entradas M, n :
[[1,2,3],[5,6,7],[9,10,11]], 1
[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]], 3
[[100,-3,4,6],[12,11,14,8],[0,0,9,3],[34,289,-18,3]], 2
[[100,-3,4,6],[12,11,14,8],[9,10,11,12],[13,14,15,16]], 3
E as saídas correspondentes (sub-matrizes fornecidas como listas de linhas):
[[[1]],[[2]],[[3]],[[5]],[[6]],[[7]],[[9]],[[10]],[[11]]]
[[[1,2,3],[5,6,7],[9,10,11]],[[2,3,4],[6,7,8],[10,11,12]],[[5,6,7],[9,10,11],[13,14,15]],[[6,7,8],[10,11,12],[14,15,16]]]
[[[100,-3],[12,11]],[[-3,4],[11,14]],[[4,6],[14,8]],[[12,11],[0,0]],[[11,14],[0,9]],[[14,8],[9,3]],[[0,0],[34,289]],[[0,9],[289,-18]],[[9,3],[-18,3]]]
[[[100,-3,4],[12,11,14],[9,10,11]],[[-3,4,6],[11,14,8],[10,11,12]],[[12,11,14],[9,10,11],[13,14,15]],[[11,14,8],[10,11,12],[14,15,16]]]
Ou, como listas de colunas:
[[[1]],[[2]],[[3]],[[5]],[[6]],[[7]],[[9]],[[10]],[[11]]]
[[[1,5,9],[2,6,10],[3,7,11]],[[2,6,10],[3,7,11],[4,8,12]],[[5,9,13],[6,10,14],[7,11,15]],[[6,10,14],[7,11,15],[8,12,16]]]
[[[100,12],[-3,11]],[[-3,11],[4,14]],[[4,14],[6,8]],[[12,0],[11,0]],[[11,0],[14,9]],[[14,9],[8,3]],[[0,34],[0,289]],[[0,289],[9,-18]],[[9,-18],[3,3]]]
[[[100,12,9],[-3,11,10],[4,14,11]],[[-3,11,10],[4,14,11],[6,8,12]],[[12,9,13],[11,10,14],[14,11,15]],[[11,10,14],[14,11,15],[8,12,16]]]]
code-golf
array-manipulation
matrix
Mr. Xcoder
fonte
fonte
Respostas:
05AB1E , 8 bytes
Experimente online!
Explicação
fonte
MATL , 4 bytes
Entradas são
n
, entãoM
.A saída é uma matriz, em que cada coluna contém todas as colunas de uma submatriz.
Experimente online!
Explicação
Mais a sério,
t
leva a entrada n implicitamente e a duplica na pilha.h
concatena ambas as cópias de n , produzindo a matriz [n, n] .YC
pega a entrada M implicitamente, extrai todos os seus blocos de tamanho [n, n] e os organiza como colunas na ordem principal da coluna. Isso significa que as colunas de cada bloco são empilhadas verticalmente para formar uma única coluna.fonte
APL (Dyalog Unicode) , SBCS de 26 bytes
Infixo anônimo lambda tomando n como argumento à esquerda e M como argumento à direita.
Experimente online!
{
…}
Lambda anônimo, onde⍺
está o argumento da esquerda e⍵
o argumento da direita:⊢⍵
gera o argumento correto (⊢
separa⍺ ⍺
de⍵
)⊢⌺⍺ ⍺
todas⍺
as⍺
submatrizes, incluindo as que se sobrepõem às arestas (são preenchidas com zeros)(
…)↓
Solte os seguintes elementos numéricos nas duas primeiras dimensões:⍺÷2
metade de⍺
¯1+
um negativo mais que⌈
arredondar para cima2⍴
ciclicamente r eshape para uma lista de dois elementoss←
armazenar ems
(para s hards)-
negar (ou seja, cair por trás)s↓
soltars
elementos ao longo da primeira e segunda dimensões (de frente)fonte
APL (Dyalog Unicode) , 31 bytes
Experimente online!
Uma abordagem diferente da de Adám.
fonte
⍉
com sucesso em casos não triviais, você realmente dominou a programação de arrays.R , 75 bytes
Experimente online!
Leva
M
,N
e oS
ize da matriz.Imprime as matrizes resultantes em stdout;
drop=F
é necessário para que, noN=1
caso, a indexação não elimine odim
atributo e produza um emmatrix
vez de umvector
.fonte
J ,
118 bytes-3 bytes graças a milhas
Experimente online!
fonte
<;._3~,~
e, em vez disso, usa um gancho para emparelhar o tamanho consigo mesmo, depois corta e encaixa cada um, uma vez que uma matriz de matrizes é permitida como saída.Haskell , 67 bytes
Experimente online!
fonte
Gelatina , 5 bytes
Usa o formato de saída 4D. Para 3D, adicione a
Ẏ
para 6 bytes .Experimente online!
Como funciona
fonte
ṡ€Zṡ€
.Braquilog , 13 bytes
Experimente online!
Isso retorna listas de colunas.
Tecnicamente,
tN&s₎\;Ns₎
é um predicado gerador que unifica sua saída com qualquer uma dessas submatrizes. Usamos{…}ᶠ
apenas para expor todas as possibilidades.Explicação
fonte
Stax , 10 bytes
Executá-lo
A representação ascii do mesmo programa é
Funciona assim.
fonte
JavaScript (ES6), 91 bytes
Recebe entrada na sintaxe de currying
(a)(n)
. Retorna os resultados como listas de linhas.Casos de teste
Mostrar snippet de código
fonte
APL (Dyalog Classic) ,
2423 bytesExperimente online!
o resultado é uma matriz de matrizes, embora a formatação de saída de Dyalog não torne isso muito óbvio
insira a matriz (
⎕
), transforme cada elemento em uma matriz aninhada própria (⍪¨
), obtenha concatenações de prefixo por linha (,\
) e coluna (⍪⍀
), insira n (⎕
), descarte as primeiras n-1 linhas e colunas de matrizes aninhadas ((¯1-t←-2⍴⎕)↓
), pegue o canto inferior direito n-a-n de cada matriz (t∘↑¨
)fonte
Ruby , 63 bytes
Experimente online!
Este é um lambda que pega uma matriz 2D e uma int, retornando uma matriz 3D.
Ungolfed:
fonte
Python 2 , 91 bytes
Experimente online!
fonte
def f(a,n):R=range(len(a)+1-n);print[[r[i:i+n]for r in a[j:j+n]]for i in R for j in R]
economiza cinco.