Skip to content

Instantly share code, notes, and snippets.

@avamsi
Created August 21, 2016 12:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save avamsi/22b2d0d28aa2fbb7079ffd2a2196d1d2 to your computer and use it in GitHub Desktop.
Save avamsi/22b2d0d28aa2fbb7079ffd2a2196d1d2 to your computer and use it in GitHub Desktop.
import itertools
steps = itertools.cycle([(0, 1), (1, 0), (0, -1), (-1, 0)])
step = next(steps)
def next_step(x, y):
global step
oldv = x, y
x, y = x + step[0], y + step[1]
if min(x, y) < 0 or max(x, y) >= N or mat[x][y]:
step = next(steps)
return next_step(*oldv)
return x, y
N = 10
mat = [[0]*N for _ in range(N)]
i, j = 0, -1
for a in range(1, N*N + 1):
i, j = next_step(i, j)
mat[i][j] = a
print('\n'.join([' '.join([str(i).rjust(3) for i in row]) for row in mat]))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment