島の数をカウントする どう書く?org

m×nの長方形のマス目のうちいくつかを黒く塗りつぶします。 このとき、白の島、黒の島がそれぞれいくつあるかをカウントしてください。

ただし、2つのマスは、同色マスの上下左右の移動で移れるとき、 同じ島にあると定義します。

例: □■■□ □□■□ □■□□ □■■□ 白の島は2つ 黒の島は2つ

例: □□□□ ■□■□ □■□□ □□□□ 白の島は1つ 黒の島は3つ

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
def text = """
□■■□
■□□■
□□■□
□■■□"""

def score = ["■": 0, "□": 0]

board = text.readLines().collect { it.split("")[1..-1] }
XMAX = board.size() - 1
YMAX = board[0].size() - 1

def eat(mark, x, y) {
    board[x][y] = "×"
    // 周辺もいただきます♪
    [["x": x - 1, "y": y], ["x": x + 1, "y": y], ["x": x, "y": y - 1], ["x": x, "y": y + 1]].findAll {
        (it.x in 0..XMAX) & amp; & amp; (it.y in 0..YMAX) & amp; & amp; board[it.x][it.y] == mark
    }.each {
        eat(mark, it.x, it.y)
    }
}

(0..XMAX).each { x ->
    (0..YMAX).each { y ->
        def mark = board[x][y]
        if (mark != "×") {
            score[mark]++
            eat(mark, x, y)
        }
    }
}

println score

誤った投稿をして、サイトを汚しまくってしまった・・・