amaze 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +9 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +4 -0
  5. data/Gemfile +4 -0
  6. data/LICENSE.txt +21 -0
  7. data/README.md +110 -0
  8. data/Rakefile +6 -0
  9. data/amaze.gemspec +30 -0
  10. data/bin/console +15 -0
  11. data/bin/setup +8 -0
  12. data/exe/amaze +5 -0
  13. data/lib/amaze.rb +17 -0
  14. data/lib/amaze/algorithm.rb +44 -0
  15. data/lib/amaze/algorithm/aldous_border.rb +36 -0
  16. data/lib/amaze/algorithm/binary_tree.rb +20 -0
  17. data/lib/amaze/algorithm/growing_tree.rb +52 -0
  18. data/lib/amaze/algorithm/hunt_and_kill.rb +53 -0
  19. data/lib/amaze/algorithm/recursive_backtracker.rb +77 -0
  20. data/lib/amaze/algorithm/sidewinder.rb +42 -0
  21. data/lib/amaze/algorithm/wilson.rb +54 -0
  22. data/lib/amaze/cell.rb +63 -0
  23. data/lib/amaze/cell/hex.rb +10 -0
  24. data/lib/amaze/cell/octo.rb +10 -0
  25. data/lib/amaze/cell/polar.rb +16 -0
  26. data/lib/amaze/cell/square.rb +10 -0
  27. data/lib/amaze/distances.rb +53 -0
  28. data/lib/amaze/factory.rb +153 -0
  29. data/lib/amaze/formatter.rb +5 -0
  30. data/lib/amaze/formatter/ascii.rb +91 -0
  31. data/lib/amaze/formatter/ascii/delta.rb +180 -0
  32. data/lib/amaze/formatter/ascii/ortho.rb +105 -0
  33. data/lib/amaze/formatter/ascii/polar.rb +199 -0
  34. data/lib/amaze/formatter/ascii/sigma.rb +213 -0
  35. data/lib/amaze/formatter/ascii/upsilon.rb +281 -0
  36. data/lib/amaze/formatter/image.rb +127 -0
  37. data/lib/amaze/formatter/image/delta.rb +123 -0
  38. data/lib/amaze/formatter/image/ortho.rb +103 -0
  39. data/lib/amaze/formatter/image/polar.rb +173 -0
  40. data/lib/amaze/formatter/image/sigma.rb +122 -0
  41. data/lib/amaze/formatter/image/upsilon.rb +135 -0
  42. data/lib/amaze/grid.rb +66 -0
  43. data/lib/amaze/grid/delta.rb +87 -0
  44. data/lib/amaze/grid/ortho.rb +38 -0
  45. data/lib/amaze/grid/polar.rb +61 -0
  46. data/lib/amaze/grid/sigma.rb +61 -0
  47. data/lib/amaze/grid/upsilon.rb +74 -0
  48. data/lib/amaze/mask.rb +75 -0
  49. data/lib/amaze/masked_grid.rb +29 -0
  50. data/lib/amaze/script.rb +361 -0
  51. data/lib/amaze/shape.rb +23 -0
  52. data/lib/amaze/shape/diamond.rb +26 -0
  53. data/lib/amaze/shape/hexagon.rb +79 -0
  54. data/lib/amaze/shape/star.rb +114 -0
  55. data/lib/amaze/shape/triangle.rb +25 -0
  56. data/lib/amaze/version.rb +3 -0
  57. data/support/characters.txt +17 -0
  58. data/support/mask/mask1.txt +10 -0
  59. data/support/mask/mask2.txt +12 -0
  60. data/support/mask/mask3.txt +15 -0
  61. metadata +203 -0
