-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy patharray2d.py
More file actions
89 lines (81 loc) · 2.61 KB
/
array2d.py
File metadata and controls
89 lines (81 loc) · 2.61 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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
from pyarray import Array
import itertools
class Array2D:
def __init__(self,rows,cols):
self.theRows=Array(rows)
for i in range(rows):
self.theRows[i]=Array(cols)
def numrows(self):
return (len(self.theRows))
def numcols(self):
return (len(self.theRows[0]))
def clear(self,value):
for i in range(self.numrows()):
self.theRows[i].clear(value)
def __getitem__(self,pos):
assert len(pos)==2,"Two subscripts required."
i=pos[0]
j=pos[1]
assert i>=0 and i<self.numrows()\
and j>=0 and j<self.numcols(),\
"Invalid element subscript"
return self.theRows[i][j]
def __setitem__(self,pos,value):
assert len(pos)==2,"Two subscripts required."
i=pos[0]
j=pos[1]
assert i>=0 and i<self.numrows()\
and j>=0 and j<self.numcols(),\
"Invalid element subscript"
self.theRows[i][j]=value
def traverse(self):
x=self.numrows()
y=self.numcols()
for i in range(x):
for j in range(y):
print(self.theRows[i][j], end=" ")
print()
def SelectedTraversal(self,From,To):
assert type(From)==tuple and type(To)==tuple,"Two subscripts required."
lst=[]
#For vertical traversal
if From[1] == To[1]:
if From[0]>To[0]:
direct = -1
else:
direct = 1
for i in range(From[0],To[0],direct):
lst.append(self.theRows[i][From[1]])
#For horizontal traversal
elif From[0] == To[0]:
if From[1]>To[1]:
direct = -1
else:
direct = 1
for j in range(From[1],To[1],direct):
lst.append(self.theRows[From[0]][j])
#For diagnol traversal
#elif To[0]-From[0] == To[1]-From[1]:
else:
if From[0]>To[0]:
direct1 = -1
else:
direct1 = 1
if From[1]>To[1]:
direct2 = -1
else:
direct2 = 1
for i,j in zip(range(From[0],To[0],direct1),range(From[1],To[1],direct2)):
lst.append(self.theRows[i][j])
return lst
#def SelectedTraversal(self,From,To):
# if From[0] > To[0]:
# direct1 = -1
# else:
# direct1 = 1
# if From[1] > To[1]:
# direct2 = -1
# else:
# direct2 = 1
# for i,j in itertools.zip_longest(range(From[0],To[0],direct1),range(From[1],To[1],direct2)):
# pass