Imaginez un tableau bidimensionnel de valeurs booléennes, où les 0 représentent des carrés d'herbe sur un terrain rectangulaire et les 1 représentent des clôtures.
Écrivez une fonction qui accepte le tableau 2D en entrée et détermine si vous pouvez vous déplacer d'une zone d'herbe à une autre zone d'herbe, en utilisant uniquement les mouvements nord / est / ouest / sud, sans tomber dans une clôture.
Si une zone d'herbe dans le tableau est entièrement entourée de clôtures (ce qui signifie que vous ne pouvez pas voyager N / E / W / S pour atteindre toutes les autres zones d'herbe du tableau), la fonction doit retourner false; sinon, cela devrait retourner vrai.
Vous trouverez ci-dessous deux exemples de tableaux que vous pouvez utiliser comme entrées, bien que votre fonction devrait être capable de gérer non seulement ces tableaux, mais tout tableau 2D de valeurs booléennes:
0 0 0 0 0
0 1 0 0 0
0 1 1 1 1
0 0 0 0 0
0 0 0 1 1
(should return true)
0 1 0 1 0
0 1 1 0 0
0 0 0 0 0
0 0 0 1 0
1 1 1 1 0
(should return false, since the middle 0 in the top row is fully enclosed)
Le code de travail le plus court gagne. Je choisirai le gagnant après une semaine ou s'il n'y a eu aucune nouvelle soumission dans les 24 heures.
1 1 1
;1 0 1
;1 1 1
? Il y a une cellule d'herbe au centre. Visuellement, l'herbe au centre est entièrement entourée de clôtures, mais selon votre définition, ce n'est pas le cas.Réponses:
Matlab 45
la source
input('');c=bwconncomp(~ans,4);c.NumObjects<2
Cela ferait 45 caractères.APL (39)
Usage:
la source
Mathematica,
6058 caractèresUsage:
la source
f=Max@WatershedComponents[Image@#,CornerNeighbors->1>2]<2&
Rubis,
202198193Effectue un remplissage, puis vérifie s'il reste des 0.
la source
PHP 147
202177165149octetsEDIT J'ai battu mon hack gzip avec une vraie solution php.
Un peu long .... entrée sous forme de chaîne de texte, pas d'espaces, lignes délimitées par des retours à la ligne. Il se remplit de
c
s et vérifie ensuite s'il reste des zéros. Dans la boucle, j'utiliseexp
comme une limite supérieure brute sur le nombre d'itérations nécessaires. Je profite de la symétrie pour gérer les doublons en moins de codeVoici un cas de test non golfé:
la source
Excel VBA,
305215 octetsOui, haha VBA , mais la nature matricielle du problème suggère qu'une solution pratique dans Excel pourrait être intéressante (De plus, quelqu'un a déjà soumis une réponse dans mes autres langues!). Évidemment, VBA ne sera pas le plus succinct, mais je pense que c'est raisonnable.
Cette inondation se remplit à partir d'un point de départ arbitraire puis vérifie s'il reste de l'herbe
R est une plage de feuille de calcul avec 1 et 0 représentant les clôtures et l'herbe telles que définies dans le problème. Bonus, le terrain de jeu n'a pas besoin d'être rectangulaire ou même contigu.
Par exemple, renverrait False. Les zéros de droite ne sont pas accessibles depuis les zéros de gauche. Le champ irrégulier ne le brise pas.
Quelques notes sur le golf.
Je pense que certains caractères pourraient être coupés si l'exigence était inversée en ce qui concerne 1 et 0, mais pas assez pour que cela vaille la peine d'être inversé.
VBA insiste sur un tas d'espace (a = b vs a = b), ce qui n'aide pas le nombre de caractères.
S doit être explicitement déclaré comme une plage. S'il ne reste qu'une variante, il se transforme en valeur de plage plutôt qu'en plage.
Peut-être une meilleure façon de limiter l'inondation? Je n'ai pas pu trouver une boucle qui a sauvé tous les caractères pour l'envoyer N / E / S / W
Edit: rethougt le cas de base sur le remplissage d'inondation, a réussi à couper un peu en vérifiant s'il se trouve dans un cas de base après la récursivité plutôt que d'empêcher la récursivité.
la source
Python (219 octets)
Ce n'est certainement pas le plus court, mais c'est mon premier essai ici, donc j'en suis fier:
Son entrée doit être une chaîne de 0 et de 1 où les lignes sont délimitées par un caractère de nouvelle ligne (\ n).
Exemple d'utilisation:
la source
and
, je pense que cela permet d'économiser certains caractèresPython (196)
Remplissage standard contre les inondations.
Prend la matrice via STDIN avec chaque ligne séparée par un seul espace. Par exemple "01010 01100 00000 00010 11110".
la source
Mathematica 53
Il appelle la fonction interne
Image`MorphologicalOperationsDump`imageBinaryLabel
, qui est similaire àMorphologicalComponents
.la source
PHP (286 caractères)
Beaucoup trop longtemps, j'ai probablement fait le long chemin.
Non-golfé:
la source
C #, 235 octets
Il essaie de remplir chaque cellule de la carte, il ne fait qu'un seul remplissage d'inondation renvoie true.
la source
Python 2.X + 3.X: 335 caractères
Golfé:
Non golfé:
la source