forked from TheAlgorithms/Python
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathspiral_print.py
More file actions
68 lines (58 loc) · 1.77 KB
/
spiral_print.py
File metadata and controls
68 lines (58 loc) · 1.77 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
"""
This program print the matrix in spiral form.
This problem has been solved through recursive way.
Matrix must satisfy below conditions
i) matrix should be only one or two dimensional
ii) number of column of all rows should be equal
"""
from collections.abc import Iterable
def check_matrix(matrix):
# must be
if matrix and isinstance(matrix, Iterable):
if isinstance(matrix[0], Iterable):
prev_len = 0
for row in matrix:
if prev_len == 0:
prev_len = len(row)
result = True
else:
result = prev_len == len(row)
else:
result = True
else:
result = False
return result
def spiralPrint(a):
if check_matrix(a) and len(a) > 0:
matRow = len(a)
if isinstance(a[0], Iterable):
matCol = len(a[0])
else:
for dat in a:
print(dat),
return
# horizotal printing increasing
for i in range(0, matCol):
print(a[0][i]),
# vertical printing down
for i in range(1, matRow):
print(a[i][matCol - 1]),
# horizotal printing decreasing
if matRow > 1:
for i in range(matCol - 2, -1, -1):
print(a[matRow - 1][i]),
# vertical printing up
for i in range(matRow - 2, 0, -1):
print(a[i][0]),
remainMat = [row[1 : matCol - 1] for row in a[1 : matRow - 1]]
if len(remainMat) > 0:
spiralPrint(remainMat)
else:
return
else:
print("Not a valid matrix")
return
# driver code
if __name__ == "__main__":
a = ([1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12])
spiralPrint(a)