Tâche
Étant donné un diagramme ASCII d'une boucle
par exemple
....................
......@@@@@.........
......@...@.........
.....@@...@@@@@.....
....@@........@.....
....@........@@.....
....@@@@@@@@@@......
....................
....................
Et un emplacement sur la boucle
par exemple
(7,1)
Vous devez trouver l'intérieur et l'extérieur de la boucle
par exemple
00000000000000000000
00000011111000000000
00000011111000000000
00000111111111100000
00001111111111100000
00001111111111100000
00001111111111000000
00000000000000000000
00000000000000000000
Caractéristiques
Vous pouvez prendre l'entrée pour le diagramme comme une chaîne séparée par des sauts de ligne ou un équivalent évident
Vous recevrez une coordonnée sur la boucle (0 ou 1 indexée) dans le cadre de votre entrée. Vous pouvez placer votre origine à n'importe quel endroit de votre choix. Vous pouvez prendre cette coordonnée dans
(<row>, <column>)
,(<column>, <row>)
ou la position linéaire sur la chaîne. Vous pouvez recevoir ces données par toute méthode raisonnable. Tous les caractères de la boucle seront identiques à ceux de cet index.La sortie préférée est un tableau bidimensionnel de valeurs véridiques et fausses, cependant les chaînes de
1
et0
séparées par des sauts de ligne ou tout équivalent évident des deux dernières sont acceptées. L'intérieur et l'extérieur doivent avoir des valeurs de vérité différentes mais peu importe qui est lequel.Une boucle est définie comme un groupe de caractères tels qu'ils sont tous le même caractère ( par exemple
@
) et de sorte que chaque caractère de la boucle ait un chemin vers le caractère d'origine (le caractère à la coordonnée d'entrée) qui ne passe que par ce même caractère (géométrie Taxicab sans diagonales ).L'intérieur est toute la boucle elle-même et les endroits qui ne peuvent pas atteindre le bord du diagramme sans traverser la boucle.
L'extérieur est partout ailleurs
C'est du code-golf
[['.', '.'],['.', '@']]
au lieu d'une chaîne avec des sauts de ligne?Réponses:
MATLAB,
16315914678 octetsMerci @ rahnema1 pour -66 octets !!!
Maintenant, cela fonctionne sur Essayez-le en ligne! MAIS quelques ajustements ont été nécessaires, car MATLAB et Octave ne sont pas entièrement compatibles.
Explication
D'abord, nous créons une image binaire qui masque simplement tous les caractères égaux au caractère initial. Ensuite, nous déterminons le composant connecté dans lequel se trouve le caractère initial.
Après cela, nous créons une image de ce composant connecté et appliquons remplir tous les "trous" de l'image.
la source
MATLAB: 67 octets
Quelques mises en garde:
A
est supposé être un tableau de caractères.output = f(A,2,8)
).bwlabel
etimfill
font partie de la boîte à outils de traitement d'image.la source