Spiral Pattern: how do I find a number given coordinates?

prime number spiral pattern
spiral coordinates algorithm
sacks spiral of prime numbers
spiral numbers
ulam spiral
ulam spiral formula
ulam spiral generator
ulam spiral python

Given a spiral pattern, my job is to write a function that takes certain coordinates and returns the number at these coordinates. For example:

4 < 3 < 2
v       ^
5   0 > 1
v
6 > 7 > 8

If the input is (1, -1), the function would return 8.

I am not looking for a code. I am looking for an explanation as to how spiral patterns work as I am relatively new to programming (taking an introductory online course) and I have never come across such a thing. I would like to also understand the algorithm involved.

Again, I do not want any code, as I am looking to solve this myself. I am only requesting an explanation.

Update: I came up with this code which effectively determines the minimum number for the outer square and iterates until the requires coordinates are reached.

def spiral_index(x, y):
    small = max(x, y)*2 - 1
    min_number = small**2

    xpos = max(x, y)
    ypos = -max(x, y) + 1
    count = min_number

    while xpos != x:
          xpos -= 1
          count += 1
    while ypos != y:
          ypos += 1
          count += 1

    return count

However, my online course submission page rejects the code because it takes too long to execute. So I need a quicker method that is beginner-friendly.


I would think about these things to start: given the farther of the x and y coordinates, (1) how big is the square we are looking at? (how many entries are in it); (2) are we on a column where the numbers are going up or down? (same for rows and right/left); and (3) if we complete the current square, placing our target on the outer border of the square, how many numbers are "ahead" of the target? Clearly, if we know how many are in the square in total and we know how many are ahead, we can calculate the target.

Let's extend your example to (3, -1):

  c c c c c c
  b a a a a c
  b 4 3 2 a c
  b 5 0 1 a c
  b 6 7 8 a T
  b b b b b c

Notice that the as are completing the 4x4 square; the bs the 5x5; and the cs, the 6x6 on which our target, T is on. A 6x6 square has 36 entries. We figure that there are 9 entries ahead of T so T = 35 - 9 = 26.

On a two dimensional grid is there a formula I can use to spiral , Here's a recipe for finding the coordinates of your position after n steps along the spiral. It's simpler to number the positions on the spiral starting at 0: position 0 is ⟨0,0⟩, the Using R,D,L, and U to indicate steps Right, Down, Left, and Up, respectively, we see the following pattern: or with exponents to denote repetition,� Approach: The general solution to the problem would be to create an algorithm to predict the position of the moving spiral point at every step and reference each step in the spiral to a prime number (e.g. step 0 –> 2; step 1 –> 3 ; step 2 –> 5 and so on). Using this prime number we can trace back to the co-ordinates which is our solution (2 –> [0, 0], 3 –> [1, 0], 5 –> [1, 1]).


Here's an attempt at some code to give an idea of what I had in mind. I'm not sure it's completely free of bugs but perhaps you could discover and fix any :) (did I miss the case when x equals y?)

(Note, the online evaluator might not like the print statements in the body of the function.)

"""
  c  c  c  T2 c  c
  b  a  a  a  a  c
  T4 4  3  2  a  c
  b  5  0  1  a  c
  b  6  7  8  a  T1
  b  T3 b  b  b  c
"""

def f(x, y):
  square_size = 1

  if x > 0:
    square_size = 2 * x
  elif x < 0:
    square_size = -2 * x + 1
  if y > 0:
    square_size = max(square_size, 2 * y)
  elif y < 0:
    square_size = max(square_size, -2 * y + 1)

  corner_length = square_size * 2 - 1
  offset = square_size // 2

  # Top-right corner (even square side)
  if square_size % 2 == 0:
    # Target is on the right
    if abs(x) > abs(y):
      num_ahead = corner_length - (offset + y)
    # Target is on the top
    else:
      num_ahead = offset + x - 1

  # Bottom-left corner (odd square side)
  else:
    # Target is on the left
    if abs(x) > abs(y):
      num_ahead = corner_length - (offset - y) - 1
    # Target is on the bottom
    else:
      num_ahead = offset - x

  print ""
  print "Target: (%s, %s)" % (x, y)
  print "Square size: %sx%s" % (square_size, square_size)
  print "Corner length: %s" % corner_length
  print "Num ahead: %s" % num_ahead

  return square_size * square_size - 1 - num_ahead

