Rubyの練習のつもりで、やるだけゲーをAOJで探して解いてた: 魔方陣 | Aizu Online Judge
奇数\(n\)が入力されるから、
大きさが\(n \times n\) の所謂、魔法陣を書けというもので、
魔法陣の書き方を問題文の中で説明してある.
(この問題の引用元であるPCKというのが何なのか知らないけれど、
説明が不正確だなぁ。。。
説明された魔法陣の作り方を完全に真似る必要があるのか、
あくまでヒントであって、自由に魔法陣を作ればいいのかが
判別できないし寧ろ後者に読めるが、
実際には前者らしかった)
#!/usr/bin/ruby
# coding: utf-8
PI = Math.acos(-1)
def padding(n)
(" " + n.to_s)[-4, 4]
end
def solve(n)
f = Array.new(n)
for i in 0...n
f[i] = Array.new(n, 0)
end
x = 1 + n/2
y = n/2
for k in 1..(n*n)
while f[x][y] > 0
x += 1
y += n-1
x %= n
y %= n
end
f[x][y] = k
x += 1
y += 1
x %= n
y %= n
end
for i in 0...n
for j in 0...n
print padding(f[i][n-j-1])
end
puts ''
end
end
while true
n = STDIN.gets.to_i
if n == 0
break
else
solve(n)
end
end