Mathematica 188 185 170 115 130 46 48 caracteres
Explicación
En versiones anteriores, hice un gráfico de posiciones que tenían una distancia del tablero de ajedrez de 1 entre sí. GraphComponents
Luego reveló el número de islas, una por componente.
La versión actual usa MorphologicalComponents
para encontrar y numerar grupos de unos en la matriz - regiones donde 1
están físicamente contiguas. Debido a que las gráficas son innecesarias, esto resulta en una gran economía de código.
Código
Max@MorphologicalComponents[#/.{"."->0,"*"->1}]&
Ejemplo
Max@MorphologicalComponents[#/.{"."->0,"*"->1}]&[{{".", ".", ".", ".", ".", ".", ".", ".", ".", "*", "*"}, {"*", "*", ".", ".", ".", ".", ".", ".", "*", "*", "*"}, {".", ".", ".", ".", ".", ".", ".", ".", ".", ".", "."}, {".", ".", ".", "*", ".", ".", ".", ".", ".", ".", "."}, {"*", ".", ".", ".", ".", ".", ".", ".", ".", "*", "."}, {"*", ".", ".", ".", ".", ".", ".", ".", ".", ".", "*"}}]
5 5
Cómo funciona
Los datos se ingresan como una matriz; en Mathematica, esta es una lista de listas.
En la matriz de entrada, los datos se convierten en 1
'sy 0
' s por el reemplazo
/.{"."->0,"*"->1}
donde /.
es una forma infija de ReplaceAll
seguida por reglas de reemplazo. Básicamente, esto convierte la matriz en una imagen en blanco y negro. Todo lo que necesitamos hacer es aplicar la función Image
,.
Image[{{".", ".", ".", ".", ".", ".", ".", ".", ".", "*", "*"}, {"*", "*", ".", ".", ".", ".", ".", ".", "*", "*", "*"}, {".", ".", ".", ".", ".", ".", ".", ".", ".", ".", "."}, {".", ".", ".", "*", ".", ".", ".", ".", ".", ".", "."}, {"*", ".", ".", ".", ".", ".", ".", ".", ".", "*", "."}, {"*", ".", ".", ".", ".", ".", ".", ".", ".", ".", "*"}} /. {"." -> 0, "*" -> 1}]

Los cuadrados blancos corresponden a las celdas que tienen el valor, 1.
La siguiente imagen muestra algunos pasos que utiliza el enfoque. La matriz de entrada contiene solo 1
'sy 0
' s. La matriz de salida etiqueta cada grupo morfológico con un número. (Empaqueté las matrices de entrada y salida MatrixForm
para resaltar su estructura bidimensional).
MorphologicalComponents
reemplaza 1
s con un número entero correspondiente al número de clúster de cada celda.

Max
devuelve el número de clúster más grande.
Viendo las islas
Colorize
coloreará cada isla de manera única.
