```In honor of Clifford's very clear description of his maze-generation algorithm,
here is my attempt at a solution, and an example output:
#!/usr/bin/env ruby

class Maze
TOP  = 1
LEFT = 2
def initialize(w,h)
@w = w
@h = h
@maze = Array.new(w*h)
@wall = Array.new(w*h, TOP|LEFT)
@w.times do |i|
@h.times do |j|
putMaze(i,j,j*@w+i)
end
end

# First, break exactly one top wall
clearWall(rand(@w),0,TOP)
# and define the exit column at the bottom...
@exit = rand(@w)
# Now, randomly break walls...
(@w*@h-1).times do |i|
breakWall
end
end

def getMaze(x,y)
@maze[y*@w+x]
end

def putMaze(x,y,val)
@maze[y*@w+x] = val
end

def getWall(x,y,which)
(@wall[y*@w+x] & which == 0 ? false : true)
end

def clearWall(x,y,which)
@wall[y*@w+x] = @wall[y*@w+x] & (~which)
end

def breakWall
while 1
x = rand(@w)
y = rand(@h)
wall = 1 + rand(2)
# Don't break LEFT wall for x==0
next if (x==0 && wall==LEFT)
# Don't break TOP wall for y==0
next if (y==0 && wall==TOP)
x2 = wall==LEFT ? x-1 : x
y2 = wall==TOP  ? y-1 : y
next if getMaze(x,y)==getMaze(x2,y2)
# Found a valid wall to break!!!
clearWall(x,y,wall)
# Now, change all numbers in the maze from the higher number to the lower number
from = getMaze(x,y)
to = getMaze(x2,y2)
changePath(from,to)
return
end
end

def changePath(n1,n2)
higher = (n1 > n2 ? n1 : n2)
lower  = (n1 < n2 ? n1 : n2)
@w.times do |w|
@h.times do |h|
putMaze(w,h,lower) if getMaze(w,h)==higher
end
end
end

def to_s
@w.times do |w|
print getWall(w,0,TOP) ? "____" : "_   "
end
print "\n"
@h.times do |h|
@w.times do |w|
print getWall(w,h,LEFT) ? "|" : " "
print "   "
end
puts "|"
if h+1 == @h
# last row...
@w.times do |w|
print getWall(w,h,LEFT) ? "|" : "."
print @exit == w ? "   " : "___"
end
else
@w.times do |w|
print getWall(w,h,LEFT) ? "|" : "."
print getWall(w,h+1,TOP) ? "___" : "   "
end
end
puts "|"
end
end
end

if __FILE__ == \$0
maze = Maze.new(20,20)
puts maze
end

_____________________________________________________________________________
|           |   |               |   |       |           |                       |
|___.   .___|   |___.   .___.___|   |   .   |   .   .   |   .___.___.   .___.___|
|       |           |           |   |   |       |   |               |           |
|   .___|   .___.   |___.   .___|   |   |   .___|   |___.   .___.   |___.___.   |
|       |   |   |                   |   |       |   |       |               |   |
|   .___|   |   |   .   .___.   .   |___|___.   |___|___.___|   .___.___.   |   |
|       |   |       |       |   |               |       |   |   |   |   |   |   |
|   .   |   |   .   |___.___|___|___.   .___.   |___.   |   |   |   |   |   |___|
|   |   |   |   |           |               |   |       |   |           |       |
|   |___|   |___|___.   .   |___.___.   .___|___|___.   |   |   .   .___|___.   |
|           |           |       |           |           |       |           |   |
|___.   .___|___.___.   |   .___|   .___.   |___.___.   |___.   |___.___.___|___|
|   |       |           |       |   |   |   |           |       |   |           |
|   |___.___|___.___.   |___.___|___|   |   |___.___.   |___.   |   |   .___.___|
|       |               |           |       |       |                           |
|___.   |___.   .___.   |___.   .___|   .___|   .___|___.   .___.   .___.   .___|
|       |           |               |       |           |       |   |       |   |
|   .   |___.   .   |___.___.   .   |___.   |___.   .   |   .   |___|   .___|   |
|   |       |   |   |           |   |       |       |   |   |   |   |       |   |
|___|___.   |___|   |___.   .   |___|___.___|___.   |   |   |___|   |   .___|   |
|           |       |       |       |   |       |   |   |   |       |       |   |
|   .___.___|   .___|___.   |___.   |   |   .___|   |___|___|___.   |   .___|   |
|       |       |   |           |   |   |               |                   |   |
|   .   |___.   |   |   .   .___|___|   |___.   .___.   |___.___.   .   .   |   |
|   |           |       |           |           |       |           |   |   |   |
|   |___.   .___|___.   |___.___.   |   .   .___|___.___|___.___.___|___|___|   |
|   |               |           |       |       |       |               |       |
|___|___.___.   .___|   .___.   |   .___|___.___|___.   |___.   .___.___|___.   |
|   |               |   |       |   |   |                   |   |       |       |
|   |___.   .___.___|___|   .   |___|   |   .___.   .___.___|   |   .___|   .___|
|   |       |       |   |   |   |               |       |           |           |
|   |___.   |___.   |   |   |   |___.___.___.___|   .___|   .___.   |   .___.   |
|   |   |           |       |           |   |               |   |   |       |   |
|   |   |   .___.   |   .___|___.   .___|   |___.___.___.   |   |___|___.   |___|
|               |   |       |               |       |                       |   |
|___.   .   .___|___|___.___|___.___.___.   |   .___|   .___.___.   .___.___|   |
|       |   |   |   |   |           |   |                       |           |   |
|   .   |___|   |   |   |   .___.   |   |   .___.   .___.   .___|___.___.   |   |
|   |   |                   |               |       |               |           |
|___|___|___.___.   .___.___|___.___.___.___|___.___|___.___.___.___|___.___.___|

```