@@ -0,0 +1,213 @@
1
+
2
+ class Amaze::Formatter::ASCII::Sigma < Amaze::Formatter::ASCII
3
+
4
+ def draw_cell cell
5
+ x0, y0 = coord cell
6
+ x1 = x0 + cell_size
7
+ x2 = x0 + cell_size + cell_size * 3
8
+ y1 = y0 + cell_size
9
+
10
+ 0.upto(cell_size*3-1) do |i|
11
+ # north
12
+ char[y0][x1+i] = n.color(grid_color) unless cell.linked_to?(:north)
13
+ # south
14
+ char[y0+cell_size*2][x1+i] = s.color(grid_color) unless cell.linked_to?(:south)
15
+ end
16
+
17
+ 0.upto(cell_size-1) do |i|
18
+ # north east
19
+ char[y0+1+i][x2+i] = ne.color(grid_color) unless cell.linked_to?(:northeast)
20
+ # north west
21
+ char[y0+1+i][x0+cell_size-1-i] = nw.color(grid_color) unless cell.linked_to?(:northwest)
22
+ # south east
23
+ char[y1+1+i][x2+cell_size-1-i] = se.color(grid_color) unless cell.linked_to?(:southeast)
24
+ # south west
25
+ char[y1+1+i][x0+i] = sw.color(grid_color) unless cell.linked_to?(:southwest)
26
+ end
27
+ end
28
+
29
+ def draw_content cell
30
+ x, y = coord cell
31
+ distance(cell).center(cell_size * 3).chars.each_with_index do |c,i|
32
+ char[y+cell_size][x+cell_size+i] = c.color(*distance_color(cell))
33
+ end
34
+ end
35
+
36
+ def draw_path cell
37
+ x, y = coord cell, :center
38
+ # north-south
39
+ 1.upto(cell_size*2) do |i|
40
+ char[y+i][x] = p.color(path_color)
41
+ end if path?(:south, cell)
42
+ # northwest-southeast
43
+ 0.upto(cell_size-1) do |i|
44
+ char[y+i][x+i*4] = p.color(path_color)
45
+ char[y+i+1][x+i*4+2] = pnwse.color(path_color)
46
+ end if path?(:southeast, cell)
47
+ # southwest-northeast
48
+ 0.upto(cell_size-1) do |i|
49
+ char[y-i][x+i*4] = p.color(path_color)
50
+ char[y-i][x+i*4+2] = pswne.color(path_color)
51
+ end if path?(:northeast, cell)
52
+ # center
53
+ char[y][x] = p.color(path_color)
54
+ end
55
+
56
+ def coord cell, ref=:topleft
57
+ x = xpos(cell.column)
58
+ y = ypos(cell.row, cell.column.odd?)
59
+ if ref == :center
60
+ x = x + cell_size * 3 / 2 + cell_size
61
+ y = y + cell_size
62
+ end
63
+ [x, y]
64
+ end
65
+
66
+ def xpos column
67
+ (cell_size * 4) * column
68
+ end
69
+
70
+ def ypos row, odd=false
71
+ offset = odd ? cell_size : 0
72
+ (cell_size * 2) * row + offset
73
+ end
74
+
75
+ def char_array_width
76
+ xpos(grid.columns) + cell_size
77
+ end
78
+
79
+ def char_array_height
80
+ ypos(grid.rows, true) + 1
81
+ end
82
+
83
+ def n
84
+ '_'
85
+ end
86
+
87
+ def ne
88
+ '\\'
89
+ end
90
+
91
+ def se
92
+ '/'
93
+ end
94
+
95
+ def p
96
+ '.'
97
+ end
98
+
99
+ def pnwse
100
+ '`'
101
+ end
102
+
103
+ def pswne
104
+ '´'
105
+ end
106
+
107
+ alias_method :s, :n
108
+ alias_method :sw, :ne
109
+ alias_method :nw, :se
110
+ end
111
+
112
+ __END__
113
+
114
+ .___.....___.....___.....
115
+ /...\___/...\___/...\___.
116
+ \___/...\___/...\___/...\
117
+ /...\___/...\___/...\___/
118
+ \___/...\___/...\___/...\
119
+ /...\___/...\___/...\___/
120
+ \___/...\___/...\___/....
121
+ ....\___/...\___/........
122
+
123
+
124
+ ..______..........______..........______..........
125
+ ./......\......../......\......../......\.........
126
+ /........\______/........\______/........\______..
127
+ \......../......\......../......\......../......\.
128
+ .\______/........\______/........\______/........\
129
+ ./......\......../......\......../......\......../
130
+ /........\______/........\______/........\______/.
131
+ \......../......\......../......\......../......\.
132
+ .\______/........\______/........\______/........\
133
+ ./......\......../......\......../......\......../
134
+ /........\______/........\______/........\______/.
135
+ \......../......\......../......\......../......\.
136
+ .\______/........\______/........\______/........\
137
+ ........\......../......\......../......\......../
138
+ .........\______/........\______/........\______/.
139
+
140
+
141
+ ..._________..............._________..............._________
142
+ ../.........\............./.........\............./.........\
143
+ ./...........\.........../...........\.........../...........\
144
+ /.............\_________/.............\_________/.............\_________
145
+ \............./.........\............./.........\............./.........\
146
+ .\.........../...........\.........../...........\.........../...........\
147
+ ..\_________/.............\_________/.............\_________/.............\
148
+ ../.........\............./.........\............./.........\............./
149
+ ./...........\.........../...........\.........../...........\.........../
150
+ /.............\_________/.............\_________/.............\_________/
151
+ \............./.........\............./.........\............./.........\
152
+ .\.........../...........\.........../...........\.........../...........\
153
+ ..\_________/.............\_________/.............\_________/.............\
154
+ ../.........\............./.........\............./.........\............./
155
+ ./...........\.........../...........\.........../...........\.........../
156
+ /.............\_________/.............\_________/.............\_________/
157
+ \............./.........\............./.........\............./.........\
158
+ .\.........../...........\.........../...........\.........../...........\
159
+ ..\_________/.............\_________/.............\_________/.............\
160
+ ............\............./.........\............./.........\............./
161
+ .............\.........../...........\.........../...........\.........../
162
+ ..............\_________/.............\_________/.............\_________/
163
+
164
+
165
+ ___ ___ ___
166
+ / . \___/ \___/ \___
167
+ \ . ` . \___/ . \___/ \
168
+ / . \___` . ´___/ \___/
169
+ \___/ \___/ \___/ \
170
+ / \___/ \___/ \___/
171
+ \___/ \___/ \___/
172
+ \___/ \___/
173
+
174
+
175
+ ______ ______ ______
176
+ / \ / \ / \
177
+ / . \______/ \______/ \______
178
+ \ . ` . \ / \ / \
179
+ \ . ` . \______/ . \______/ \
180
+ / . \ ` . . ´ / \ /
181
+ / . \______ ` . ´ ______/ \______/
182
+ \ . / \ / \ / \
183
+ \___.__/ \______/ \______/ \
184
+ / \ / \ / \ /
185
+ / \______/ \______/ \______/
186
+ \ / \ / \ / \
187
+ \______/ \______/ \______/ \
188
+ \ / \ / \ /
189
+ \______/ \______/ \______/
190
+
191
+
192
+ _________ _________ _________
193
+ / \ / \ / \
194
+ / \ / \ / \
195
+ / . \_________/ \_________/ \_________
196
+ \ . ` . \ / \ / \
197
+ \ . ` . \ / \ / \
198
+ \ . ` . \_________/ \_________/ \
199
+ / . \ ` . . / \ /
200
+ / . \ ` . . ´ / \ /
201
+ / . \_________ ` . ´ _________/ \_________/
202
+ \ / \ / \ / \
203
+ \ / \ / \ / \
204
+ \_________/ \_________/ \_________/ \
205
+ / \ / \ / \ /
206
+ / \ / \ / \ /
207
+ / \_________/ \_________/ \_________/
208
+ \ / \ / \ / \
209
+ \ / \ / \ / \
210
+ \_________/ \_________/ \_________/ \
211
+ \ / \ / \ /
212
+ \ / \ / \ /
213
+ \_________/ \_________/ \_________/
@@ -0,0 +1,281 @@
1
+
2
+ class Amaze::Formatter::ASCII::Upsilon < Amaze::Formatter::ASCII
3
+
4
+ def draw_cell cell
5
+ x0, x1, x2, x3, y0, y1, y2, y3 = coord cell
6
+
7
+ if (cell.row+cell.column).even?
8
+ # draw octo cell
9
+ # corners
10
+ char[y0][x1] = corner.color(grid_color)
11
+ char[y0][x2] = corner.color(grid_color)
12
+ char[y1][x0] = corner.color(grid_color)
13
+ char[y1][x3] = corner.color(grid_color)
14
+ char[y2][x0] = corner.color(grid_color)
15
+ char[y2][x3] = corner.color(grid_color)
16
+ char[y3][x1] = corner.color(grid_color)
17
+ char[y3][x2] = corner.color(grid_color)
18
+ 1.upto(cell_size) do |i|
19
+ # northeast
20
+ char[y0+i][x2+i] = ne.color(grid_color) unless cell.linked_to?(:northeast)
21
+ # southeast
22
+ char[y2+i][x3-i] = se.color(grid_color) unless cell.linked_to?(:southeast)
23
+ # southwest
24
+ char[y2+i][x0+i] = sw.color(grid_color) unless cell.linked_to?(:southwest)
25
+ # northwest
26
+ char[y0+i][x1-i] = nw.color(grid_color) unless cell.linked_to?(:northwest)
27
+ # east
28
+ char[y1+i][x3] = v.color(grid_color) unless cell.linked_to?(:east)
29
+ # west
30
+ char[y1+i][x0] = v.color(grid_color) unless cell.linked_to?(:west)
31
+ end
32
+ 1.upto(cell_size*3) do |i|
33
+ # north
34
+ char[y0][x1+i] = h.color(grid_color) unless cell.linked_to?(:north)
35
+ # south
36
+ char[y3][x1+i] = h.color(grid_color) unless cell.linked_to?(:south)
37
+ end
38
+ else
39
+ # draw square cell
40
+ # corners
41
+ char[y1][x1] = corner.color(grid_color)
42
+ char[y1][x2] = corner.color(grid_color)
43
+ char[y2][x1] = corner.color(grid_color)
44
+ char[y2][x2] = corner.color(grid_color)
45
+ 1.upto(cell_size) do |i|
46
+ # east
47
+ char[y1+i][x2] = v.color(grid_color) unless cell.linked_to?(:east)
48
+ # west
49
+ char[y1+i][x1] = v.color(grid_color) unless cell.linked_to?(:west)
50
+ end
51
+ 1.upto(cell_size*3) do |i|
52
+ # north
53
+ char[y1][x1+i] = h.color(grid_color) unless cell.linked_to?(:north)
54
+ # south
55
+ char[y2][x1+i] = h.color(grid_color) unless cell.linked_to?(:south)
56
+ end
57
+ end
58
+ end
59
+
60
+ def draw_content cell
61
+ x0, x1, x2, x3, y0, y1, y2, y3 = coord cell
62
+
63
+ y = y1 + (y2 - y1) / 2
64
+ distance(cell).center(cell_size * 3).chars.each_with_index do |c,i|
65
+ char[y][x1+1+i] = c.color(*distance_color(cell))
66
+ end
67
+ end
68
+
69
+ def draw_path cell
70
+ x0, x1, x2, x3, y0, y1, y2, y3 = coord cell
71
+
72
+ # middle of cell
73
+ mx0 = (x1 + x2) / 2
74
+ my0 = (y1 + y2) / 2
75
+
76
+ # delta to middle of neighbor cell
77
+ dx = cell_size * 4 + 2
78
+ dy = cell_size * 2 + 2
79
+
80
+ # north-south
81
+ 1.upto(dy-1) do |i|
82
+ char[my0+i][mx0] = v.color(path_color)
83
+ end if path?(:south, cell)
84
+ # west-east
85
+ 1.upto(dx-1) do |i|
86
+ char[my0][mx0+i] = h.color(path_color)
87
+ end if path?(:east, cell)
88
+
89
+ if (cell.column+cell.row).even?
90
+ # northwest-southeast
91
+ if path?(:southeast, cell)
92
+ mx1 = mx0 + dx / 2
93
+ my1 = my0 + dy / 2
94
+
95
+ char[my1][mx1] = center.color(path_color)
96
+ 1.upto(cell_size) do |i|
97
+ char[my0+i][mx0+i*2-1] = pnwse1.color(path_color)
98
+ char[my0+i][mx0+i*2] = pnwse2.color(path_color)
99
+ char[my1+i][mx1+i*2-1] = pnwse1.color(path_color)
100
+ char[my1+i][mx1+i*2] = pnwse2.color(path_color)
101
+ end
102
+ end
103
+ # northeast-southwest
104
+ if path?(:southwest, cell)
105
+ mx1 = mx0 - dx / 2
106
+ my1 = my0 + dy / 2
107
+
108
+ char[my1][mx1] = center.color(path_color)
109
+ 1.upto(cell_size) do |i|
110
+ char[my0+i][mx0-i*2+1] = pswne1.color(path_color)
111
+ char[my0+i][mx0-i*2] = pswne2.color(path_color)
112
+ char[my1+i][mx1-i*2+1] = pswne1.color(path_color)
113
+ char[my1+i][mx1-i*2] = pswne2.color(path_color)
114
+ end
115
+ end
116
+ end
117
+
118
+ # center
119
+ char[my0][mx0] = center.color(path_color)
120
+ end
121
+
122
+ # left, right, top, bottom
123
+ def coord cell
124
+ x0 = x(cell.column)
125
+ x1 = x0 + cell_size + 1
126
+ x2 = x1 + cell_size * 3 + 1
127
+ x3 = x2 + cell_size + 1
128
+ y0 = y(cell.row)
129
+ y1 = y0 + cell_size + 1
130
+ y2 = y1 + cell_size + 1
131
+ y3 = y2 + cell_size + 1
132
+ [x0, x1, x2, x3, y0, y1, y2, y3]
133
+ end
134
+
135
+ def x column
136
+ # x0 for octo cell
137
+ (cell_size * 4 + 2) * column
138
+ end
139
+
140
+ def y row
141
+ # y0 for octo cell
142
+ (cell_size * 2 + 2) * row
143
+ end
144
+
145
+ def char_array_width
146
+ x(grid.columns) + cell_size + 2
147
+ end
148
+
149
+ def char_array_height
150
+ y(grid.rows) + cell_size + 2
151
+ end
152
+
153
+ def h
154
+ '-'
155
+ end
156
+
157
+ def v
158
+ '|'
159
+ end
160
+
161
+ def ne
162
+ '\\'
163
+ end
164
+
165
+ def se
166
+ '/'
167
+ end
168
+
169
+ alias_method :sw, :ne
170
+ alias_method :nw, :se
171
+
172
+ def pnwse1
173
+ '`'
174
+ end
175
+
176
+ def pnwse2
177
+ '.'
178
+ end
179
+
180
+ def pswne1
181
+ '´'
182
+ end
183
+
184
+ alias_method :pswne2, :pnwse2
185
+
186
+ def center
187
+ '∙'
188
+ end
189
+
190
+ def corner
191
+ '+'
192
+ end
193
+ end
194
+
195
+ __END__
196
+
197
+ x y
198
+ c1 0 6 12 4 8 12 4 4 2
199
+ c2 0 10 20 6 12 18 8 6 4
200
+ c3 0 14 28 8 16 24 12 8 6
201
+
202
+ +---+ +---+ +---+
203
+ / \ / \ / \
204
+ + +---+ +---+ +---+
205
+ | ∙-----∙ | ∙ | | | |
206
+ + `. +---+ .´| +---+ +---+
207
+ \ ∙ ∙ | / \ / \
208
+ +---+ `. .´ + | + +---+ +
209
+ | | ∙ | ∙ | | | |
210
+ +---+ +---+ +---+ +
211
+ / \ / \ / \ /
212
+ + +---+ +---+ +---+
213
+ | | | | | | |
214
+ + +---+ +---+ +---+
215
+ \ / \ / \ / \
216
+ +---+ +---+ +---+ +
217
+ | | | | | | |
218
+ +---+ +---+ +---+ +
219
+ / \ / \ / \ /
220
+ + +---+ +---+ +---+
221
+ | | | | | | |
222
+ + +---+ +---+ +---+
223
+ \ / \ / \ /
224
+ +---+ +---+ +---+
225
+
226
+ +------+ +------+ +------+
227
+ / \ / \ / \
228
+ / \ / \ / \
229
+ + +------+ +------+ +------+
230
+ | ∙---------∙ | ∙ | | | |
231
+ | `. | .´| | | | |
232
+ + `. +------+ .´ | +------+ +------+
233
+ \ ∙ ∙ | / \ / \
234
+ \ `. .´ | / \ / \
235
+ +------+ `. .´ + | + +------+ +
236
+ | | ∙ | ∙ | | | |
237
+ | | | | | | |
238
+ +------+ +------+ +------+ +
239
+ / \ / \ / \ /
240
+ / \ / \ / \ /
241
+ + +------+ +------+ +------+
242
+ | | | | | | |
243
+ | | | | | | |
244
+ + +------+ +------+ +------+
245
+ \ / \ / \ / \
246
+ \ / \ / \ / \
247
+ +------+ +------+ +------+ +
248
+ | | | | | | |
249
+ | | | | | | |
250
+ +------+ +------+ +------+ +
251
+ / \ / \ / \ /
252
+ / \ / \ / \ /
253
+ + +------+ +------+ +------+
254
+ | | | | | | |
255
+ | | | | | | |
256
+ + +------+ +------+ +------+
257
+ \ / \ / \ /
258
+ \ / \ / \ /
259
+ +------+ +------+ +------+
260
+
261
+ +---------+ +---------+ +---------+
262
+ / \ / \ / \
263
+ / \ / \ / \
264
+ / \ / \ / \
265
+ + +---------+ +---------+ +---------+
266
+ | | | | | |
267
+ | ∙-------------∙ | ∙ | | | |
268
+ | `. | .´| | | | |
269
+ + `. +---------+ .´ | +---------+ +---------+
270
+ \ `. .´ | / \ / \
271
+ \ ∙ ∙ | / \ / \
272
+ \ `. .´ | / \ / \
273
+ +---------+ `. .´ + | + +---------+ +
274
+ | | `. .´ | | | | |
275
+ | | ∙ | ∙ | | |
276
+ | | | | | |
277
+ +---------+ +---------+ +---------+
278
+ / \ / \ / \
279
+ / \ / \ / \
280
+ / \ / \ / \
281
+ + +---------+ +---------+ +---------+