Problem:
ぐるぐる模様

「ぐるぐる模様」を表示するプログラムを作成することにしました。「ぐるぐる模様」は以下のようなものとします。

1 辺の長さが n の場合、n 行 n 列の文字列として表示する。

左下隅を基点とし，時計回りに回転する渦状の模様とする。

線のある部分は #（半角シャープ）、空白部分は " "（半角空白）で表現する。

線と線の間は空白を置く。

整数 n を入力とし，1 辺の長さが n の「ぐるぐる模様」を出力するプログラムを作成してください。

Input

入力は以下の形式で与えられます。

d
n1
n2
:
nd

１行目にデータセットの数 d (d ≤ 20)、続く d 行に i 個目のぐるぐる模様の辺の長さ ni (1 ≤ ni ≤ 100) がそれぞれ１行に与えられます。

Output

データセットごとに、ぐるぐる模様を出力してください。データセットの間に１行の空行を入れてください。

Sample Input

2
5
6

Output for the Sample Input

#####
# #
# # #
# # #
# ###

######
# #
# ## #
# # #
# # #
# ####

Solution in Ruby (judge verdict: WA: Presentation Error)

DIRS = [[0, -1], [1, 0], [0, 1], [-1, 0]]

def inside(n, x, y)
  (x >= 0 && x < n && y >= 0 && y < n)
end

def no_barrier(n, flds, x, y)
  (! inside(n, x, y) || flds[y][x] != '#')
end

d = gets.strip.to_i

(1..d).each do |di|
  n = gets.strip.to_i

  if n == 1
    puts "#"
  elsif n == 2
    puts "##"
    puts "# "
  else
    flds = n.times.map{" " * n}

    x = 0
    y = n - 1
    flds[y][x] = '#'
    dir = 0
    fwd = 0

    while true
      dx, dy = DIRS[dir]
      x0 = x + dx
      y0 = y + dy
      x1 = x0 + dx
      y1 = y0 + dy

      if inside(n, x0, y0) && no_barrier(n, flds, x1, y1)
        x = x0
        y = y0
        flds[y][x] = '#'
        fwd += 1
      elsif fwd < 2
        break
      else
        dir = (dir + 1) % 4
        fwd = 0
      end
    end

    puts if di > 1
    flds.each{|hl| puts hl}
  end
end