creating a spiral array in python?

前端 未结 8 653
感情败类
感情败类 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 03:55

    Below is python3 code which transforms:

        [[0, 1, 2, 3, 4], 
        [5, 6, 7, 8, 9], 
        [10, 11, 12, 13, 14], 
        [15, 16, 17, 18, 19], 
        [20, 21, 22, 23, 24]]
    

    to

        [[20, 19, 18, 17, 16], 
        [21, 6, 5, 4, 15], 
        [22, 7, 0, 3, 14], 
        [23, 8, 1, 2, 13], 
        [24, 9, 10, 11, 12]]
    

    You can easily change implementation in such way how do you want...

        def spiral(X, Y):
            x = y = 0
            dx = 0
            dy = -1
            for i in range(max(X, Y) ** 2):
                if (-X / 2 < x <= X / 2) and (-Y / 2 < y <= Y / 2):
                    yield x, y
                    # print(x, y)
                    # DO STUFF...
                if x == y or (x < 0 and x == -y) or (x > 0 and x == 1 - y):
                    dx, dy = -dy, dx
                x, y = x + dx, y + dy
    
        spiral_matrix_size = 5
        my_list = list(range(spiral_matrix_size**2))
        my_list = [my_list[x:x + spiral_matrix_size] for x in range(0, len(my_list), spiral_matrix_size)]
    
        print(my_list)
    
        for i, (x, y) in enumerate(spiral(spiral_matrix_size, spiral_matrix_size)):
            diff = int(spiral_matrix_size / 2)
            my_list[x + diff][y + diff] = i
    
        print(my_list)
    

提交回复
热议问题