- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
def making_field(size):
field = []
for i in range(size):
field.append([0] * size)
return field
size = 1001
quad = making_field(size)
def print_quad(quad):
for i in range(0,len(quad)):
print '\n'
for y in range(0,len(quad[i])):
c = str(quad[i][y])
if len(c) == 1: c = '00' + c
elif len(c) == 2: c = '0' + c
print c,
def get_new_direction(direction):
if direction == 'right': return 'down'
elif direction == 'down': return 'left'
elif direction == 'left': return 'up'
elif direction == 'up': return 'right'
def making_step_rules(size):
steps = [1]
for i in range(1,size*size):
steps.append(i)
steps.append(i)
return steps
steps = making_step_rules(size)
def making_step(steps):
steps.pop(0)
return steps[0]
def step_by_step(quad, y, x, direction, steps, fill):
if fill-1 == size*size-steps: steps -= 1
if direction == 'right':
for i in range(0,steps):
fill += 1
quad[y][x+i] = fill
x = x + steps - 1
y = y + 1
elif direction == 'left':
for i in range(0,steps):
fill += 1
quad[y][x-i] = fill
x = x - steps + 1
y = y - 1
elif direction == 'up':
for i in range(0,steps):
fill += 1
quad[y-i][x] = fill
y = y - steps + 1
x = x + 1
elif direction == 'down':
for i in range(0,steps):
fill += 1
quad[y+i][x] = fill
y = y + steps - 1
x = x - 1
return fill, y, x
def fill_quad(quad):
fill = 1
x, y = size/2, size/2
direction = 'up'
quad[y][x] = fill
x += 1
while fill < size*size-1:
step = making_step(steps)
direction = get_new_direction(direction)
fill, y, x = step_by_step(quad, y, x, direction, step, fill)
fill_quad(quad)
print 'Sum :' , sum(quad[i][i]+quad[i][(len(quad)-1)-i] for i in range(0,len(quad)))-1