Mathematica 188 185 170 115 115 130 46 48 caractères
Explication
Dans les versions précédentes, j'ai fait un graphique des positions ayant une distance d'échiquier de 1 les unes des autres. GraphComponents
a ensuite révélé le nombre d'îles, une par composante.
La présente version utilise MorphologicalComponents
pour rechercher et numéroter des grappes dans les régions du tableau où 1
sont physiquement contiguës. Parce que la représentation graphique n'est pas nécessaire, cela se traduit par une énorme économie de code.
Code
Max@MorphologicalComponents[#/.{"."->0,"*"->1}]&
Exemple
Max@MorphologicalComponents[#/.{"."->0,"*"->1}]&[{{".", ".", ".", ".", ".", ".", ".", ".", ".", "*", "*"}, {"*", "*", ".", ".", ".", ".", ".", ".", "*", "*", "*"}, {".", ".", ".", ".", ".", ".", ".", ".", ".", ".", "."}, {".", ".", ".", "*", ".", ".", ".", ".", ".", ".", "."}, {"*", ".", ".", ".", ".", ".", ".", ".", ".", "*", "."}, {"*", ".", ".", ".", ".", ".", ".", ".", ".", ".", "*"}}]
5
Comment ça marche
Les données sont entrées sous forme de tableau; dans Mathematica, il s'agit d'une liste de listes.
Dans le tableau d'entrée, les données sont converties en 1
's et 0
' par le remplacement
/.{"."->0,"*"->1}
où /.
est une forme d'infixe ReplaceAll
suivie de règles de remplacement. Cela convertit essentiellement la matrice en une image en noir et blanc. Tout ce que nous devons faire est d'appliquer la fonction Image
,.
Image[{{".", ".", ".", ".", ".", ".", ".", ".", ".", "*", "*"}, {"*", "*", ".", ".", ".", ".", ".", ".", "*", "*", "*"}, {".", ".", ".", ".", ".", ".", ".", ".", ".", ".", "."}, {".", ".", ".", "*", ".", ".", ".", ".", ".", ".", "."}, {"*", ".", ".", ".", ".", ".", ".", ".", ".", "*", "."}, {"*", ".", ".", ".", ".", ".", ".", ".", ".", ".", "*"}} /. {"." -> 0, "*" -> 1}]

Les carrés blancs correspondent aux cellules ayant la valeur 1.
L'image ci-dessous montre quelques étapes que l'approche utilise. La matrice d'entrée ne contient que des 1
«et 0
». La matrice de sortie étiquette chaque groupe morphologique avec un nombre. (J'ai enveloppé les matrices d'entrée et de sortie MatrixForm
pour mettre en évidence leur structure bidimensionnelle.)
MorphologicalComponents
remplace 1
s par un entier correspondant au numéro de cluster de chaque cellule.

Max
renvoie le plus grand numéro de cluster.
Affichage des îles
Colorize
colorera chaque île de façon unique.
