introduction
Observons le carré suivant, composé uniquement des chiffres 0 - 9
:
1034
4167
8414
3542
L'enveloppe extérieure de ce carré est:
1034
4 7
8 4
3542
Il contient des zéros, donc nous devons décoller de l'enveloppe extérieure, laissant:
16
41
L'enveloppe extérieure de ce carré est:
16
41
Il ne ne contient pas de zéros et est donc un non contaminé carré. Donc, fondamentalement, la définition d'un carré non contaminé est lorsque la coque extérieure du carré ne contient pas de zéros.
La tâche
Étant donné un carré de chiffres (contenant uniquement des entiers non négatifs) dans n'importe quel format raisonnable, sortez le plus grand carré non contaminé en décollant constamment la coque extérieure, dans n'importe quel format raisonnable.
Cas de test
Cas de test 1:
Input Output
1234 1234
2345 2345
3456 3456
4567 4567
Cas de test 2:
Input Output
123 123
204 204
346 346
Cas de test 3:
Input Output
101 1
010
101
Cas de test 4:
Input Output
000 (none)
000
000
C'est du code-golf , donc la soumission avec le moins d'octets gagne!
416\n841\n354\n
(coin en bas à gauche)?0
ou quelque chose comme ça.Réponses:
Gelée ,
1916 octetsEssayez-le en ligne!ou vérifiez tous les cas de test .
Comment ça fonctionne
la source
JavaScript,
10597 octets8 octets enregistrés grâce à @Patrick Roberts!
Définit la fonction
s
, qui renvoie un tableau 2D d'entiers lorsque fourni un tableau 2D d'entiers en entrée.Comment ça fonctionne
fonction
l
: étant donné un tableaua
, retourne une copie sans ses premier et dernier index.fonction
p
: étant donné un tableau 2Da
, appellel
pour supprimer la première et la dernière ligne, puis pour chaque ligne restante, appellel
pour supprimer le premier et la dernière colonne. Cela effectue le pelage de l'oignon.fonction
c
: étant donné un tableau 2Da
, retourne une chaîne qui ne contient que le0
s sous la forme chaîne dea
.fonction
s
: étant donné un tableau 2Da
, fait appelc
à la forme pelée du tableau donnée parp
, et au tableau lui-même. Compare ces chaînes lexicographiquement pour déterminer si la forme pelée a moins de0
s que l'original. Si c'est le cas, l'original est contaminé, appelez doncs
récursivement sur la forme pelée. Sinon, renvoyez l'original.la source
a.length
de l'end
argument dearray.slice
inl
et enregistrer 8 octets.end
est autorisé à être un indice négatif.Rétine ,
6057 octetsLe nombre d'octets suppose un codage ISO 8859-1. Le saut de ligne arrière est important.
Essayez-le en ligne!
Explication
En raison du saut de ligne de fin, cela trouve toutes les correspondances de l'expression régulière après le
`
et les supprime de l'entrée. En raison de la direction+
cela se fait à plusieurs reprises jusqu'à ce que la sortie cesse de changer (ce qui sera dû au fait que l'expression régulière cessera de correspondre).Quant à l'expression régulière elle-même, elle se compose de deux parties:
Cette partie vérifie s'il y a un
0
endroit dans la coque extérieure. Il le fait en déplaçant le "curseur" du moteur d'expression régulière au début de la chaîne avec un lookbehind (nous utilisons[^_]
pour faire correspondre les chiffres et les sauts de ligne):Et puis à partir de cette position, nous utilisons un lookahead pour trouver un
0
dans la première ligne, à côté d'un saut de ligne, ou dans la dernière ligne:Ensuite, la correspondance réelle consistera soit en la première ligne (y compris son saut de ligne de fin), la dernière ligne (y compris son saut de ligne de tête) ou le premier ou le dernier caractère d'une ligne, où nous abusons de la limite de mot
\b
comme début / fin de ligne ancre:la source
MATL ,
2621 octetsL'entrée est au format suivant
Ainsi, les quatre autres cas de test sont
Le programme fait une erreur dans le dernier cas de test, mais produit la sortie correcte (qui n'est rien). Merci à @Dennis de l'avoir remarqué!
Essayez-le en ligne! . Ou vérifiez tous les cas de test (cela inclut le code d'habillage).
Explication
Cela répète autant de fois que le nombre de colonnes dans la matrice d'entrée, ce qui est plus que suffisant. A chaque itération, le shell est supprimé ou conservé en fonction de ses valeurs.
la source
Pyth, 19 octets
Suite de tests
la source
JavaScript (ES6), 74 octets
Prend l'entrée sous la forme d'une chaîne avec des retours à la ligne séparant chaque ligne (mais pas de retour à la ligne de début ou de fin). Explication:
/^.*0|0\n|\n0|0.*$/
est une expression rationnelle qui correspond aux carrés contaminés, tandis qu'elle/^.*\n?|.(.*).|\n.*$/
correspond aux parties du carré qui doivent être supprimées, à l'exception de celles(.*)
qui doivent être conservées. (C'est plus court que de regarder en avant ou en arrière pour le caractère de nouvelle ligne.)la source
Perl 5, 63 + 3 = 66 octets
Nécessite le
-0
drapeau. L'entrée ne doit pas contenir de caractère de fin de ligne.la source
Pyke, 29 octets
Essayez-le ici!
Aussi 29 octets
Essayez-le ici!
la source
Pyth ,
3130 octetsSuite de tests.(Les dernières erreurs de testcase)
Amélioration: fait de l'extracteur de boucle externe une fonction (
L+hbeb
).Version précédente de 31 octets:
Comment ça fonctionne:
Le code est fondamentalement: alors que le produit de la coque extérieure est nul, décollez-le.
Analysons le code principal (Q est implicite ici):
Commencez par
Q
(entrée),while
premier lambda, effectuez le deuxième lambda.La première partie serait le lambda dans
H
:La deuxième partie serait le lambda dans
Z
:La première partie
Analysons ceci:
Puisque Pyth utilise la notation de préfixe , cela serait alors évalué:
La seconde partie
la source
Mathematica, 78 octets
Fonction anonyme, prend l'entrée comme une matrice. Ignorez toutes les erreurs pouvant survenir lors de l'exécution.
la source