数字螺旋
* * * *
拉格朗日计划
* * * *
数字螺旋

打印如下$10\times 10$的数字螺旋方阵,方阵由0到99共100个数字组成,从左上角开始顺时针螺旋递进,数字右对齐,左右两个数字间用一个空格隔开。

 0  1  2  3  4  5  6  7  8  9
35 36 37 38 39 40 41 42 43 10
34 63 64 65 66 67 68 69 44 11
33 62 83 84 85 86 87 70 45 12
32 61 82 95 96 97 88 71 46 13
31 60 81 94 99 98 89 72 47 14
30 59 80 93 92 91 90 73 48 15
29 58 79 78 77 76 75 74 49 16
28 57 56 55 54 53 52 51 50 17
27 26 25 24 23 22 21 20 19 18


本题难度:



解答

先计算出当前格所在的圈数(由外向内计数),记作r,再计算出与当前圈起点或下一圈起点的距离,记作b,最后对齐。

最终代码有五行(不太理想)。

代码长度:152字节 vs. 全站第一:80字节。

a,x=[0]+[*b'$@T`d'],range(10)
for i in x:
  c=[]
  for j in x:r=min(i,j,9-i,9-j);b=i+j-2*r;c+=[str([a[r+1]-b,a[r]+b][i==r or j==9-r]).rjust(2)]
  print(*c)