Contribution:
Une matrice contenant des entiers dans l'intervalle [0 - 9] .
Défi:
Déterminez si tous les éléments non nuls sont connectés les uns aux autres verticalement et / ou horizontalement.
Production:
Une valeur vraie si tous sont connectés et une valeur fausse s'il y a des éléments / groupes non nuls qui ne sont pas connectés à d'autres éléments / groupes.
Cas de test:
Les cas de test sont séparés par une ligne. Les cas de test peuvent être trouvés dans des formats plus pratiques ici ( bravo à Dada ).
Les éléments suivants sont tous connectés et doivent renvoyer une valeur véridique:
0
---
0 0
---
1 1 1
0 0 0
---
1 0 0
1 1 1
0 0 1
---
0 0 0 0 0 0
0 0 3 5 1 0
0 1 0 2 0 1
1 1 0 3 1 6
7 2 0 0 3 0
0 8 2 6 2 9
0 0 0 0 0 5
Les éléments suivants ne sont pas tous connectés et doivent renvoyer une valeur fausse:
0 1
1 0
---
1 1 1 0
0 0 0 2
0 0 0 5
---
0 0 5 2
1 2 0 0
5 3 2 1
5 7 3 2
---
1 2 3 0 0 5
1 5 3 0 1 1
9 0 0 4 2 1
9 9 9 0 1 4
0 1 0 1 0 0
Il s'agit de code-golf , donc la soumission la plus courte dans chaque langue l'emporte. Les explications sont encouragées!
Inspiré par ce défi .
la source
Réponses:
Retina 0.8.2 ,
8077 octetsEssayez-le en ligne! Edit: enregistré 1 octet grâce à @FryAmTheEggman. Explication:
Simplifiez à un tableau de
@
s et1
s.Remplacez-le
1
par un_
.Flood remplissage du
_
au adjacents1
s.Testez s'il en
1
reste.la source
JavaScript (ES6),
136135 octetsRenvoie un booléen.
Cas de test
Afficher l'extrait de code
Commenté
La fonction récursive g () recherche d'abord une cellule non nulle (tant que l'indicateur défini globalement z est défini sur 0 ) puis commence le remplissage à partir de là (dès que z! = 0 ).
la source
MATL , 7 octets
Cela donne une matrice contenant tous les uns comme sortie véridique , ou une matrice contenant au moins un zéro comme fausse . Essayez-le en ligne!
Vous pouvez également vérifier la véracité / fausseté en ajoutant un
if
-else
branche au pied de page; essayez-le aussi!Ou vérifiez tous les cas de test .
Explication
la source
Wolfram Language (Mathematica) , 54 octets
Enregistré 2 octets grâce à user202729.
Essayez-le en ligne!
la source
C, 163 octets
Merci à @ user202729 pour avoir économisé deux octets!
Boucle dans la matrice jusqu'à ce qu'elle trouve le premier élément non nul. Arrête ensuite la boucle pendant un certain temps et remet récursivement à zéro chaque élément non nul connecté à l'élément trouvé. Parcourt ensuite le reste de la matrice en vérifiant si chaque élément est maintenant nul.
Essayez-le en ligne!
Déroulé:
la source
Perl,
8079787370 octetsComprend
+2
pour0a
Donnez la matrice d'entrée sans espaces sur STDIN (ou en fait sous forme de lignes séparées par tout type d'espaces)
Plus facile à lire si mis dans un fichier:
la source
Java 8, 226 octets
Cela a pris un certain temps, donc je suis content que ça marche maintenant ..
Explication:
Essayez-le en ligne.
la source
APL (Dyalog Unicode) , 36 octets SBCS
Essayez-le en ligne!
la source
Gelée , 23 octets
Essayez-le en ligne!
Explication.
Le programme étiquette chaque composant morphologique avec un nombre différent, puis vérifie s'il y a moins de 3 nombres. (y compris
0
).Considérez une ligne dans la matrice.
Appliquer à plusieurs reprises cette fonction pour toutes les lignes et colonnes de la matrice, dans tous les ordres, éventuellement tous les composants morphologiques auront la même étiquette.
Et enfin...
la source
¦
prend même O (n).Haskell , 132 octets
extrait de Solve Hitori Puzzles
indices m
répertorie les(line,cell)
emplacements de la grille d'entrée.filter((/=0).(m!))
filtre tous les emplacements avec des valeurs non nulles.splitAt 1
partitionne le premier membre en une liste singleton à côté d'une liste de repos.any(==1)[(b-d)^2+(p-q)^2|(d,q)<-f]
dit si(b,p)
touche la frontièref
.\(f,e)->partition(\(b,p)->touches(b,p)f)e
sépare les touchers des pas [encore] touchers.until(null.fst)advanceFrontier
le répète jusqu'à ce que la frontière ne puisse plus avancer.null.snd
examine le résultat si tous les emplacements à atteindre ont bien été atteints.Essayez-le en ligne!
la source
Grime , 37 octets
Imprime
1
pour correspondance et0
pour aucune correspondance. Essayez-le en ligne!Explication
Le non terminal
C
correspond à tout caractère différent de zéro qui est connecté au premier caractère différent de zéro de la matrice dans l'ordre de lecture anglais.Quelques explications:
e
correspond à un rectangle de largeur ou hauteur nulle qui fait partie du bord de la matrice d'entrée, et$
est un "caractère générique" qui correspond à n'importe quoi. L'expressione/\0{/e\0*0$e
peut être visualisée comme suit:L'expression
CoX^0oX
est en fait analysée comme((CoF)0)oX
; les opérateursoF
etoX
sont des suffixes et la concaténation des jetons signifie la concaténation horizontale. le^
juxtaposition donne alors une priorité plus élevéeoX
, donc la rotation est appliquée à la sous-expression entière. LeoF
corrige l'orientation deC
après sa rotation deoX
; sinon, il pourrait correspondre à la première coordonnée non nulle dans un ordre de lecture anglais tourné.Cela signifie que tous les caractères non nuls doivent être connectés au premier. Le spécificateur de grille
:
est techniquement un opérateur de suffixe, maisC|:\0
est du sucre syntaxique pour(C|\0):
.la source
Perl 5 ,
131129 + 2 (-ap
) = 133 octetsEssayez-le en ligne!
la source
Python 2 ,
211163150 octetsEssayez-le en ligne!
La sortie se fait via un code de sortie. L'entrée est une liste 1d et la largeur de la matrice.
la source