print two-dimensional array in spiral order

So I saw this problem in a book today about printing a 2d matrix in spiral order

Here are two solutions to it

Solution one.

def printSpiralTL(m,x1,y1,x2,y2):
    for i in range(x1,x2):
        print m[y1][i]
    for j in range(y1+1,y2+1):
        print m[j][x2-1]

    if x2-x1 > 0:
        printSpiralBL(m, x1, y1 + 1, x2-1, y2)
    

def printSpiralBL(m,x1,y1,x2,y2):
    for i in range(x2-1,x1-1,-1):
        print m[y2][i]
    for j in range(y2-1,y1-1,-1):
        print m[j][x1]
    if x2-x1 > 0:
        printSpiralTL(m, x1+1, y1, x2, y2-1)
    
m = [
    
    [1, 2, 3, 4], 
    [5, 6, 7, 8],
    [9, 0, 1, 2],   
    [3, 4, 5, 6], 
    [7, 8, 9, 1]
        
    ]

printSpiralTL(m,0,0,4,4)

Output:

1
2
3
4
8
2
6
1
9
8
7
3
9
5
6
7
1
5
4
0

Here is another way

Solution two (print - pop -Transpose).

m = [
    
    [1, 2, 3, 4], 
    [5, 6, 7, 8],
    [9, 0, 1, 2],   
    [3, 4, 5, 6], 
    [7, 8, 9, 1]
        
    ]

def spiral(arr):
    while arr:
        for a in arr[0]:
            print a
        arr = list(reversed(zip(*arr[1:])))

spiral(m)

Hope this helps.

Varun Pant

print two-dimensional array in spiral order  by  Varun Pant