Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
First solution in Clear category for Square Spiral by kdim
def find_distance(first, second):
def get_xy(number):
radius = 0.5 * number ** 0.5 - 0.5
radius = int(radius) + bool(radius % 1)
if not radius:
return 0, 0
n, m = divmod((2 * radius + 1) ** 2 - number, 2 * radius)
match n:
case 0: return -radius, radius - m
case 1: return m - radius, -radius
case 2: return radius, m - radius
case 3: return radius - m, radius
x1, y1 = get_xy(first)
x2, y2 = get_xy(second)
return abs(x2 - x1) + abs(y2 - y1)
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"
Jan. 11, 2023