Ceci est une version en 2 dimensions de cette question .
Étant donné un tableau / matrice à deux dimensions non vide ne contenant que des entiers non négatifs:
Affiche le tableau avec les zéros environnants supprimés, c’est-à-dire le plus grand sous-tableau contigu sans zéros:
Exemples:
Input:
[[0, 0, 0, 0, 0], [0, 0, 0, 1, 0], [0, 0, 0, 0, 1], [0, 0, 1, 1, 1], [0, 0, 0, 0, 0]]
Output:
[[0, 1, 0], [0, 0, 1], [1, 1, 1]]
Input:
[[0, 0, 0, 0], [0, 0, 0, 3], [0, 0, 0, 0], [0, 5, 0, 0], [0, 0, 0, 0]]
Output:
[[0, 0, 3], [0, 0, 0], [5, 0, 0]]
Input:
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
Output:
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
Input:
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
Output:
[]
Input:
[[0, 0, 0, 0], [1, 1, 1, 1], [0, 0, 0, 0]]
Output:
[[1, 1, 1, 1]]
Input:
[[0, 1, 0, 0], [0, 1, 0, 0], [0, 1, 0, 0]]
Output:
[[1], [1], [1]]
Input:
[[1, 1, 1, 1], [1, 2, 3, 1], [1, 1, 1, 1]]
Output:
[[1, 1, 1, 1], [1, 2, 3, 1], [1, 1, 1, 1]]
code-golf
array-manipulation
Alephalpha
la source
la source
:)
Juste difficile de faire court.[[0, 0, 0, 0], [0, 0, 0, 0], [1, 1, 1, 1], [0, 0, 0, 0]]
(le résultat ayant une largeur / hauteur de1
)Réponses:
MATL , 3 octets
Essayez-le en ligne! Ou vérifiez tous les cas de test .
Explication
la source
(implicit)
.Wolfram Language (Mathematica) , 42 octets
Essayez-le en ligne!
Les automates cellulaires sont en effet la réponse à la vie , à l'univers et à tout . 1
Comment?
CellularAutomaton
accepte un tableau d'entrée et une valeur d'arrière-plan facultative. Ainsi,{#,0}
spécifie qu’une règle d’automate cellulaire doit être appliquée à l’entrée, en supposant que l’arrière-plan de0
s.Une chose intéressante ici est que
CellularAutomaton
le résultat est découpé de sorte qu'aucune bordure de cellules d'arrière-plan ne soit présente (sinon, le résultat se situe sur un plan infini).Le code applique la règle
{Null, {}, {0, 0}}
- appliquant la têteNull
au voisin de rayon 0 de chaque cellule (c'est-à-dire uniquement le centre: la cellule elle-même) - exactement l'0
heure. Le résultat est l'entrée d'origine, mais avec l'arrière-plan supprimé (c.-à-0
d. Le rognage autour de s).1. Voir le décompte de ma réponse? ;)
la source
JavaScript (ES6), 98 octets
Essayez-le en ligne!
Comment?
Pour surmonter le manque de zip intégré, nous définissons une fonction g () capable d’opérer sur les lignes ou les colonnes de la matrice d’entrée a [] , en fonction de la valeur du drapeau global z .
g () recherche l'index minimal m et l'index maximal M de lignes non vides (si z n'est pas défini) ou de colonnes non vides (si z est défini) et renvoie la tranche correspondantede la matrice elle-même ou d'une ligne donnée. de la matrice.
Résumer:
.map(z=g)
Commenté
la source
Haskell ,
6261 octetsEssayez-le en ligne!
foldr(zipWith(:))e
withe=[]:e
est légèrement plus courttranspose
etsnd.span(all(<1))
supprime les listes de zéros en tête de liste. Commetranspose
suivi parreverse
sur une liste 2D équivaut à une rotation de 90 °, le codef.f.f.f
n’est que quatre fois l’ abandon des listes de zéros et la rotation .la source
Pyth , 13 octets
Essayez-le en ligne!
la source
=_CQ
que fonctionnerait à la place de=Q_CQ
.Gelée , 10 octets
Essayez-le en ligne!
la source
Brachylog ,
24222019 octetsEssayez-le en ligne!
Affiche la matrice de résultats sous forme de tableau de tableaux ou false pour une sortie vide.
(Merci à @Fatalize pour avoir suggéré un prédicat en ligne et économisé 1 octet.)
Explication
Prédicat 0 (Principal):
Prédicat 1:
la source
{s.h+>0∧.t+>0∧}\↰₁\
. (Ceci est vrai pour pratiquement toutes les réponses à Brachylog, les prédicats sur les nouvelles lignes ne sont réellement implémentés que si vous voulez écrire des choses plus lisibles).R ,
96 10097 octetsEssayez-le en ligne!
L'
~
assistant prend un vecteur non négatif et renvoie un vecteur avecFALSE
les "extérieurs"0
du vecteur et lesTRUE
positifs et tous les "intérieurs"0
. Cette fonction est appliquée aux sommes des lignes et des colonnes de la matrice en entrée.~
et!
utiliser le traitement d'analyse des opérateurs par R.Corrigé conformément au commentaire de @ DigEmAll, mais avec quelques octets renvoyés de @ J.Doe
la source
drop=F
comme je l’ai fait, sinon ces 2 tests renverront un vecteur au lieu de ligne et colonne: Essayez-le en ligne!drop=F
. Encore moins d'une tonne!R ,
8979 octetsEssayez-le en ligne!
Merci à @ngm pour le code des cas de test et à @ J.Doe pour avoir économisé 10 octets!
drop=F
paramètre en raison du comportement par défaut de R en transformant une matrice ligne / colonne en vecteurs ...la source
range
et peaufinant l'indexationAPL (Dyalog Classic) ,
17 à15 octetsEssayez-le en ligne!
la source
Python 2 , 71 octets
Retourne en modifiant l'entrée. Une liste devrait être passée en entrée.
Essayez-le en ligne!
Python 2 , 77 octets
Cela modifie également l'entrée, mais cela fonctionne ....
Essayez-le en ligne!
la source
Wolfram Language (Mathematica) , 66 octets
Essayez-le en ligne!
Fonctionne maintenant en remplissant le tableau avec des zéros (merci @JungHwanMin)!
Un second merci à @JungHwanMin pour avoir économisé 4 octets
la source
Gelée , 12 octets
Essayez-le en ligne!
En tant que fonction.
la source
Wolfram Language (Mathematica) , 48 octets
Essayez-le en ligne!
Le faire de manière normale.
la source
\[Transpose]
je ne peux pas travailler ici.Coque , 11 octets
Essayez-le en ligne!
Je sens que certains octets pourraient être supprimés en raccourcissant la
!5¡
partie.Comment ça marche
Carte sur la version actuelle de l'entrée et: inverser chaque, après avoir laissé tomber le plus long préfixe consiting de zéros uniquement (chute ce préfixe est effectué à l'aide Husk de
↓
, qui est une fonction que les cultures le plus long terme d'éléments consécutifs depuis le début de la liste qui donne des résultats véridiques lorsqu’elle est exécutée dans une fonction, à savoir¬
, logique non).Transposer, en remplaçant les entrées manquantes par 0 .
la source
Rétine , 87 octets
Essayez-le en ligne! Explication:
Jusqu'à ce qu'au moins une ligne ne commence pas par zéro ...
... supprime le zéro de chaque ligne.
Jusqu'à ce qu'au moins une ligne ne se termine pas par zéro ...
... supprimer le zéro final de chaque ligne.
Supprimer les premières lignes de zéros.
Supprimez les dernières lignes de zéros, ou le dernier zéro restant.
la source
Charbon de bois , 48 octets
Essayez-le en ligne! Le lien est vers la version verbeuse du code. Inclut 15 octets pour le formatage. Explication:
Répétez 4 fois.
Répétez l'opération tant que le tableau n'est pas vide mais que sa dernière ligne est égale à zéro ...
Supprime la dernière ligne du tableau et affiche une ligne de la longueur de sa somme, c’est-à-dire rien.
Si le tableau n'est pas vide, transposez-le.
Formatez bien le tableau pour l'affichage. (La sortie standard serait à la
Iθ
place.)la source
JavaScript,
144140129127 octets140 -> 129 octets, merci @Arnauld
Algorithme
la source
some/some
lieu defindIndex/find
et en réarrangeant les déclarations de fonctions d'aide pour se débarrasser de la parenthèse autour du principal argument de la fonction (maintenant unique).[[]]
sorte que t est garanti de pouvoir opérerw[0]
.Python 2 ,
118116 octetsEssayez-le en ligne!
Enregistré:
la source
s=sum
définition lambdaPHP (> = 5.4),
200194186184 octets(-6 octets en retournant à la
null
place d'un tableau vide)(-8 octets grâce à Titus )
(-2 octets avec appel par référence grâce à Titus )
Essayez-le en ligne!
Comment?
Trouve les index min et max pour les lignes (
$m
&$M
) et les colonnes ($n
&$N
) et remplace l'entrée par un sous-tableau de$m,$n
to$M,$N
(il s'agit d'un appel par référence).la source
if($C){$m>$r&&$m=$r;$M>$r||$M=$r;$n>$c&&$n=$c;$N>$c||$N=$c;}
while($m<=$M)$o[]=array_slice($a[$m++],$n,$N-$n+1);
&&
et||
je suis sûr que je pourrai utiliser ce truc ailleurs.$a=
au lieu dereturn
.Octave,
48 à49 octetsEssayez-le en ligne!
Recherchez des points non nuls et réorganisez-les dans une nouvelle matrice fragmentée.
la source
K (ngn / k) , 22 octets
Essayez-le en ligne!
la source
J , 24 octets
Essayez-le en ligne!
Explication
la source
Ruby ,
7363 octetsEssayez-le en ligne!
Edit: simplifiée, également la version précédente est écrasé pour tous
0
sComment ça marche:
0
sla source
&.sum<0
au lieu de&.sum<1
.Octave ,
7874 octetsEssayez-le en ligne!
Explication
Cela fait pivoter la matrice de
90
degrés (x=rot90(x)
) un nombre suffisant de fois (for k=1:... end
). Le nombre de rotations étant un multiple de4
, la matrice finale a l'orientation initiale. Plus précisément, le nombre de rotations est4
multiplié par le nombre de zéros dans la matrice (nnz(~x)*4
).Pour chaque rotation, s'il existe à gauche une ou plusieurs colonnes composées uniquement de zéros, elles sont supprimées (
x=x(:,~~cumsum(any(x,1)))
).Ce qui reste de la matrice après ce processus est sorti par la fonction (
function x=f(x)
).la source
Stax , 14 octets
Exécuter et déboguer
Alternative, également 14 octets
Exécuter et déboguer
la source
PHP, 188 octets
appeler par référence.
panne
la source
Propre , 73 octets
Essayez-le en ligne!
Très similaire à la réponse de Haskell de Laikoni .
la source
Python 2 , 86 octets
Essayez-le en ligne!
Prend une liste de listes, retourne une liste de tuples.
Explication
Abuse au diable de la compréhension de la liste. C'est le code développé équivalent:
la source
Japt
-h
,2311 octetsL'essayer
Explication
la source