2008/11/25

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

島の数をカウントする どう書く?orgをといてみた。

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) && (it.y in 0..YMAX) && 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

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

0 件のコメント:

コメントを投稿