T1 = (3, -1)
T2 = (1, 3)
T3 = (-1, -2)
T4 = (-2, 1)

print f(*T1)
print f(*T2)
print f(*T3)
print f(*T4)

Output (see the illustration at the top of the code snippet):

Target: (3, -1)
Square size: 6x6
Corner length: 11
Num ahead: 9
26

Target: (1, 3)
Square size: 6x6
Corner length: 11
Num ahead: 3
32

Target: (-1, -2)
Square size: 5x5
Corner length: 9
Num ahead: 3
21

Target: (-2, 1)
Square size: 5x5
Corner length: 9
Num ahead: 7
17

Find coordinates of a prime number in a Prime Spiral, The prime numbers are written in a spiral form starting from the origin (0, is to find the position (x and y coordinates) of a given prime number. The number spiral is constructed by writing the positive integers in a spiral arrangement on a square lattice, as shown. The Ulam spiral is produced by specially marking the prime numbers—for example by circling the primes or writing only the primes or by writing the prime numbers and non-prime numbers in different colors—to obtain a figure


Consider a recursive formulation.

c c c c c
c b b b c
c b a b c
c b b b c
c c c c c

Following the spiral enumerated goes 1 a, 8 b's, 16 c's, 24 d's, etc. If we consider a to be level 0 (special case), b to be level 1, and so on, then each square of size 2*level+1 has 8*level letters in it.

From there, there are 4 cases on which side of the square the coordinates are at (right, top, left, bottom). Determine which square the coordinate is in and simple arithmetic determines the spiral number.

Spiral Problem - Math Forum, Given an x,y plane, with the number zero at the center, so it has coordinates (0,0), if given the coordinates, is there a formula to find the number that will be at at least one pattern: coordinates (-n,n) correspond to point (2n^2). for n = 1, the spiral is (0,0): east; (0,1): east; for n > 1, calculate the spiral for n-1. Look to your right. if the space is occupied by a point of the spiral, take a step forward; if the space is free, turn right, then take a step forward ; It is very easy to extend to other starting orientations, and also to create a left turning spiral.


[2015-08-10] Challenge #227 [Easy] Square Spirals : dailyprogrammer, (Easy): Square Spirals Take a square grid, and put a cross on the center JAVA How I went about solving it: There's a pattern in how a spiral is completed. With this, if given a block number to find, you simply have to determine if it The same principle applies if given coordinates, except now the path is� Calculate the Northing and Easting for the Tangent to Spiral (T.S.) & Spiral to Tangent (S.T.) Use coordinate geometry to calculate the Latitude and Departure for each course and add them to the Northing and Easting of the Point of Intersection (P.I.) to get the Northing and Easting for the T.S. and S.T. 12 August 2009


Ulam spiral, The Ulam spiral or prime spiral is a graphical depiction of the set of prime numbers, devised by In the figure, primes appear to concentrate along certain diagonal lines. In the Images of the spiral up to 65,000 points were displayed on "a scope attached to the machine" and then Pattern recognition � Prime k- tuple� @ideasman42 - that doesn't come into play, because the result is always the same spiral pattern of coordinates. Whether the spiral pattern is cache coherent I guess is dependent on the image buffer implementation. (my guess is it would thrash the cache more than other ways of walking the image, like going line by line in order).


Number Spiral, This site is devoted to the number spiral, sometimes called the Sacks spiral, a type of graph that reveals the distribution of primes and certain Number wheel, figure 1 pages of this website, we'll investigate these patterns and try to make sense out of them. Details. Each non-negative real number n has polar coordinates� So let's just review what a quadrant is. A quadrant are each of the four sections of the coordinate plane. And when we talk about the sections, we're talking about the sections as divided by the coordinate axes. So this right here is the x-axis and this up-down axis is the y-axis. And you can see it divides a coordinate plane into four sections.