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 Scala (judge verdict: WA: Presentation Error)

import scala.math.{min,max}

object Main {
  val sc = new java.util.Scanner(System.in);
  def main(args: Array[String]) {
    val d = sc.nextInt()
    for(i <- 1 to d) {
      var n = sc.nextInt()
      val m = Array.ofDim[Char](n, n)
      for(j <- 0 until n) {
        for(k <- 0 until n) {
          m(j)(k) = ' '
        }
      }
      var x, y = 0
      while(n > 0) {
        n match {
          case 1 => {
            m(x)(y) = '#'
          }
          case 2 => {
            m(x+0)(y+0) = '#'
            m(x+1)(y+0) = '#'
            m(x+1)(y+1) = '#'
          }
          case 3 => {
            for(j <- 0 to 2) {
              m(x+j)(y+0) = '#'
              m(x+j)(y+2) = '#'
              m(x+2)(y+j) = '#'
            }
          }
          case 4 => {
            for(j <- 0 to 3) {
              m(x+j)(y+0) = '#'
              m(x+j)(y+3) = '#'
              m(x+3)(y+j) = '#'
            }
            m(x)(y+2) = '#'
          }
          case _ => {
            for(j <- 0 until n) {
              m(x+j)(y) = '#'
              m(x+j)(y+n-1) = '#'
              m(x+n-1)(y+j) = '#'
            }
            for(j <- 2 until n) {
              m(x)(y+j) = '#'
            }
            m(x+1)(y+2) = '#'
          }
        }
        x = x+2
        y = y+2
        n = n-4
      }
      m.reverse.foreach(a => println(a.mkString("")))
    }
  }
}