Vous recevrez une matrice carrée d'entiers M et un autre entier positif n , strictement inférieur à la taille de M . Votre tâche consiste à générer toutes les sous-matrices carrées de M de taille n .
Aux fins de ce problème, une sous-matrice carrée est un groupe de voisins des rangées et des colonnes contenues dans M .
Formats d'entrée / sortie
Vous êtes libre de choisir tout autre format raisonnable, ce ne sont que quelques exemples.
Contribution
- Une matrice dans le type de matrice native (si votre langue en a une)
- Un tableau 2D (un tableau de tableaux 1D, chacun correspondant à une ligne / une colonne)
- Un tableau 1D (puisque la matrice est toujours carrée)
- Une chaîne (vous avez choisi l'espacement, mais n'en abusez pas), etc.
Production
- Une matrice de matrices.
- Un tableau 4D, où chaque élément (liste 3D) représente les sous-matrices sur une ligne / colonne.
- Un tableau 3D, où chaque élément (liste 2D) représente une sous-matrice.
- Une représentation sous forme de chaîne des sous-matrices résultantes, etc.
Spécifications
- Vous pouvez également choisir de prendre la taille de M comme entrée. Il est garanti d'être au moins 2 .
- L'orientation de la sortie est arbitraire: vous pouvez choisir de sortir les sous-matrices sous forme de listes de colonnes ou de listes de lignes, mais votre choix doit être cohérent.
- Vous pouvez concurrencer dans n'importe quel langage de programmation et pouvez prendre des entrées et fournir des sorties par n'importe quelle méthode standard , tout en prenant note que ces échappatoires sont interdites par défaut.
- Il s'agit de code-golf , donc la soumission la plus courte (en octets) pour chaque langue l' emporte.
Exemple
Étant donné n = 3 et M :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Les sous - matrices 3x3 possibles sont:
+ ------- + + -------- + 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 + -------- + + -------- +
Le résultat serait donc:
[[[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]]]
Comme indiqué ci-dessus, une sortie 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]]]
serait également acceptable si vous choisissez de renvoyer les sous-matrices sous forme de listes de lignes.
Cas de test
Les entrées 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
Et les sorties correspondantes (sous-matrices données sous forme de listes de lignes):
[[[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, sous forme de listes de colonnes:
[[[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]]]]
la source
Réponses:
05AB1E , 8 octets
Essayez-le en ligne!
Explication
la source
MATL , 4 octets
Les entrées sont
n
doncM
.La sortie est une matrice, où chaque colonne contient toutes les colonnes d'une sous-matrice.
Essayez-le en ligne!
Explication
Plus sérieusement,
t
prend l'entrée n implicitement et la duplique sur la pile.h
concatène les deux copies de n , produisant le tableau [n, n] .YC
prend implicitement l' entrée M , extrait tous ses blocs de taille [n, n] et les organise sous forme de colonnes dans l'ordre des colonnes principales. Cela signifie que les colonnes de chaque bloc sont empilées verticalement pour former une seule colonne.la source
APL (Dyalog Unicode) , 26 octets SBCS
Infixe anonyme lambda prenant n comme argument de gauche et M comme argument de droite.
Essayez-le en ligne!
{
…}
Lambda anonyme où⍺
est l'argument de gauche et⍵
l'argument de droite:⊢⍵
produire le bon argument (⊢
séparé⍺ ⍺
de⍵
)⊢⌺⍺ ⍺
tous les⍺
-by-⍺
sous - matrices , y compris celles qui se chevauchent les bords (ceux -ci sont complétées par des zéros)(
…)↓
Déposez les éléments numériques suivants le long des deux premières dimensions:⍺÷2
moitié de⍺
¯1+
négatif plus que⌈
rassembler2⍴
cyclique r Eshape à une liste de deux élémentss←
stocker danss
(pour les disques durs)-
nier (c.-à-d. tomber de l'arrière)s↓
déposer dess
éléments le long des première et deuxième dimensions (par l'avant)la source
APL (Dyalog Unicode) , 31 octets
Essayez-le en ligne!
Une approche différente de celle d'Adam.
la source
⍉
pour des cas non triviaux, alors vous avez vraiment maîtrisé la programmation de tableaux.R , 75 octets
Essayez-le en ligne!
Prend
M
,N
et laS
Ize de la matrice.Imprime les matrices résultantes sur stdout;
drop=F
est nécessaire pour que dans leN=1
cas où l'indexation ne supprime pas l'dim
attribut et produise amatrix
plutôt que avector
.la source
J ,
118 octets-3 octets grâce aux miles
Essayez-le en ligne!
la source
<;._3~,~
et utilise un crochet à la place pour associer la taille à elle-même, puis coupe et encadre chacun car une matrice de matrices est autorisée en sortie.Haskell , 67 octets
Essayez-le en ligne!
la source
Gelée , 5 octets
Utilise le format de sortie 4D. Pour la 3D, ajoutez un
Ẏ
pour 6 octets .Essayez-le en ligne!
Comment ça fonctionne
la source
ṡ€Zṡ€
.Brachylog , 13 octets
Essayez-le en ligne!
Cela renvoie des listes de colonnes.
Techniquement,
tN&s₎\;Ns₎
c'est un prédicat générateur qui unifie sa sortie avec l'une de ces sous-matrices. Nous utilisons{…}ᶠ
uniquement pour exposer toutes les possibilités.Explication
la source
Stax , 10 octets
Exécuter
La représentation ascii du même programme est
Cela fonctionne comme ça.
la source
JavaScript (ES6), 91 octets
Prend des entrées dans la syntaxe de curry
(a)(n)
. Renvoie les résultats sous forme de listes de lignes.Cas de test
Afficher l'extrait de code
la source
APL (Dyalog Classic) ,
2423 octetsEssayez-le en ligne!
le résultat est une matrice de matrices, bien que le formatage de sortie de Dyalog ne le rende pas très évident
entrez la matrice (
⎕
), transformez chaque élément en une matrice imbriquée qui lui est propre (⍪¨
), prenez les concaténations de préfixe par ligne (,\
) et par colonne (⍪⍀
), saisissez n (⎕
), supprimez les n-1 premières lignes et colonnes des matrices imbriquées ((¯1-t←-2⍴⎕)↓
), prenez le coin en bas à droite n par n de chaque matrice (t∘↑¨
)la source
Rubis , 63 octets
Essayez-le en ligne!
Il s'agit d'un lambda prenant un tableau 2D et un int, renvoyant un tableau 3D.
Non golfé:
la source
Python 2 , 91 octets
Essayez-le en ligne!
la source
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]
sauve cinq.