大约一年的时间里,我用这段很短的代码向外旋转。我现在需要一种方法来反转这个,这样我就可以输入“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的提交,但我没有足够的声誉。