Chinaunix
标题:
[练习] 合并
[打印本页]
作者:
rubyish
时间:
2013-11-26 01:25
标题:
[练习] 合并
挑一些运动量小的练习练习~{:3_188:}
合并
from:
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
to:
0 0
1
0 0
2
0 0
3
0 0 0 0 0 0
4
0 0
5
0 0
6
0
4
0
5
0 0 0
6
0 0
5
0 0 0 0 0 0 0
0 0
7
7
0
7
7
0
8
0
7
7
0
7
7
0
0 0 0 0
7
0 0 0
0 0
9
0 0 0
9
0
0 0
9
9
9
9
9
9
作者:
rubyish
时间:
2013-11-26 01:38
本帖最后由 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
复制代码
作者:
Sevk
时间:
2013-11-26 20:39
提示:
作者被禁止或删除 内容自动屏蔽
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2