Advertisement
Guest User

Untitled

a guest
Dec 3rd, 2017
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 0.68 KB | None | 0 0
  1. TARGET = xxx
  2. from math import ceil, sqrt
  3.  
  4. # Ulam's spiral
  5. def spiral(n):
  6.     k = ceil((sqrt(n)-1)/2)
  7.     t = 2*k + 1
  8.     m = t**2
  9.     t -= 1
  10.     if n >= (m-t):
  11.         return k - (m-n), -k
  12.     else:
  13.         m -= t
  14.     if n >= (m-t):
  15.         return -k, -k + (m-n)
  16.     else:
  17.         m -= t
  18.     if n >= (m-t):
  19.         return -k + (m-n), k
  20.     else:
  21.         return k, k - (m-n-t)
  22.  
  23. def distance(n):
  24.     x, y = map(abs, spiral(n))
  25.     return x + y
  26.  
  27. # Part 2, see
  28. # OEIS A141481
  29. # http://oeis.org/A141481/b141481.txt
  30.  
  31.  
  32. assert distance(1) == 0
  33. assert distance(12) == 3
  34. assert distance(23) == 2
  35. assert distance(1024) == 31
  36.  
  37. print "Part 1: {}".format(distance(TARGET))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement