Guest User

Square Walker

a guest
Aug 27th, 2014
405
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.35 KB | None | 0 0
  1. #!/usr/bin/env python
  2.  
  3. import numpy as np
  4. import argparse
  5.  
  6. def create_test(size, shuffle=False):
  7.     data = np.arange(1, size*size+1)
  8.     if shuffle:
  9.         np.random.shuffle(data)
  10.     return data.reshape(size, size)
  11.  
  12. def walk(data, size, level):
  13.     steps=np.array([[0,1], [1,0], [0,-1], [-1,0]])
  14.     walks=steps[np.arange(4).repeat(level*2)]
  15.     start=(size - 1) / 2 - level
  16.     return [data[tuple(x + (start, start))] for x in walks.cumsum(0)]
  17.  
  18. def offset(level):
  19.     step=(level-1)*2+1
  20.     off=[0, 1, step, 1, step, 1, step, 1]
  21.     return np.cumsum(off)+(level-1)
  22.  
  23. def solve(data, size):
  24.     result = [data[(size/2, size/2)]]
  25.     rect1 = walk(data, size, 1)
  26.     off = np.argmax(rect1)
  27.     result = np.append(result, np.roll(rect1, -off))
  28.     for level in range(2, size/2 + 1):
  29.         rect = walk(data, size, level)
  30.         tmp = np.roll(rect, -offset(level)[off])
  31.         result = np.append(result, tmp)
  32.     return result
  33.  
  34. if __name__ == '__main__':
  35.     parser = argparse.ArgumentParser(description='Square walker')
  36.     parser.add_argument('size', help='size of data')
  37.     parser.add_argument('-s', '--shuffle', action='store_true',
  38.                         help='shuffle the test data')
  39.     option = parser.parse_args()
  40.  
  41.     size = int(option.size)
  42.     data = create_test(size, option.shuffle)
  43.     print data
  44.     print solve(data, size)
Advertisement
Add Comment
Please, Sign In to add comment