RosettaCodeData/Task/Spiral-matrix/Ruby/spiral-matrix-1.rb
2015-02-20 00:35:01 -05:00

18 lines
501 B
Ruby

def spiral(n)
spiral = Array.new(n) {Array.new(n, nil)} # n x n array of nils
runs = n.downto(0).each_cons(2).to_a.flatten # n==5; [5,4,4,3,3,2,2,1,1,0]
delta = [[1,0], [0,1], [-1,0], [0,-1]].cycle
x, y, value = -1, 0, -1
for run in runs
dx, dy = delta.next
run.times { spiral[y+=dy][x+=dx] = (value+=1) }
end
spiral
end
def print_matrix(m)
width = m.flatten.map{|x| x.to_s.size}.max
m.each {|row| puts row.map {|x| "%#{width}s " % x}.join}
end
print_matrix spiral(5)