creating a spiral array in python?

前端 未结 8 617
感情败类
感情败类 2020-12-05 03:16

Me and my mate were trying to create a fun game in python where the elements entered in the array are accessed in a spiral manner. I have tried few methods like one given be

相关标签:
8条回答
  • 2020-12-05 04:13

    You can fill an array with somehing like this :

    #!/usr/bin/python
    
    class filler:
        def __init__(self, srcarray):
            self.size = len(srcarray)
            self.array = [[None for y in range(self.size)] for y in range(self.size)]
            self.xpos, self.ypos = 0, 0
            self.directions = [self.down, self.right, self.up, self.left]
            self.direction = 0
            self.fill(srcarray)
    
        def fill(self, srcarray):
            for row in reversed(srcarray):
                for elem in reversed(row):
                    self.array[self.xpos][self.ypos] = elem
                    self.go_to_next()
    
        def check_next_pos(self):
            np = self.get_next_pos()
            if np[1] in range(self.size) and np[0] in range(self.size):
                return self.array[np[0]][np[1]] == None
            return False
    
        def go_to_next(self):
            i = 0
            while not self.check_next_pos() and i < 4:
                self.direction = (self.direction + 1) % 4
                i += 4
            self.xpos, self.ypos = self.get_next_pos()
    
        def get_next_pos(self):
            return self.directions[self.direction](self.xpos, self.ypos)
    
        def down(self, x, y):
            return x + 1, y
    
        def right(self, x, y):
            return x, y + 1
    
        def up(self, x, y):
            return x - 1, y
    
        def left(self, x, y):
            return x, y - 1
    
        def print_grid(self):
            for row in self.array:
                print(row)
    
    
    f = filler([[x+y*5 for x in range(5)] for y in range(5)])
    f.print_grid()
    

    The output of this will be :

    [24, 9, 10, 11, 12]
    [23, 8, 1, 2, 13]
    [22, 7, 0, 3, 14]
    [21, 6, 5, 4, 15]
    [20, 19, 18, 17, 16]
    
    0 讨论(0)
  • 2020-12-05 04:14
    def counter(n):
      for i in range(1,n*n):
        yield i+1
    
    n = 11
    a = [[1 for x in range(n)] for y in range(n)]
    x = y = n//2
    val = counter(n)
    
    for i in range(2, n, 2):
      y += 1
      x -= 1
      for k in range(i):
         x += 1
         a[x][y] = next(val)
      for k in range(i):
         y -= 1
         a[x][y] = next(val)
      for k in range(i):
         x -= 1
         a[x][y] = next(val)
      for k in range(i):
         y += 1
         a[x][y] = next(val)
    
    for i in range(n):
      for j in range(n):
        print (a[i][j] , end="")
        print ("  " , end="")
      print("\n")
    
    0 讨论(0)
提交回复
热议问题