Description du défi
Appelons un tableau rectangulaire à deux dimensions (ce qui signifie que chaque sous-tableau a la même longueur), une grille . Chaque unité d'une grille est soit un espace vide, soit une bordure . Dans une grille de caractères, l'espace vide est représenté par un seul espace blanc; tout autre caractère est traité comme une bordure. Exemples de grilles ( +
', |
' et -
'ajoutés pour plus de lisibilité - ils ne font pas partie de la grille ):
+----+
| |
| |
| |
| |
| |
+----+ an empty 4x5 grid
+------+
| |
| # |
| # |
+------+ a 6x3 grid with 2 borders
+----------+
| |
| |
| ##### |
| # # |
| ## # <------ enclosed area
| # # |
| ###### |
| |
+----------+ a 10x8 grid with an enclosed area
Étant donné une grille 2D et une paire de coordonnées, remplissez la zone fermée entourant le point représenté par les coordonnées.
Exemples d'entrées / sorties
1)
0 0
+----------+ +----------+
| | |XXXXXXXXXX|
| | -> |XXXXXXXXXX|
| | |XXXXXXXXXX|
+----------+ +----------+
2)
6 5
+-----------------+ +-----------------+
| | | |
| | | |
| ######## | | ######## |
| # # | | #XXXXXXX# |
| # #### | | #XXXX#### |
| # # | | #XXXX# |
| # # | -> | #XXXX# |
| # # | | #XXXX# |
| #### | | #### |
| | | |
| | | |
+-----------------+ +-----------------+
3)
4 6
+-----------------+ +-----------------+
| | |XXXXXXXXXXXXXXXXX|
| #### | |XXXX####XXXXXXXXX|
| # # | -> |XXX# #XXXXXXXX|
| #### | |XXXX####XXXXXXXXX|
| | |XXXXXXXXXXXXXXXXX|
+-----------------+ +-----------------+
4)
4 5
+-----------------+ +-----------------+ +-----------------+
| | | | | |
| | | | | |
| #### | | #### | | XXXX |
| #### | -> | #### | or | XXXX |
| #### | | #### | | XXXX |
| | | | | |
+-----------------+ +-----------------+ +-----------------+
5)
2 6
+----------------+ +----------------+
| | |XXXXXXXXXXXXXXXX|
| | |XXXXXXXXXXXXXXXX|
| | |XXXXXXXXXXXXXXXX|
| | -> |XXXXXXXXXXXXXXXX|
| | |XXXXXXXXXXXXXXXX|
|BBBBBBBBBBBBBBBB| |BBBBBBBBBBBBBBBB|
| | | |
| | | |
+----------------+ +----------------+
Remarques
Une grille vide est considérée comme fermée, c'est-à-dire que les bordures sont également implicitement situées le long des bords de la grille (voir les exemples 1. et 5.),
Un coin d'un espace clos n'a pas besoin d'être en forme de L. Les deux domaines suivants sont donc équivalents:
#### ##
# # # #
# # == # #
# # # #
#### ##
Si une unité sous les coordonnées se trouve être une bordure, vous pouvez soit laisser la grille inchangée (comme dans l'exemple 4.), soit la traiter comme un espace vide,
Vous pouvez choisir n'importe quel caractère pour remplir / espace vide tant que vous incluez ces informations dans la soumission,
Si vous utilisez un type autre que celui
char
qui vous convient mieux, vous pouvez utiliserints
(0
pour un espace vide,1
pour une bordure) oubooleans
(true
etfalse
respectivement) ou tout autre type - assurez-vous simplement d'inclure ces informations dans votre soumission,Les coordonnées utilisées dans les exemples ci-dessus sont des
(row, column)
coordonnées indexées 0 , car c'est plus pratique pour un tableau à deux dimensions. Si vous souhaitez utiliser un système(column, row)
(cartésien) et / ou des coordonnées non indexées 0, spécifiez-le dans votre soumission.Si vous ne savez pas par où commencer, consultez l'article Wikipedia sur le remplissage des inondations
N'oubliez pas qu'il s'agit d'un défi de code-golf , alors faites votre code aussi court que possible!
la source
Réponses:
MATLAB,
307 octetsComme nous pouvons utiliser des entrées logiques au lieu de chaînes, nous pouvons utiliser la fonction nue, telle qu'elle est:
Il s'agit d'une fonction anonyme. Pour l'utilisation, nous devons assumer un nom, par exemple
f=@
imfill
. Ensuite, nous pouvons simplement l'évaluer commef(input,point)
, oùinput
est une matrice logique, par exemple[0,0;0,1]
, etpoint
est un vecteur 2d avec des coordonnées basées sur 1, par exemple[1,2]
.Ancienne version fonctionnant sur des chaînes:
Cette fonction anonyme accepte l'entrée ainsi qu'un vecteur avec les coordonnées (index basé sur 1). La fonction
imfill
fait exactement ce dont nous avons besoin, mais ne fonctionne que sur les images binaires. C'est pourquoi nous convertissons la matrice d'entrée en un tableau logique (où#
sont les frontières et(les espaces) sont le vide), effectue le remplissage et est ensuite reconverti. (encore une fois
#
est rempli, l'espace n'est pas rempli).Merci @LuisMendo pour -
1octet.la source
~=32
par>32
C, 162 octets
Prend l'entrée des arguments (
./floodfill X Y grid
). La grille doit contenir\n
ou\r\n
entre chaque ligne, la nouvelle ligne finale est facultative. Le moyen le plus simple que j'ai trouvé pour invoquer depuis le shell:Sorties vers stdout, en utilisant
!
pour le caractère de remplissage. Si la position de départ coïncide avec a#
, ne change rien.Panne:
Notez que cela repose sur la modification de la chaîne d'argument d'entrée, ce qui est interdit, donc cela peut ne pas fonctionner sur toutes les plateformes (les déclarations implicites rendent également cela non standard).
la source
int w, l;
simplementw, l;
- par défaut gcc àint
taperC -
263247240238 octetsCeci est la
premièredeuxièmetroisième version, je pense que le code peut également être réduit.Et version lisible:
Compiler et exécuter:
gcc -o flood floodgolf.c && cat 1.txt | ./flood
Ressources:
Remarque: je travaille sur les
int
valeurs. Chaque(32) est traité comme un espace vide. Toute autre valeur est traitée comme une bordure. Les coordonnées sont au format
(row, column)
la source
for
(scanf
ici), et en utilisant le premier paramètre de main comme déclaration int bon marché fonctionnera dans la plupart des compilateurs. Vous pourriez également être en mesure d'économiser un peu en aplatissant votre tableau (cela devrait certainement aider la boucle d'impression)Python 2, 158 octets
Essayez-le en ligne . Solution récursive simple
0 indexé dans l'ordre ligne-colonne
1 - espace vide, 0 - espace rempli
Prend l'entrée en tant que tableau de tableaux de 1 et 0 et de deux nombres
la source
Perl 5 , 129 + 1 (-a) = 130 octets
Essayez-le en ligne!
Comment?
la source