結果
問題 | No.217 魔方陣を作ろう |
ユーザー |
|
提出日時 | 2016-12-06 18:52:51 |
言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
結果 |
AC
|
実行時間 | 31 ms / 5,000 ms |
コード長 | 1,794 bytes |
コンパイル時間 | 230 ms |
コンパイル使用メモリ | 12,928 KB |
実行使用メモリ | 11,008 KB |
最終ジャッジ日時 | 2024-11-28 03:11:44 |
合計ジャッジ時間 | 1,636 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 18 |
ソースコード
#!/usr/bin/env python3def magic_square(n):assert n >= 3f = [ [ None for _ in range(n) ] for _ in range(n) ]if n % 2 == 1: # http://d.hatena.ne.jp/ziom/20090619/p1y, x = 0, n//2for i in range(n**2):f[y%n][x%n] = i+1if f[(y-1)%n][(x+1)%n] is None:y, x = y-1, x+1else:y, x = y+1, xelif n % 4 == 0: # http://d.hatena.ne.jp/ziom/20090620/p1for y in range(n):for x in range(n):i = y*n+x+1if (y+1)&2 == (x+1)&2:y = n-y-1x = n-x-1f[y][x] = ielse: # http://d.hatena.ne.jp/ziom/20090621/p1# [1,2n-2]f[ 0][ 0] = 1f[ 0][n-1] = 2f[n-1][ 1] = 3for i in range(4,2*n-1):if i <= n:x = i-2y = [n-1, 0][bool(i&2)]f[y][x] = iif i == n:f[y][x] += 3else:y = i-nx = [n-1, 0][bool(i&2)]f[y][x] = iif i < n+4:f[y][x] -= 1# [n^2-n+1,n^2]for i in range(1,n-1):for j in [ 0, n-1 ]:if f[ j][ i] is not None:f[n-j-1][i] = n**2 - f[ j][ i] + 1if f[ i][ j] is not None:f[i][n-j-1] = n**2 - f[ i][ j] + 1f[n-1][n-1] = n**2 - f[ 0][ 0] + 1f[n-1][ 0] = n**2 - f[ 0][n-1] + 1# recursiong = magic_square(n-2)for y in range(n-2):for x in range(n-2):f[y+1][x+1] = g[y][x] + 2*n-2return fn = int(input())for row in magic_square(n):print(*row)