Se le dará una matriz cuadrada de números enteros M y otro número entero positivo n , estrictamente menor que el tamaño de M . Su tarea es generar todas las submatrices cuadradas de M de tamaño n .
Para los fines de este desafío, una sub-matriz cuadrada es un grupo de adyacentes filas y columnas contenida en M .
Formatos de entrada / salida
Usted es libre de elegir cualquier otro formato razonable, estos son solo algunos ejemplos.
Entrada
- Una matriz en el tipo de matriz nativa (si su idioma tiene uno)
- Una matriz 2D (una matriz de matrices 1D, cada una correspondiente a una fila / una columna)
- Una matriz 1D (ya que la matriz siempre es cuadrada)
- Una cadena (elegiste el espacio, pero no abuses de esto de ninguna manera), etc.
Salida
- Una matriz de matrices.
- Una matriz 4D, donde cada elemento (lista 3D) representa las submatrices en una fila / columna.
- Una matriz 3D, donde cada elemento (lista 2D) representa una submatriz.
- Una representación de cadena de las submatrices resultantes, etc.
Especificaciones
- También puede elegir tomar el tamaño de M como entrada. Se garantiza que sea al menos 2 .
- La orientación de la salida es arbitraria: puede optar por generar las submatrices como listas de columnas o listas de filas, pero su elección debe ser coherente.
- Puede competir en cualquier lenguaje de programación y puede tomar entradas y proporcionar salidas a través de cualquier método estándar , mientras toma nota de que estas lagunas están prohibidas por defecto.
- Este es el código de golf , por lo que gana el envío más corto (en bytes) para cada idioma .
Ejemplo
Dado n = 3 y M :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Las posibles submatrices 3x3 son:
+ ------- + + -------- + 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 + -------- + + -------- +
Entonces el resultado sería:
[[[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 se señaló anteriormente, una salida 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]]]
también sería aceptable si elige devolver las submatrices como listas de filas.
Casos de prueba
Las 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
Y las salidas correspondientes (submatrices dadas como listas de filas):
[[[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]]]
O, como listas de columnas:
[[[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
Sr. Xcoder
fuente
fuente

Respuestas:
05AB1E , 8 bytes
Pruébalo en línea!
Explicación
fuente
MATL , 4 bytes
Las entradas son
n, entoncesM.La salida es una matriz, donde cada columna contiene todas las columnas de una submatriz.
Pruébalo en línea!
Explicación
Más en serio,
ttoma la entrada n implícitamente y la duplica en la pila.hconcatena ambas copias de n , produciendo la matriz [n, n] .YCtoma la entrada M implícitamente, extrae todos sus bloques de tamaño [n, n] y los organiza como columnas en el orden de columnas principales. Esto significa que las columnas de cada bloque se apilan verticalmente para formar una sola columna.fuente
APL (Dyalog Unicode) , SBCS de 26 bytes
Infix anónimo lambda tomando n como argumento izquierdo y M como argumento derecho.
Pruébalo en línea!
{…}Lambda anónima donde⍺es el argumento izquierdo y⍵es el argumento correcto:⊢⍵producir el argumento correcto (se⊢separa⍺ ⍺de⍵)⊢⌺⍺ ⍺todas⍺las⍺submatrices, incluidas las que se superponen a los bordes (se rellenan con ceros)(…)↓Suelte los siguientes elementos numéricos a lo largo de las dos primeras dimensiones:⍺÷2medio de⍺¯1+uno negativo más eso⌈redondeo2⍴cíclicamente r eshape a una lista de dos elementoss←almacenar ens(para s hard)-negar (es decir, dejar caer desde la parte trasera)s↓soltarselementos a lo largo de la primera y segunda dimensiones (desde el frente)fuente
APL (Dyalog Unicode) , 31 bytes
Pruébalo en línea!
Un enfoque diferente al de Adám.
fuente
⍉para casos no triviales, entonces realmente ha dominado la programación de arreglos.R , 75 bytes
Pruébalo en línea!
Toma
M,Ny elStamaño de la matriz.Imprime las matrices resultantes en stdout;
drop=Fes necesario para que, en elN=1caso de que la indexación no elimine eldimatributo y produzca a enmatrixlugar de avector.fuente
J ,
118 bytes-3 bytes gracias a millas
Pruébalo en línea!
fuente
<;._3~,~y usa un gancho para emparejar el tamaño consigo mismo, luego corta y encajona cada uno ya que se permite una matriz de matrices como salida.Haskell , 67 bytes
Pruébalo en línea!
fuente
Jalea , 5 bytes
Utiliza el formato de salida 4D. Para 3D, agregue un
Ẏde 6 bytes .Pruébalo en línea!
Cómo funciona
fuente
ṡ€Zṡ€.Brachylog , 13 bytes
Pruébalo en línea!
Esto devuelve listas de columnas.
Técnicamente,
tN&s₎\;Ns₎es un predicado generador que unifica su salida con cualquiera de esas submatrices. Usamos{…}ᶠsolo para exponer todas las posibilidades.Explicación
fuente
Stax , 10 bytes
Ejecutarlo
La representación ascii del mismo programa es
Funciona así.
fuente
JavaScript (ES6), 91 bytes
Toma entrada en la sintaxis de curry
(a)(n). Devuelve los resultados como listas de filas.Casos de prueba
Mostrar fragmento de código
fuente
APL (Dyalog Classic) ,
2423 bytesPruébalo en línea!
el resultado es una matriz de matrices, aunque el formato de salida de Dyalog no lo hace muy obvio
ingrese la matriz (
⎕), convierta cada elemento en una matriz anidada propia (⍪¨), tome concatenaciones de prefijo por fila (,\) y por columna (⍪⍀), ingrese n (⎕), suelte las primeras filas n-1 y columnas de matrices anidadas ((¯1-t←-2⍴⎕)↓), tome la esquina inferior derecha n-por-n de cada matriz (t∘↑¨)fuente
Ruby , 63 bytes
Pruébalo en línea!
Esta es una lambda que toma una matriz 2D y una int, devolviendo una matriz 3D.
Sin golf:
fuente
Python 2 , 91 bytes
Pruébalo en línea!
fuente
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]ahorra cinco.