2016 Update
This commit is contained in:
parent
948b86eafa
commit
dcf5d15da3
7965 changed files with 139854 additions and 31002 deletions
65
Task/Zig-zag-matrix/Python/zig-zag-matrix-5.py
Normal file
65
Task/Zig-zag-matrix/Python/zig-zag-matrix-5.py
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
from __future__ import print_function
|
||||
|
||||
import math
|
||||
|
||||
|
||||
def zigzag( dimension):
|
||||
''' generate the zigzag indexes for a square array
|
||||
Exploiting the fact that an array is symmetrical around its
|
||||
centre
|
||||
'''
|
||||
NUMBER_INDEXES = dimension ** 2
|
||||
HALFWAY = NUMBER_INDEXES // 2
|
||||
KERNEL_ODD = dimension & 1
|
||||
|
||||
xy = [0 for _ in range(NUMBER_INDEXES)]
|
||||
# start at 0,0
|
||||
ix = 0
|
||||
iy = 0
|
||||
# 'fake' that we are going up and right
|
||||
direction = 1
|
||||
# the first index is always 0, so start with the second
|
||||
# until halfway
|
||||
for i in range(1, HALFWAY + KERNEL_ODD):
|
||||
if direction > 0:
|
||||
# going up and right
|
||||
if iy == 0:
|
||||
# are at top
|
||||
ix += 1
|
||||
direction = -1
|
||||
else:
|
||||
ix += 1
|
||||
iy -= 1
|
||||
else:
|
||||
# going down and left
|
||||
if ix == 0:
|
||||
# are at left
|
||||
iy += 1
|
||||
direction = 1
|
||||
else:
|
||||
ix -= 1
|
||||
iy += 1
|
||||
# update the index position
|
||||
xy[iy * dimension + ix] = i
|
||||
|
||||
# have first half, but they are scattered over the list
|
||||
# so find the zeros to replace
|
||||
for i in range(1, NUMBER_INDEXES):
|
||||
if xy[i] == 0 :
|
||||
xy[i] = NUMBER_INDEXES - 1 - xy[NUMBER_INDEXES - 1 - i]
|
||||
|
||||
return xy
|
||||
|
||||
|
||||
def main(dim):
|
||||
zz = zigzag(dim)
|
||||
print( 'zigzag of {}:'.format(dim))
|
||||
width = int(math.ceil(math.log10(dim**2)))
|
||||
for j in range(dim):
|
||||
for i in range(dim):
|
||||
print('{:{width}}'.format(zz[j * dim + i], width=width), end=' ')
|
||||
print()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main(5)
|
||||
Loading…
Add table
Add a link
Reference in a new issue