扭转这个螺旋函数

时间:2017-01-26 15:11:34

标签: algorithm math spiral

大约一年的时间里,我用这段很短的代码向外旋转。我现在需要一种方法来反转这个,这样我就可以输入“x:y”并输出可以返回的数字。

https://stackoverflow.com/a/20591835/4333122

intRoot = int(sqrt(tileNum));

x = (round(intRoot / 2) * (-1 ^ (intRoot + 1))) + 
    ((-1 ^ (intRoot + 1)) * (((intRoot * (intRoot + 1)) - tileNum) -
    abs((intRoot * (intRoot + 1)) - tileNum)) / 2);

y = (round(intRoot / 2) * (-1 ^ intRoot)) + ((-1 ^ (intRoot + 1)) * 
    (((intRoot * (intRoot + 1)) - tileNum) + abs((intRoot * (intRoot + 1)) -
    tileNum)) / 2);

我几乎无法理解我在读什么,所以我能想到的最好的是:

我看到一个模式,其中1个坐标只有0,8个1和0,16个1,2和0,24个3,2,1,0,32个4,3,2,1,0等等 - 所以每当一个新的数字引入螺旋时,它的坐标变量比前一个数字多8个。

我可以轻松获得输入中的最高坐标数,例如“5:4”并且知道有(我认为)40个解决方案,因为4个有32个,3个有24个,2个有16个和1个有8个。

然后我可以从32开始并循环遍历任何数字的所有可能输入,其中包含5,并将输出与我的输入进行比较,但如果数字足够高,则会有数千个循环。< / p>

基本上,我不知道。我试图评论OP的提交,但我没有足够的声誉。

0 个答案:

没有答案