13 lines
354 B
Ruby
13 lines
354 B
Ruby
n = 5
|
|
m = Array.new(n){Array.new(n)}
|
|
pos, side = -1, n
|
|
for i in 0 .. (n-1)/2
|
|
(0...side).each{|j| m[i][i+j] = (pos+=1) }
|
|
(1...side).each{|j| m[i+j][n-1-i] = (pos+=1) }
|
|
side -= 2
|
|
side.downto(0) {|j| m[n-1-i][i+j] = (pos+=1) }
|
|
side.downto(1) {|j| m[i+j][i] = (pos+=1) }
|
|
end
|
|
|
|
fmt = "%#{(n*n-1).to_s.size}d " * n
|
|
puts m.map{|row| fmt % row}
|