-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathquad_tree_image.rb
53 lines (45 loc) · 1.11 KB
/
quad_tree_image.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
class Leaf
def initialize(color)
@color = color
end
def to_s(size = 1)
([(@color ? "#" : ".") * size] * size).join("\n")
end
def rotate
self
end
end
class QuadTree
def initialize(ne, nw, sw, se)
@ne = ne
@nw = nw
@se = se
@sw = sw
end
def to_s(size)
return "/" if size == 1
(@nw.to_s(size/2).lines.map(&:chomp).zip(@ne.to_s(size/2).lines.map(&:chomp)).map(&:join) +
@sw.to_s(size/2).lines.map(&:chomp).zip(@se.to_s(size/2).lines.map(&:chomp)).map(&:join)).join("\n")
end
def rotate
QuadTree.new(@se.rotate, @ne.rotate, @nw.rotate, @sw.rotate)
end
end
w = Leaf.new(false)
b = Leaf.new(true)
cat = QuadTree.new(
QuadTree.new(w,w,QuadTree.new(w,b,b,w),w),
QuadTree.new(w,w,w,QuadTree.new(w,w,b,b)),
QuadTree.new(QuadTree.new(b,b,w,w),w,w,w),
QuadTree.new(QuadTree.new(w,w,b,b),b,QuadTree.new(b,w,w,b),b)
)
puts cat.to_s(8)
puts "________"
puts cat.rotate.to_s(8)
puts "--------------------------------------------------------------------------------"
puts QuadTree.new(
cat.rotate.rotate.rotate,
cat,
cat.rotate,
cat.rotate.rotate
).to_s(16)