日々精進

新しく学んだことを書き留めていきます

プログラミングコンテストチャレンジブック演習「lake counting」

今回のお題はこちら

今回はまった点は以下。
Rubyでは、改行を挟んで文を続けたい場合は「\」を改行前に打つ
普段C#とか書いてたら忘れますな。。

$lake = [
  ["W", ".", ".", ".", ".", ".", ".", ".", ".", "W", "W", "."] \
 ,[".", "W", "W", "W", ".", ".", ".", ".", ".", "W", "W", "W"] \
 ,[".", ".", ".", ".", "W", "W", ".", ".", ".", "W", "W", "."] \
 ,[".", ".", ".", ".", ".", ".", ".", ".", ".", "W", "W", "."] \
 ,[".", ".", ".", ".", ".", ".", ".", ".", ".", "W", ".", "."] \
 ,[".", ".", "W", ".", ".", ".", ".", ".", ".", "W", ".", "."] \
 ,[".", "W", ".", "W", ".", ".", ".", ".", ".", "W", "W", "."] \
 ,["W", ".", "W", ".", "W", ".", ".", ".", ".", ".", "W", "."] \
 ,[".", "W", ".", "W", ".", ".", ".", ".", ".", ".", "W", "."] \
 ,[".", ".", "W", ".", ".", ".", ".", ".", ".", ".", "W", "."] \
] #input
Height = $lake[0].length - 1
Width = $lake.length - 1


def dfs(x, y)
  for i in ([0, x - 1].max)..([Width, x + 1].min)
    for j in ([0, y - 1].max)..([Height, y + 1].min)
      if $lake[i][j] == "W"
        $lake[i][j] = "."
        dfs(i,j)
      end
    end
  end
end

count = 0
for x in 0..Width
  for y in 0..Height
    if $lake[x][y] == "W"
      dfs(x, y)
      count += 1
    end
  end
end

puts count