RosettaCodeData/Task/Spiral-matrix/Stata/spiral-matrix.stata
2018-06-22 20:57:24 +00:00

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 |
+--------------------------+