Maze generation: Difference between revisions
Content added Content deleted
m (Added Sidef language) |
|||
Line 5,276: | Line 5,276: | ||
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ |
||
</pre> |
</pre> |
||
=={{header|Sidef}}== |
|||
<lang ruby>var(w:5, h:5) = ARGV.map{.to_i}...; |
|||
var avail = (w * h); |
|||
# cell is padded by sentinel col and row, so I don't check array bounds |
|||
var cell = (1..h -> map {([true] * w) + [false]} + [[false] * w+1]); |
|||
var ver = (1..h -> map {["| "] * w }); |
|||
var hor = (0..h -> map {["+--"] * w }); |
|||
func walk(x, y) { |
|||
cell[y][x] = false; |
|||
avail-- > 0 || return; # no more bottles, er, cells |
|||
var d = [[-1, 0], [0, 1], [1, 0], [0, -1]]; |
|||
while (d.len?) { |
|||
var i = d.pop_rand; |
|||
var (x1, y1) = (x + i[0], y + i[1]); |
|||
cell[y1][x1] || next; |
|||
if (x == x1) { hor[[y1, y].max][x] = '+ ' }; |
|||
if (y == y1) { ver[y][[x1, x].max] = ' ' }; |
|||
walk(x1, y1); |
|||
} |
|||
} |
|||
walk(w.rand.int, h.rand.int); # generate |
|||
0...h each { |i| |
|||
say (hor[i].join('') + '+'); |
|||
if (i < h) { |
|||
say (ver[i].join('') + '|'); |
|||
} |
|||
}</lang> |
|||
{{out}} |
|||
<pre> |
|||
+--+--+--+--+--+ |
|||
| | | |
|||
+--+ +--+ + + |
|||
| | | |
|||
+ +--+--+--+--+ |
|||
| | | |
|||
+--+ + +--+ + |
|||
| | | | |
|||
+ +--+--+ +--+ |
|||
| | |
|||
+--+--+--+--+--+ |
|||
</pre> |
|||
=={{header|Swift}}== |
=={{header|Swift}}== |
||
{{trans|Java}} |
{{trans|Java}} |