N = gets.to_i U = Array.new(N){ Array.new(N,0) } D = [[0,1],[1,0],[0,-1],[-1,0]] pos = [0, 0] dir = 0 (1 .. N ** 2).each do |n| y,x = pos U[y][x] = n r = 4.times.find do |r| dy,dx = D[(dir + r) % 4] (0 ... N).include?(y + dy) && (0 ... N).include?(x + dx) && U[y + dy][x + dx] == 0 end break if r.nil? dir = (dir + r) % 4 dy, dx = D[dir] pos = [y + dy, x + dx] end puts U.map{|row| row.map{|n| '%03d' % n}.join(' ') }