- 论坛徽章:
- 7
|
本帖最后由 rubyish 于 2013-11-27 20:43 编辑
v2:{:3_188:}- #!/usr/bin/ruby -w
- nteam = 1
- hregister = Hash.new {|h, k| h[k] = [] }
- hdata = Hash.new {|h, k| h[k] = Hash.new 0 }
- DATA.each_with_index do |l, i|
- l.split.each_with_index do |e, j|
- e == ?0 and hdata[i][j] = 0 and next
- *asite = [i, j-1], [i-1, j-1], [i-1, j], [i-1, j+1]
- nbuddy, ngang = asite.reject {|r| r[0] < 0 }.
- map {|x, y| hdata[x][y] }.reject(&:zero?).uniq.sort
- nbuddy ||= ( nteam += 1 ) - 1
-
- [[i, j], *hregister[ngang]].each do |a, b|
- hdata[a][b] = nbuddy
- hregister[nbuddy] << [a, b]
- end
- hregister.delete ngang
- end
- end
- hregister.each_with_index do |r, i|
- r[1].each {|x, y| hdata[x][y] = i + 1 }
- end
- hdata.each_value {|v| puts v.values * ?\s }
- __END__
- 0 0 1 0 0 1 0 0
- 1 0 0 0 0 0 0 1
- 0 0 1 0 0 1 0 1
- 0 1 0 0 0 1 0 0
- 1 0 0 0 0 0 0 0
- 0 0 1 1 0 1 1 0
- 1 0 1 1 0 1 1 0
- 0 0 0 0 1 0 0 0
- 0 0 1 0 0 0 1 0
- 0 0 1 1 1 1 1 1
复制代码 |
|