all tasks

This commit is contained in:
Ingy döt Net 2013-04-11 01:07:29 -07:00
parent b83f433714
commit 68f8f3e56b
14735 changed files with 178959 additions and 0 deletions

View file

@ -0,0 +1,22 @@
def spiral(n):
dx,dy = 1,0 # Starting increments
x,y = 0,0 # Starting location
myarray = [[None]* n for j in range(n)]
for i in xrange(n**2):
myarray[x][y] = i
nx,ny = x+dx, y+dy
if 0<=nx<n and 0<=ny<n and myarray[nx][ny] == None:
x,y = nx,ny
else:
dx,dy = -dy,dx
x,y = x+dx, y+dy
return myarray
def printspiral(myarray):
n = range(len(myarray))
for y in n:
for x in n:
print "%2i" % myarray[x][y],
print
printspiral(spiral(5))

View file

@ -0,0 +1,23 @@
def spiral(n):
def spiral_part(x, y, n):
if x == -1 and y == 0:
return -1
if y == (x+1) and x < (n // 2):
return spiral_part(x-1, y-1, n-1) + 4*(n-y)
if x < (n-y) and y <= x:
return spiral_part(y-1, y, n) + (x-y) + 1
if x >= (n-y) and y <= x:
return spiral_part(x, y-1, n) + 1
if x >= (n-y) and y > x:
return spiral_part(x+1, y, n) + 1
if x < (n-y) and y > x:
return spiral_part(x, y-1, n) - 1
array = [[0] * n for j in xrange(n)]
for x in xrange(n):
for y in xrange(n):
array[x][y] = spiral_part(y, x, n)
return array
for row in spiral(5):
print " ".join("%2s" % x for x in row)

View file

@ -0,0 +1,16 @@
def spiral(n):
dat = [[None] * n for i in range(n)]
le = [[i + 1, i + 1] for i in reversed(range(n))]
le = sum(le, [])[1:] # for n = 5 le will be [5, 4, 4, 3, 3, 2, 2, 1, 1]
dxdy = [[1, 0], [0, 1], [-1, 0], [0, -1]] * ((len(le) + 4) / 4) # long enough
x, y, val = -1, 0, -1
for steps, (dx, dy) in zip(le, dxdy):
x, y, val = x + dx, y + dy, val + 1
for j in range(steps):
dat[y][x] = val
if j != steps-1:
x, y, val = x + dx, y + dy, val + 1
return dat
for row in spiral(5): # calc spiral and print it
print ' '.join('%3s' % x for x in row)

View file

@ -0,0 +1,19 @@
import itertools
concat = itertools.chain.from_iterable
def partial_sums(items):
s = 0
for x in items:
s += x
yield s
grade = lambda xs: sorted(range(len(xs)), key=xs.__getitem__)
values = lambda n: itertools.cycle([1,n,-1,-n])
counts = lambda n: concat([i,i-1] for i in range(n,0,-1))
reshape = lambda n, xs: zip(*([iter(xs)] * n))
spiral = lambda n: reshape(n, grade(list(partial_sums(concat(
[v]*c for c,v in zip(counts(n), values(n)))))))
for row in spiral(5):
print(' '.join('%3s' % x for x in row))