Problem:


魔方陣

 n × n の正方形のマス目の中に数字の１から n × n  が一つずつ入っていて、縦のどの列のマス目の和も、横のどの列のマス目の和も対角線のマス目の和も等しいものを魔方陣といいます。

一辺のマスの個数が奇数の魔方陣の作り方には以下の方法があります。

中央のマス目のちょうど一つ下のマス目に１を入れる。

次の数字を右斜め下のマス目に入れる。
ただし、数字を入れようとしたマス目が正方形からはみ出している場合、すでに数字が埋まっている場合は以下の方法に従って数字を入れるマス目を探す。

右にはみ出した場合には、同じ行の左はしに、左にはみ出した場合には、同じ行の右はしに、下にはみ出した場合には、同じ列の一番上に数字を入れる。

 数字を入れようとしたマス目が埋まっているときには、その埋まっているマス目の左斜め下のマス目に入れる。

全てのマス目が埋まるまで２を繰り返す。

この方法に従って、一辺のマス目の個数 n を入力として、その大きさの魔方陣を出力するプログラムを作成して下さい。ただし、n は 3 以上 15 以下の奇数とします。マス目に入る各数字は右詰 4 桁で出力してください。

入力

複数の入力が与えられます。各入力で n （正の整数）が１行に与えられます。入力は 0 で終了します。入力の数は 10 を超えません。

出力

各入力に対して n × n の魔方陣を出力して下さい。

Sample Input

3
5
0

Output for the Sample Input

   4   9   2
   3   5   7
   8   1   6
  11  24   7  20   3
   4  12  25   8  16
  17   5  13  21   9
  10  18   1  14  22
  23   6  19   2  15



Sample input:
3
5
0


Sample output:
   4   9   2
   3   5   7
   8   1   6
  11  24   7  20   3
   4  12  25   8  16
  17   5  13  21   9
  10  18   1  14  22
  23   6  19   2  15

Submission status: WA: Presentation Error

Solution code:
while True:
    n=input()
    if n==0:
        break
    magic=[[0 for i in range(n)] for j in range(n)]
    i=n/2
    j=n/2+1
    for number in range(1,n*n+1):
        magic[j][i]=number
        if number==n*n:
            break
        if magic[(j+1)%n][(i+1)%n]==0:
            i,j=(i+1)%n,(j+1)%n
        else:
            i,j=(i+1)%n,(j+1)%n
            while magic[j][i]!=0:
                i,j=(i-1)%n,(j+1)%n
    for i in range(n):
        for j in range(n):
            print str(magic[i][j]).rjust(3),
        print ""

Submission status: WA: Presentation Error

Solution code:
# -*- coding: utf-8 -*-

import sys
import os
import math

for s in sys.stdin:
    n = int(s)
    if n == 0:
        break

    M = [[None for i in range(n)] for j in range(n)]

    # 1
    x = n // 2
    y = n // 2 + 1
    M[y][x] = 1
    x = x + 1
    y = y + 1
    counter = 2

    while counter < n * n + 1:

        if x >= n:
            x = 0
        elif x < 0:
            x = n - 1

        if y >= n:
            y = 0
        elif y < 0:
            y = n - 1

        if M[y][x] is not None:
            x -= 1
            y += 1
        else:
            M[y][x] = counter
            counter += 1
            x += 1
            y += 1

    for row in M:
        print(*row)

Submission status: WA: Presentation Error

Solution code:
from sys import stdin
def sqmatrix(n):
  return [[0] * n for i in range(n)]

def magicsq(m):
    n = len(m)
    j = int(n/2)
    i = j + 1
    for num in range(1, n**2 + 1):
        m[i][j] = num
        i += 1
        j += 1
        i = i%n
        j = j % n
        if m[i][j] != 0:
            i += 1
            j -= 1
        if j < 0:
            j = n -1
        i = i % n
    return m

for line in stdin:
    n = int(line)
    if n == 0:
        break
    sm = sqmatrix(n)
    for row in magicsq(sm): print (' '.join(map(str,row)))

Submission status: WA: Presentation Error

Solution code:
# -*- coding: utf-8 -*-
"""
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0078
"""
import sys



class MagicSquare():
    def __init__(self, size):
        self.size = size
        self.data = [['@']*self.size for _ in range(self.size)]
        self.fill_data()

    def fill_data(self):
        num = 1
        x = self.size // 2
        y = x + 1
        self.data[y][x] = num

        while num < self.size**2:
            x += 1
            if x >= self.size:
                x = 0
            y += 1
            if y >= self.size:
                y = 0
            if self.data[y][x] == '@':
                num += 1
                self.data[y][x] = num
            else:
                while self.data[y][x] != '@':
                    x -= 1
                    if x < 0:
                        x = self.size - 1
                    y += 1
                    if y >= self.size:
                        y = 0
                num += 1
                self.data[y][x] = num

    def print_data(self):
        digits = len(str(self.size**2))
        for row in self.data:
            print(*row)


def main(args):
    while True:
        size = int(input())
        if size < 3 or size%2 == 0:
            break
        ms = MagicSquare(size)
        ms.print_data()


if __name__ == '__main__':
    main(sys.argv[1:])

Submission status: WA: Presentation Error

Solution code:
for e in iter(input,'0'):
 n=int(e);m=[[0]*n for _ in[0]*n]
 j=n//2;i=j+1
 m[i][j]=1
 for k in range(2,n*n+1):
  i,j=-~i%n,-~j%n
  if m[i][j]:i,j=-~i%n,~-j%n
  m[i][j]=k
 for r in m:print('  '.join(map(str,r)))

Submission status: WA: Presentation Error

Solution code:
ans = []
while True:
    n = input()
    if n == 0:
        break
    c = 1
    N = n*n
    circle = [0]*N
    p = (N+1)/2-1
    while c <= N:
        if p == N:
            p = 1
        elif p % n == 0:
            p += 1
        elif p+n > N:
            p -= (N-n-1)
        else:
            p += n+1
        
        if circle[p-1] != 0:
            while circle[p-1] != 0:
                if p == N-n+1:
                    p = n
                elif p-1 % n == 0:
                    p += (n*2 -1)
                elif p+n > N:
                    p -= N - n + 1
                else:
                    p += n-1

        circle[p-1] = c
        c += 1
    p = 0
    temp = ''
    while p*n != N:
        temp += ''.join(map(str,circle[n*p:n*(p+1)]))
        temp += '\n'
        p += 1
    ans.append(temp)
for i in ans:
    print i

Submission status: WA: Presentation Error

Solution code:
ans = []
while True:
    n = input()
    if n == 0:
        break
    c = 1
    N = n*n
    circle = [0]*N
    p = (N+1)/2-1
    while c <= N:
        if p == N:
            p = 1
        elif p % n == 0:
            p += 1
        elif p+n > N:
            p -= (N-n-1)
        else:
            p += n+1
        
        if circle[p-1] != 0:
            while circle[p-1] != 0:
                if p == N-n+1:
                    p = n
                elif p-1 % n == 0:
                    p += (n*2 -1)
                elif p+n > N:
                    p -= N - n + 1
                else:
                    p += n-1

        circle[p-1] = c
        c += 1
    p = 0
    temp = ''
    while p*n != N:
        temp += ''.join(map(lambda x:str(x).rjust(4),circle[n*p:n*(p+1)]))
        temp += '\n'
        p += 1
    ans.append(temp)
for i in ans:
    print i

Submission status: WA: Presentation Error

Solution code:
while True:
    n=input()
    if n==0:
        break
    board=[[0]*n for unused in xrange(n)]
    y,x=n/2+1,n/2
    board[y][x]=1
    for i in xrange(2,n*n+1):
        ny,nx=(y+1)%n,(x+1)%n
        while True:
            if board[ny][nx]==0:
                y,x=ny,nx
                break
            else:
                ny,nx=(ny+1)%n,(nx+n-1)%n
        board[y][x]=i
    for i in xrange(n):
        for j in xrange(n):
            print board[i][j],
        print

Submission status: WA: Presentation Error

Solution code:
while True:
    n=input()
    if n==0:
        break
    board=[[0]*n for unused in xrange(n)]
    y,x=n/2+1,n/2
    board[y][x]=1
    for i in xrange(2,n*n+1):
        ny,nx=(y+1)%n,(x+1)%n
        while True:
            if board[ny][nx]==0:
                y,x=ny,nx
                break
            else:
                ny,nx=(ny+1)%n,(nx+n-1)%n
        board[y][x]=i
    for i in xrange(n):
        for j in xrange(n):
            print str(board[i][j]).rjust(4),
        print