|
|
〇〇 发表于 2015-10-17 09:33 ![]()
这个公式总结得好简练
我今天细细研究了一下 newkid 的写法, 总结的精简公式:
(:N+3)/4-ABS((:N-1)/4 - LEAST(r-1,:N-r,c-1,:N-c))
数字方阵中,根据坐标 (rowno,colno) 可以确定所在的环: least(rowno-1,&N-rowno,colno-1,&N-colno)+1
再根据环确定这个坐标位置的值,以N=9为例:
环: 1,2,3,4,5
值: 1,2,3,2,1
我到了这里,就在SQL中直接用 CASE WHEN 的语句表达了,如下:
select rowno,colno,
case when circle <= ((&N+1)/2 + 1)/2 then circle
else (&N+1)/2 +1 - circle
end as val
from t2;
对于N,环的最大值为 (&N+1)/2 + 1)/2, 在到达这个值之前,环与值相等,只后是环与值的差递减,用绝对值表达就是:
((&N+1)/2 + 1)/2 - abs( ((&N+1)/2 + 1)/2 - (least(rowno-1,&N-rowno,colno-1,&N-colno)+1) )
把这个再化简一下,就是 newkid 的公式了:
(:N+3)/4-ABS((:N-1)/4 - LEAST(r-1,:N-r,c-1,:N-c))
|
|