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

2019-04-14Groovy

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

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

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

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

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

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

2019-04-14Groovy