21 lines
506 B
Text
21 lines
506 B
Text
function spiral_mat(n) {
|
|
a = J(n*n, 1, 1)
|
|
u = J(n, 1, -n)
|
|
v = J(n, 1, 1)
|
|
for (k=(i=n)-1; k>=1; i=i+2*k--) {
|
|
j = 1..k
|
|
a[j:+i] = u[j] = -u[j]
|
|
a[j:+(i+k)] = v[j] = -v[j]
|
|
}
|
|
return(rowshape(invorder(runningsum(a)),n):-1)
|
|
}
|
|
|
|
spiral_mat(5)
|
|
1 2 3 4 5
|
|
+--------------------------+
|
|
1 | 0 1 2 3 4 |
|
|
2 | 15 16 17 18 5 |
|
|
3 | 14 23 24 19 6 |
|
|
4 | 13 22 21 20 7 |
|
|
5 | 12 11 10 9 8 |
|
|
+--------------------------+
|