fork download
  1. import math
  2.  
  3. def xytop(x,y):
  4. if y * y >= x * x:
  5. p = 4 * y * y - y - x
  6. if y < x:
  7. p = p - 2 * (y - x)
  8. else:
  9. p = 4 * x * x - y - x
  10. if y < x:
  11. p = p + 2 *(y - x)
  12. return p
  13.  
  14. def ptoxy(p):
  15. layer = (int(math.sqrt(p)) + 1) // 2
  16. topleft = 4*layer*layer
  17. if p <= topleft:
  18. if p <= topleft - 2 * layer:
  19. return [layer, 3*layer + p - topleft]
  20. else:
  21. return [-layer + topleft - p, layer]
  22. else:
  23. if p >= topleft + 2 * layer:
  24. return [p-topleft - 3*layer, -layer]
  25. else:
  26. return [-layer, layer-p + topleft]
  27.  
  28.  
  29. for y in range(-3,4):
  30. for x in range(-3,4):
  31. p = xytop(x, y)
  32. cell = ptoxy(p)
  33. print(x, y, p, cell, cell == [x,y])
  34. print()
Success #stdin #stdout 0.03s 9116KB
stdin
Standard input is empty
stdout
-3 -3 42 [-3, -3] True
-2 -3 43 [-2, -3] True
-1 -3 44 [-1, -3] True
0 -3 45 [0, -3] True
1 -3 46 [1, -3] True
2 -3 47 [2, -3] True
3 -3 48 [3, -3] True

-3 -2 41 [-3, -2] True
-2 -2 20 [-2, -2] True
-1 -2 21 [-1, -2] True
0 -2 22 [0, -2] True
1 -2 23 [1, -2] True
2 -2 24 [2, -2] True
3 -2 25 [3, -2] True

-3 -1 40 [-3, -1] True
-2 -1 19 [-2, -1] True
-1 -1 6 [-1, -1] True
0 -1 7 [0, -1] True
1 -1 8 [1, -1] True
2 -1 9 [2, -1] True
3 -1 26 [3, -1] True

-3 0 39 [-3, 0] True
-2 0 18 [-2, 0] True
-1 0 5 [-1, 0] True
0 0 0 [0, 0] True
1 0 1 [1, 0] True
2 0 10 [2, 0] True
3 0 27 [3, 0] True

-3 1 38 [-3, 1] True
-2 1 17 [-2, 1] True
-1 1 4 [-1, 1] True
0 1 3 [0, 1] True
1 1 2 [1, 1] True
2 1 11 [2, 1] True
3 1 28 [3, 1] True

-3 2 37 [-3, 2] True
-2 2 16 [-2, 2] True
-1 2 15 [-1, 2] True
0 2 14 [0, 2] True
1 2 13 [1, 2] True
2 2 12 [2, 2] True
3 2 29 [3, 2] True

-3 3 36 [-3, 3] True
-2 3 35 [-2, 3] True
-1 3 34 [-1, 3] True
0 3 33 [0, 3] True
1 3 32 [1, 3] True
2 3 31 [2, 3] True
3 3 30 [3, 3] True