28 lines
788 B
Ruby
28 lines
788 B
Ruby
X, Y, Z = 6, 2, 3
|
|
DIR = {"-" => [1,0], "|" => [0,1], "/" => [1,1]}
|
|
|
|
def cuboid(nx, ny, nz)
|
|
puts "cuboid %d %d %d:" % [nx, ny, nz]
|
|
x, y, z = X*nx, Y*ny, Z*nz
|
|
area = Array.new(y+z+1){" " * (x+y+1)}
|
|
draw_line = lambda do |n, sx, sy, c|
|
|
dx, dy = DIR[c]
|
|
(n+1).times do |i|
|
|
xi, yi = sx+i*dx, sy+i*dy
|
|
area[yi][xi] = (area[yi][xi]==" " ? c : "+")
|
|
end
|
|
end
|
|
nz .times {|i| draw_line[x, 0, Z*i, "-"]}
|
|
(ny+1).times {|i| draw_line[x, Y*i, z+Y*i, "-"]}
|
|
nx .times {|i| draw_line[z, X*i, 0, "|"]}
|
|
(ny+1).times {|i| draw_line[z, x+Y*i, Y*i, "|"]}
|
|
nz .times {|i| draw_line[y, x, Z*i, "/"]}
|
|
(nx+1).times {|i| draw_line[y, X*i, z, "/"]}
|
|
puts area.reverse
|
|
end
|
|
|
|
cuboid(2, 3, 4)
|
|
cuboid(1, 1, 1)
|
|
cuboid(6, 2, 1)
|
|
cuboid(2, 4, 1)
|