Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
First solution in Clear category for Square Spiral by mortonfox
def get_coord(num):
if num == 1: return (0, 0)
for ring in range(1, 30):
ring2 = 2 * ring
if num > (ring2 + 1) ** 2: continue
corner = (ring2 - 1) ** 2
if num <= corner + ring2: return (-ring + num - corner, ring)
corner += ring2
if num <= corner + ring2: return (ring, ring - num + corner)
corner += ring2
if num <= corner + ring2: return (ring - num + corner, -ring)
corner += ring2
return (-ring, -ring + num - corner)
def find_distance(first, second):
x1, y1 = get_coord(first)
x2, y2 = get_coord(second)
return abs(x1 - x2) + abs(y1 - y2)
if __name__ == '__main__':
#These "asserts" using only for self-checking and not necessary for auto-testing
assert find_distance(1, 9) == 2, "First"
assert find_distance(9, 1) == 2, "Reverse First"
assert find_distance(10, 25) == 1, "Neighbours"
assert find_distance(5, 9) == 4, "Diagonal"
assert find_distance(26, 31) == 5, "One row"
assert find_distance(50, 16) == 10, "One more test"
Oct. 20, 2016
Comments: